Skip to main content
The ixWithdrawLiquidityToBase method on the MarketThree class withdraws liquidity from the CLMM pool and converts it back to base assets. It removes liquidity (collecting accrued fees), merges PT and YT back into SY, and redeems SY for the base asset in a single atomic operation.

Usage

import { MarketThree, LOCAL_ENV } from "@exponent-labs/exponent-sdk";
import { Connection, PublicKey, Transaction, sendAndConfirmTransaction } from "@solana/web3.js";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const market = await MarketThree.load(LOCAL_ENV, connection, marketAddress);

const { ixs, setupIxs } = await market.ixWithdrawLiquidityToBase({
  owner: wallet.publicKey,
  amountLp: 9_000_000_000n,
  minBaseOut: 8_500_000_000n,
  lpPosition: lpPositionPublicKey,
});

const tx = new Transaction().add(...setupIxs, ...ixs);
const signature = await sendAndConfirmTransaction(connection, tx, [wallet]);
The lpPosition parameter is the public key of your LP position account. Use market.getUserLpPositions() to retrieve your positions.

Required Parameters

ParameterTypeDescription
ownerPublicKeyThe owner’s wallet public key
amountLpbigintAmount of LP tokens to withdraw
minBaseOutbigintMinimum amount of base asset to receive
lpPositionPublicKeyPublic key of the LP position account

Optional Parameters

ParameterTypeDescription
tokenSyWithdrawerPublicKeyIntermediate SY token account. Defaults to owner’s ATA
tokenYtWithdrawerPublicKeyIntermediate YT token account. Defaults to owner’s ATA
tokenPtWithdrawerPublicKeyIntermediate PT token account. Defaults to owner’s ATA
tokenBaseWithdrawerPublicKeyDestination base token account. Defaults to owner’s ATA

Returns

Returns a Promise<PreparedInstruction> with the following structure:
{
  ixs: TransactionInstruction[],      // Main instructions to execute
  setupIxs: TransactionInstruction[]  // Setup instructions for creating ATAs
}