Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
Raydiumを統合するウォレットは、通常、ユーザーごとに4つの質問に答える必要があります。このユーザーはどのプールにLPを持っているか?どのポジション(CLMM NFT)を保有しているか?どのファームにステークしているか?それらの総価値はいくらか?このページでは、それぞれについて説明します。

Raydiumポジションの検出

クラシック LP トークン(CPMM、AMM v4)

これらは他のSPLトークンと同じように見えます。ユーザーのATAが残高を保有しています。ウォレットはデフォルトではこれを単なる別のトークンとして表示します。これをRaydium LPポジションとして表示するには:
  1. ユーザーのトークン アカウントを列挙します:connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID })。
  2. 各ミントについて、Raydiumのミント リストを確認します:GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,...(1回の呼び出しで最大約50個のLPミントをバッチ処理)。
  3. マッチするミントについて、APIはプール参照を返します。これを使用してポジションのトークン建て価値を計算します:
LP残高とアンラップされた金額の両方を表示します。ユーザーはLPユニットではなく、基礎となるトークンで考えます。

CLMM ポジション NFT

CLMMポジションはNFTです。各ポジションのPersonalPositionState PDAはNFTミントから導出されます。検出するには:
  1. ユーザーのNFTを列挙します。レガシーMetaplex NFTの場合:トークン アカウントをサプライが1で小数点以下が0のものにフィルタリングします。
  2. 各NFTミントについて、PersonalPositionState PDAを導出してみます:
  1. raydium.clmm.getOwnerPositionInfo({ programId })でウォレットのポジションを列挙し、nftMintでマッチングします(getPositionInfoはありません)。各エントリは以下を提供します:
    • poolId → プールをフェッチしてミントを解決
    • tickLower、tickUpper → 範囲を表示
    • liquidity、tokensOwedA/B → ポジション価値と保留中の手数料を計算
    • rewardInfos → ストリームごとの保留中報酬
  2. Token-2022(OpenPositionWithToken22Nft)の下で発行されたポジション NFTの場合、NFTミントのプログラムはSPLトークンではなくToken-2022です。スキャン時に両方を列挙します。

ファーム ステーク

Farm v3 / v5 / v6には、それぞれユーザーごとのレジャー PDAがあります。導出方法:
完全なオンチェーン検出を好むウォレットの場合:キュレーションされた「可能性の高い」ファームIDのリストでユーザーをハッシュして、可能なUserLedger PDAを反復処理します。すべてのファームIDを網羅的に列挙することは実用的ではありません(数千存在)。APIを使用してください。

ポジション価値の計算

CPMM / AMM v4 LP

3つのモジュールは署名を共有しません:liquidity.getPoolInfoFromRpcは{ poolId }を取り、cpmm.getPoolInfoFromRpcとclmm.getPoolInfoFromRpcは位置指定base58文字列を取ります。
次に、各ミントのUSD価格を掛けます(raydium.tokenまたは価格オラクルから)。

CLMMポジション

以下のようにレンダリングします:
  • リクイディティ価値(現在の価格)
  • 未収集の手数料
  • ストリームごとの保留中報酬
  • 範囲:[tickLower_price, tickUpper_price]。現在の価格が範囲内かどうかを示すビジュアル バーを表示

ファーム ステーク

オンチェーン計算の場合、ファームの会計をミラーリングします:
計算する前に、遅延更新式でreward_per_share_x64を更新してください(経過時間×排出率÷総ステーク)。

トランザクション シミュレーションでのプレビュー

ユーザーが署名する前に、ウォレットは通常、残高の変化をプレビューします。simulateTransactionを使用します:
accountsパラメータは、バリデータに対して、リストされたアドレスのシミュレーション後のアカウント状態を返すよう要求します。命令の形状だけから残高の変化を予測しようとするよりもはるかに正確です。

シミュレーションの落とし穴

  • CLMMスワップは有効なティック配列が必要です。 ユーザーの入力サイズが初期化されていないティック配列に交差する場合、シミュレーションは戻ります(実行と同じ)。UIでこれを明確に表示します。
  • 優先度手数料。 シミュレーションは、計算予算命令が適用されない状態で実行されます。デフォルトの200k CUを超える大規模なトランザクションの場合、シミュレーションは失敗しますが、明示的なCU制限での実際の実行は成功します。シミュレートされたトランザクションにもCU制限を常に設定してください。
  • 新しいブロックハッシュ。 シミュレーションは現在のブロックハッシュを使用します。署名に60秒以上かかる場合、トランザクションは無効になります。ユーザーが躊躇した場合は再シミュレートしてください。

Token-2022表示

Token-2022プログラムの下のトークンは、異なるリスク サーフェスを持つため、ウォレットのトークン リストで「Token-2022」とラベル付けする必要があります:
  • 転送手数料ミント:現在のtransferFeeBasisPointsを「転送手数料:X%」として残高の横に表示します。受け取り時に警告します。ユーザーは送信者が送信した金額より少ない金額を受け取ることに気付かないかもしれません。
  • 転送フック ミント:フック プログラムIDを表示します。悪意のあるフックは送信トランザクションをブロックできます。ユーザーはフックが期待するものであることを確認する必要があります。
  • 転送不可ミント:「転送不可」を表示し、スワップ/送信を無効にします。これらは通常、ソウルバウンド トークンまたは認証情報です。
  • 利息付きミント:TokenAccount.amountから導出されたUI残高は、発生した利息を反映しません。表示値には@solana/spl-tokenのamountToUiAmountを使用します(スケーリング係数を適用)。

ファーム APR表示

ユーザーに表示されるAPRは、すべてのライブ報酬ストリームを組み合わせ、USDに変換し、年率化する必要があります:
APR: X.Y%として表示します。ステーキング ミントがLPトークンの場合、基礎となるLPの基本手数料APRも計算し、合計を「Total APR」または「APR + fees」とラベル付けします。

ポインタ

ソース:
  • Raydium SDK v2 — ポジション/ファーム ヘルパー。
  • api-v3.raydium.ioのユーザー ポジション エンドポイント。