Position Management
Get user positions
const positions: ClmmPosition[] = positionManager.getUserPositions('0xaddress');Get position reward
const positions: ClmmPosition[] = positionManager.getUserPositions('0xaddress');
const positionWithReward: ClmmPosition[] = positionManager.getPositionReward(positions);Open/Increase a Position
import { ClmmPosition, CoinAmount, Percent, BN } from '@flowx-finance/sdk';
import { TransactionResult } from '@mysten/sui/transactions';
// Method 1: Create position with specific liquidity amount
const tickLower = -3000; // Lower price tick (must be divisible by tick spacing: 60 for MEDIUM fee)
const tickUpper = 3000; // Upper price tick (must be divisible by tick spacing: 60 for MEDIUM fee)
const liquidity = new BN(1000);
const position = new ClmmPosition({
objectId: '0x...', // Optional: Your position object id if you want increase exist position
owner: '0x...', // Your address
pool: pool,
tickLower,
tickUpper,
liquidity,
coinsOwedX: 0,
coinsOwedY: 0,
feeGrowthInsideXLast: 0,
feeGrowthInsideYLast: 0,
rewardInfos: [],
});
// Method 2: Create position with specific token amounts
const amountX = new BN('1000000000'); // 1 SUI (9 decimals)
const amountY = new BN('1000000'); // 1 USDC (6 decimals)
const positionFromAmounts = ClmmPosition.fromAmounts({
objectId: '0x...', // Optional: Your position object id if you want increase exist position
owner: '0x...', // Your address
pool: pool,
tickLower: -3000,
tickUpper: 3000,
amountX: amountX,
amountY: amountY,
useFullPrecision: true, // Use full precision for liquidity calculation
});
// Method 3: Create position with only amountX (single-sided liquidity)
const positionOnlyX = ClmmPosition.fromAmountX({
objectId: '0x...', // Optional: Your position object id if you want increase exist position
owner: '0x...', // Your address
pool: pool,
tickLower: -3000,
tickUpper: 3000,
amountX: amountX, // Only provide amountX
// amountY not provided - will be calculated based on current price
useFullPrecision: true,
});
// Method 4: Create position with only amountY (single-sided liquidity)
const positionOnlyY = ClmmPosition.fromAmountY({
objectId: '0x...', // Optional: Your position object id if you want increase exist position
owner: '0x...', // Your address
pool: pool,
tickLower: -3000,
tickUpper: 3000,
amountY: amountY, // Only provide amountY
// amountX not provided - will be calculated based on current price
useFullPrecision: true,
});
// Create position with liquidity
const options = {
slippageTolerance: new Percent(1, 100), // 1% slippage
deadline: Date.now() + 3600 * 1000, // 1 hour from now
createPosition: true,
};
const tx = new Transaction();
const createdPosition = positionManager.tx(tx).increaseLiquidity(position, options);
tx.transferObjects([createdPosition], recipient);Decrease Liquidity
Collecting Fees and Rewards
Rebalance example
Last updated
Was this helpful?

