如何使用Javascript检查solana流动性池的LP代币是否被锁定并销毁?

问题描述 投票:0回答:1

我有 solana 上两个代币的铸币地址及其配对地址。使用javascript,我想知道矿池的流动性是否被锁定并燃烧。谢谢

这是我尝试过的:

  const info = await connection.getAccountInfo(
    new PublicKey(pooladdress)
  );
  if (!info) return;

  const poolState = LIQUIDITY_STATE_LAYOUT_V4.decode(info.data);
  console.log("poolState=============", poolState);
};

const SOL_USDC_POOL_ID = "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2";

getPoolInfo(SOL_USDC_POOL_ID);

我希望能得到正确方向的指点。

web3js solana-web3js
1个回答
0
投票

类似这样的:

获取 LP 铸币和矿池储备:

const acc = await connection.getMultipleAccountsInfo([new 
PublicKey("pool address")])
const parsed = acc.map((v) => {
    return LIQUIDITY_STATE_LAYOUT_V4.decode(v.data)
})

const lpMint = parsed[0].lpMint
const lpReserve = parsed[0].lpReserve

获取铸币厂信息:

const accInfo = await connection.getParsedAccountInfo(new solana.PublicKey(lpMint));
const mintInfo = accInfo?.value?.data?.parsed?.info

计算:

const lpReserve = lpReserve / Math.pow(10, mintInfo?.decimals)
const actualSupply = mintInfo?.supply / Math.pow(10, mintInfo?.decimals)
console.log(`lpMint: ${lpMint}, Reserve: ${lpReserve}, Actual Supply: ${actualSupply}`);

//Calculate burn percentage
const maxLpSupply = Math.max(actualSupply, (lpReserve - 1));
const burnAmt = (lpReserve - actualSupply)
console.log(`burn amt: ${burnAmt}`)
const burnPct = (burnAmt / lpReserve) * 100;
console.log(`${burnPct} LP burned`);
© www.soinside.com 2019 - 2024. All rights reserved.