These docs are for v2.0.1. Click to read the latest docs for v3.0.2.

Get Token Amounts from Position ID

You can use the getCoinAmountsFromPositionID() function to calculate the token amounts for a given position at the current point in time

Example

import { QueryChain } from "@firefly-exchange/library-sui/dist/src/spot";
import { SuiClient } from "@firefly-exchange/library-sui";
import { TickMath, ClmmPoolUtil } from "@firefly-exchange/library-sui/dist/src/spot/clmm";
import { BN } from "bn.js";

const client = new SuiClient({ url: "https://fullnode.mainnet.sui.io:443" });

async function getCoinAmountsFromPositionID(posID: string){
    let qc = new QueryChain(client);
    let pos = await qc.getPositionDetails(posID)
    let pool = await qc.getPool(pos.pool_id);

    let lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(pos.lower_tick)
    let upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(pos.upper_tick)

    const coinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(new BN(pos.liquidity),new BN (pool.current_sqrt_price), lowerSqrtPrice, upperSqrtPrice, false)

    return {
        coinAAmount: coinAmounts.coinA.toString(),
        coinBAmount: coinAmounts.coinB.toString()
      };
}

getCoinAmountsFromPositionID(args[0])
    .then((resp) => console.log(JSON.stringify(resp)))
    .catch((err) => console.error("Error:", err));

Response