When you withdraw all the liquidity from your position, you can decide whether to close the position. Please note that when closing the position, you must also withdraw all the current position's liquidity, fees, and rewards.
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.
minAmountA: The minimum amount of coin A that a user can acquire.
maxAmountB: The minimum amount of coin B that a user can acquire.
Because of pool price will change, the amount of coin A and coin B will change. So the min_amount_a and min_amount_a means no matter how the price moves, the amount quantity that I need to receive at least is typically obtained by adding the amount potentially acquired through calculations to the slippage adjustment.
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
constsendKeypair=buildTestAccount()// Fetch pool dataconstpool=awaitsdk.Pool.getPool(poolAddress)// Fetch position dataconstposition=awaitsdk.Position.getPositionInfo(position_object_id)// build tick dataconstlowerSqrtPrice=TickMath.tickIndexToSqrtPriceX64(position.tick_lower_index)constupperSqrtPrice=TickMath.tickIndexToSqrtPriceX64(position.tick_upper_index)constticksHandle=pool.ticks_handleconsttickLower=awaitsdk.Pool.getTickDataByIndex(ticksHandle,position.tick_lower_index)consttickUpper=awaitsdk.Pool.getTickDataByIndex(ticksHandle,position.tick_upper_index)// input liquidity amount for removeconstliquidity=newBN(position.liquidity)// slippage valueconstslippageTolerance=newPercentage(newBN(5),newBN(100))constcurSqrtPrice=newBN(pool.current_sqrt_price)// Get token amount from liquidity.constcoinAmounts=ClmmPoolUtil.getCoinAmountFromLiquidity(liquidity, curSqrtPrice, lowerSqrtPrice, upperSqrtPrice,false)// adjust token a and token b amount for slippageconst { tokenMaxA,tokenMaxB } =adjustForCoinSlippage(coinAmounts, slippageTolerance,false)// get all rewarders of positionconstrewards:any[] =awaitsdk.Rewarder.posRewardersAmount(poolObjectId,pool.positions_handle, position_object_id)constrewardCoinTypes=rewards.filter((item) =>Number(item.amount_owed) >0).map((item)=>item.coin_address)// build close position payloadconstclosePositionTransactionPayload=sdk.Position.closePositionTransactionPayload({ coinTypeA:pool.coinTypeA, coinTypeB:pool.coinTypeB, min_amount_a:tokenMaxA.toString(), min_amount_b:tokenMaxB.toString(), rewarder_coin_types: [...rewardCoinTypes], pool_id:pool.poolAddress, pos_id: position_object_id, })consttransferTxn=awaitsdk.fullClient.sendTransaction(sendKeypair,closePositionTransactionPayload)console.log('close position: ', transferTxn)