Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
钱包集成 Raydium 通常需要为每个用户回答四个问题:该用户在哪些流动性池中有 LP?他们持有哪些头寸(CLMM NFT)?他们在哪些农场中质押?这些资产的总价值是多少?本页文档记录了每一项。

检测 Raydium 头寸

经典 LP 代币(CPMM、AMM v4)

这些看起来像任何其他 SPL 代币:用户的 ATA 持有余额。钱包默认将其显示为另一个代币。要将其识别为 Raydium LP 头寸:
  1. 枚举用户的代币账户:connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID })
  2. 对于每个 mint,检查 Raydium 的 mint 列表:GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,...(每次调用最多批处理约 50 个 LP mint)。
  3. 对于匹配的 mint,API 返回池引用。使用它来计算头寸的代币计价值:
同时显示 LP 余额和解包后的金额 — 用户以基础代币而非 LP 单位来思考。

CLMM 头寸 NFT

CLMM 头寸是 NFT。每个头寸的 PersonalPositionState PDA 从 NFT mint 派生。要检测:
  1. 枚举用户的 NFT。对于旧版 Metaplex NFT:将代币账户过滤为供应量为 1 且小数位为 0 的账户。
  2. 对于每个 NFT mint,尝试派生 PersonalPositionState PDA:
  1. 使用 raydium.clmm.getOwnerPositionInfo({ programId }) 枚举钱包的头寸,并在 nftMint 上匹配(没有 getPositionInfo)。每个条目给你:
    • poolId → 获取池以解析 mint
    • tickLowertickUpper → 显示范围
    • liquiditytokensOwedA/B → 计算头寸价值 + 待领费用
    • rewardInfos → 每个流的待领奖励
  2. 对于在 Token-2022 下发行的头寸 NFT(OpenPositionWithToken22Nft),NFT mint 的程序是 Token-2022 而非 SPL Token。扫描时枚举两者。

农场质押

农场 v3 / v5 / v6 各有一个每用户账本 PDA。派生方式:
对于偏好完全链上检测的钱包:通过使用精选的”可能”农场 ID 列表对用户进行哈希来迭代可能的 UserLedger PDA。穷举枚举所有农场 ID 不切实际(存在数千个);使用 API。

计算头寸价值

CPMM / AMM v4 LP

这三个模块共享签名:liquidity.getPoolInfoFromRpc 接受 { poolId },而 cpmm.getPoolInfoFromRpcclmm.getPoolInfoFromRpc 接受位置 base58 字符串。
然后将每个乘以 mint 的美元价格(来自 raydium.token 或价格预言机)。

CLMM 头寸

渲染为:
  • 流动性价值(当前价格)
  • 未收取的费用
  • 每个流的待领奖励
  • 范围:[tickLower_price, tickUpper_price],带有一个可视条显示当前价格是否在范围内

农场质押

对于链上计算,镜像农场的会计:
确保在计算前使用懒更新公式刷新 reward_per_share_x64(经过时间 × 发放率 ÷ 总质押)。

交易模拟用于预览

在用户签名前,钱包通常预览余额变化。使用 simulateTransaction
accounts 参数要求验证器为列出的地址返回模拟后的账户状态。比尝试仅从指令形状预测余额变化准确得多。

模拟陷阱

  • CLMM 交换需要有效的 tick 数组。 如果用户的输入大小会跨越未初始化的 tick 数组,模拟会还原(与执行相同)。在 UI 中清楚地显示这一点。
  • 优先费。 模拟运行时不应用计算预算指令。对于会超过默认 200k CU 的大型交易,模拟失败但使用显式 CU 限制的实际执行成功。也在模拟的交易上设置 CU 限制。
  • 新鲜区块哈希。 模拟使用当前区块哈希;如果签名耗时 >60 秒,交易变为无效。如果用户犹豫,重新模拟。

Token-2022 显示

Token-2022 程序下的代币应在钱包的代币列表中标记为此类,因为它们有不同的风险表面:
  • 转账费 mint:在余额旁显示当前 transferFeeBasisPoints 为”转账费:X%“。接收时警告 — 用户可能没有意识到他们会收到少于发送者发送的金额。
  • 转账钩子 mint:显示钩子程序 ID。恶意钩子可以阻止出站转账;用户应验证钩子是他们期望的。
  • 不可转账 mint:显示”不可转账”并禁用交换/发送。这些通常是灵魂绑定代币或凭证。
  • 生息 mint:从 TokenAccount.amount 派生的 UI 余额反映应计利息。使用 @solana/spl-token 中的 amountToUiAmount(应用缩放因子)来获得显示值。

农场 APR 显示

向用户显示的 APR 应结合所有实时奖励流,转换为美元,并年化:
显示为 APR: X.Y%。如果质押 mint 是 LP 代币,还计算基础 LP 的基础费用 APR 并将总和标记为”总 APR”或”APR + 费用”。

指针

来源:
  • Raydium SDK v2 — 头寸/农场助手。
  • api-v3.raydium.io 上的用户头寸端点。