Remove liquidity
When you want to adjust the liquidity of your position or withdraw liquidity from the position, you can use the following method.
When you withdraw liquidity, you also have the option to collect fees or rewards at the same time. Please refer to the parameter description below for more details.
Remove liquidity by inputting liquidity value
use sdk.Position.removeLiquidityTransactionPayload()
method.
Function input params
Please refer to the original function for specific parameter types.
poolID
: The object id about which pool you want to operation.posID
: The object id about position.deltaLiquidity
: The quantity of liquidity.minAmountA
: The minimum amount of coin A that a user can acquire.maxAmountB
: The minimum amount of coin B that a user can acquire.
collectFee
: you can select collect fees while adding liquidity.rewarderCoinTypes
: If these not empty, it will collect rewarders in this position, if you already open the position. You can even determine which types of rewards you want to harvest by specifying the coin types you pass.
Example
const sendKeypair = buildTestAccount()
// Fetch pool data
const pool = await sdk.Pool.getPool(poolAddress)
// Fetch position data
const position = await sdk.Position.getPositionInfo(position_object_id)
// build tick data
const lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(position.tick_lower_index)
const upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(position.tick_upper_index)
const ticksHandle = pool.ticks_handle
const tickLower = await sdk.Pool.getTickDataByIndex(ticksHandle, position.tick_lower_index)
const tickUpper = await sdk.Pool.getTickDataByIndex(ticksHandle, position.tick_upper_index)
// input liquidity amount for remove
const liquidity = new BN(10000)
// slippage value
const slippageTolerance = new Percentage(new BN(5), new BN(100))
const curSqrtPrice = new BN(pool.current_sqrt_price)
// Get token amount from liquidity.
const coinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(liquidity, curSqrtPrice, lowerSqrtPrice, upperSqrtPrice, false)
// adjust token a and token b amount for slippage
const { tokenMaxA, tokenMaxB } = adjustForCoinSlippage(coinAmounts, slippageTolerance, false)
// build remove liquidity params
const removeLiquidityParams : RemoveLiquidityParams = {
coinTypeA: pool.coinTypeA,
coinTypeB: pool.coinTypeB,
delta_liquidity: liquidity.toString(),
min_amount_a: tokenMaxA.toString(),
min_amount_b: tokenMaxB.toString(),
pool_id: pool.poolAddress,
pos_id: position.pos_object_id
collect_fee: true // Whether to collect fee
}
const removeLiquidityTransactionPayload = sdk.Position.removeLiquidityTransactionPayload(removeLiquidityParams)
const transferTxn = await sdk.fullClient.sendTransaction(sendKeypair, removeLiquidityTransactionPayload)
console.log('removeLiquidity: ', transferTxn)
Last updated