You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript检查Solana流动性池LP代币是否已锁定销毁?

判断Solana流动性池LP代币是否锁定销毁的实现方案

核心逻辑

LP代币锁定销毁的核心判断依据是:

  • 要么LP代币的总供应量为0(完全销毁)
  • 要么所有LP代币都存放在不可赎回的黑洞地址(如Solana标准黑洞地址11111111111111111111111111111111)

基于现有代码的扩展实现

1. 补充依赖与基础配置

确保已安装必要依赖:

npm install @solana/web3.js @orca-so/sdk

2. 完整代码实现

import { Connection, PublicKey, MintLayout } from "@solana/web3.js";
import { LIQUIDITY_STATE_LAYOUT_V4 } from "@orca-so/sdk/dist/whirlpool";

// Solana主网连接(测试网可替换为https://api.devnet.solana.com)
const connection = new Connection("https://api.mainnet-beta.solana.com", "confirmed");

// 标准黑洞地址(不可赎回)
const BLACKHOLE_ADDRESS = new PublicKey("11111111111111111111111111111111");

async function checkLpLockedAndBurned(poolAddress) {
  // 1. 获取流动性池账户信息
  const poolInfo = await connection.getAccountInfo(new PublicKey(poolAddress));
  if (!poolInfo) {
    console.error("流动性池地址无效");
    return false;
  }

  // 2. 解析池状态,提取LP代币的mint地址
  const poolState = LIQUIDITY_STATE_LAYOUT_V4.decode(poolInfo.data);
  const lpMintAddress = poolState.lpMint;
  console.log("LP代币Mint地址:", lpMintAddress.toBase58());

  // 3. 获取LP代币的Mint账户信息
  const lpMintInfo = await connection.getAccountInfo(lpMintAddress);
  if (!lpMintInfo) {
    console.error("LP代币Mint地址无效");
    return false;
  }

  // 4. 解析Mint状态,获取总供应量
  const mintState = MintLayout.decode(lpMintInfo.data);
  const totalSupply = mintState.supply;
  console.log("LP代币总供应量:", totalSupply.toString());

  // 5. 判断是否完全销毁(总供应量为0)
  if (totalSupply.toNumber() === 0) {
    console.log("LP代币已完全销毁");
    return true;
  }

  // 6. 查询LP代币的所有持有者,判断是否全在黑洞地址
  const holders = await connection.getTokenLargestAccounts(lpMintAddress);
  let allInBlackhole = true;

  for (const account of holders.value) {
    const amount = account.uiAmount;
    const ownerData = await connection.getParsedAccountInfo(account.address);
    
    // 跳过零余额账户
    if (amount === 0) continue;
    
    // 检查持有者是否为黑洞地址
    const ownerAddress = ownerData.value?.data?.parsed?.info?.owner;
    if (ownerAddress !== BLACKHOLE_ADDRESS.toBase58()) {
      allInBlackhole = false;
      console.log("发现LP代币持有者:", ownerAddress, "余额:", amount);
      break;
    }
  }

  if (allInBlackhole) {
    console.log("所有LP代币已锁定在黑洞地址(不可赎回,等同于销毁)");
    return true;
  } else {
    console.log("LP代币未完全锁定销毁");
    return false;
  }
}

// 测试用的SOL-USDC池地址
const SOL_USDC_POOL_ID = "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2";
checkLpLockedAndBurned(SOL_USDC_POOL_ID);

关键说明

  • 解析池状态:通过LIQUIDITY_STATE_LAYOUT_V4解码后,lpMint字段就是该池LP代币的铸造地址
  • 总供应量判断:如果LP代币的总供应量为0,说明已被完全销毁
  • 黑洞地址判断:如果所有非零余额的LP代币都存放在黑洞地址,说明无法被提取,等同于锁定销毁
  • 自定义锁仓地址:若项目使用专属锁仓地址,替换BLACKHOLE_ADDRESS为项目指定地址即可

内容的提问来源于stack exchange,提问作者Adejunior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:03:40