Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
アグリゲーターの役割は、多くのプール全体でユーザーに最適な価格を提供し、単一の入力を複数のプールルートに分割して、アトミックに実行することです。このページでは、その仕事の Raydium 固有の部分、つまり検出、クォート取得、トランザクション組み立てについて説明します。

検出

プール在庫

各プロダクトの全ライブ Raydium プールのリストが必要です。3 つのオプションがあります:
  1. REST API(最もシンプル):GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1 は 1000 個単位でプールを返します。すべてを取得するまでページネーションしてください。1~5 分間キャッシュしてください。
  2. オンチェーンスキャン:CPMM、CLMM、AMM v4 プログラム ID に対して getProgramAccounts を実行し、ステートアカウントディスクリミネーターでフィルタリングします。約 10 秒の RPC 時間でほぼすべてのライブプールを取得できます。API がダウンしているか、レート制限されている場合に便利です。
  3. ハイブリッド:API をプライマリソースとして使用し、日次のオンチェーンスキャンをサニティチェックとして実行します。チームは API の包括性を保証していますが、直接 CPI を通じて作成されたプール(フロントエンドなし)は時々遅れることがあります。

ミントペアルックアップ

特定の (mintA, mintB) ペアについては、GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity を使用してください。任意のフィー層とプロダクトタイプのすべてのプールを返します。よく使われるミントでは 1 ペアあたり最大 10 件程度の結果が一般的です。TVL でソートして、ルーティング用に上位数件を選択してください。

クォート取得

クォート計算はプロダクトごとに異なります。SDK の純粋な数学関数を使用して、再実装を避けてください:
3 つのプロダクトは 1 つのシグネチャを共有しません。computeAmountOut は raydium.liquidity(AMM v4)にのみ存在し、CLMM では PoolUtils.computeAmountOut(Format) として存在します。CPMM の同等物は computeSwapAmount と呼ばれ、異なるパラメーターを取ります。プロダクトをパラメータ化するのではなく、3 つの呼び出しを明示的に記述してください。
アグリゲーター比較には各プールから amountOut(スリッページ前)を使用してください。

キャッシュの鮮度

プール状態は急速に古くなります。推奨される鮮度ターゲット: インタラクティブレイテンシーでクォートを取得するアグリゲーターの場合、各関連プール状態に対して WebSocket アカウント更新(accountSubscribe)をサブスクライブしてください。これにより、モデルがポーリングからプッシュに切り替わります。

Token-2022 調整

ルート内のいずれかのミントに Token-2022 転送フィーがある場合、クォート計算は algorithms/token-2022-transfer-fees に従って入力と出力を調整する必要があります。SDK は poolInfo.mintA.extensions.transferFeeConfig が入力されている場合、これを処理します。クォートを信頼する前に .extensions フィールドを確認してください。

ルーティング

シングルプールルート

ほとんどのルートはシングルプールです。amountOut が最も高いプールを選択してください。複数が接近している場合は、フィー層(低いほど良い)で同点を破り、次に TVL(多いほど安全)で破ってください。

スプリットルーティング

単一プールが >5% の価格インパクトを持つ大きなトレードの場合、複数のプール全体に分割してください。シンプルな貪欲アルゴリズム:
これにより、集計インパクトを最小化するルーティングベクトル [(pool_A, 0.6), (pool_B, 0.3), (pool_C, 0.1)] が生成されます。適切な凸最適化ソリューション(例:プール全体で限界価格を等しくする)は実際には貪欲な結果の約 1% 以内です。

マルチホップルート

直接 USDC-SOL プールが良いクォートを提供しない場合(稀)、USDC → RAY → SOL は 2 つの別々のプール経由で一般的です。ホップごとのスリッページ境界を適用してください。各ホップは独自の minAmountOut を強制します。algorithms/slippage-and-price-impact を参照してください。 同じプール全体のマルチホップ(例:SOL-USDC 上の 2 つの CLMM ホップ)は常にシングルホップと比較して最適ではありません。そのようなルートを生成しないでください。

トランザクション組み立て

シングルホップ、シングルプール

単一プールの場合、そのプールタイプ独自のスワップビルダーを呼び出してください — raydium.liquidity.swap、raydium.cpmm.swap または raydium.clmm.swap。raydium.tradeV2.swap はマルチホップルートエグゼキューターであり、完全に異なる形状({ swapInfo, swapPoolKeys, routeProgram, ownerInfo, txVersion })を取ります。raydium.trade はありません。

スプリットとマルチホップ

ATA とインストラクションを手動で構成してください。パターン:
すべてアトミック性のために 1 つのトランザクション内。V0 上の 3 プールスプリットでアドレスルックアップテーブルを使用する場合、これは通常 ~1100 バイトに収まります。4 つ以上のプールの場合、トランザクションサイズキャップにより、マルチ tx またはハブミントでの統合が強制されます。

アトミック性

アグリゲーターはアトミック性を保証する必要があります:完全なルートが着地するか、何も着地しないかのいずれかです。Raydium のスワップインストラクションは ExceededSlippage で戻ります。そのため、1 つのホップが失敗するマルチプールルートはトランザクション全体を戻します。無料です。 唯一の例外:ルートが Raydium + サードパーティ DEX を通過する場合、その DEX もスリッページ戻りモデルを持つことを確認してください。一部のプログラムはスリッページ境界を無視します(稀)。

落とし穴

1. 古いクォート

ユーザーが「125.43 RAY を受け取ります」を見てからトランザクションが着地するまで、リザーブは変動する可能性があります。提出直前にプール状態を再取得してください。再クォート;新しいクォートが >1% 悪い場合、一時停止してユーザーに再確認してください。

2. プールブラックリスト

一部の Raydium プールは、転送フィーが 99% に設定されているか、転送不可能な拡張機能を持つスキャムトークンです。REST API はこれらにタグを付けます(tags フィールドを参照)。scam または honeypot とタグ付けされたプールをスキップしてください。Raydium のタグの上に独自のセーフティチェックを実行することは慎重です。

3. CLMM の観測状態要件

CLMM SwapV2 は observation_state アカウントを取ります。SDK はこれをあなたのために入力します。手動で構築されたインストラクションはしばしば忘れます。これにより、プログラムは AccountNotFound で戻ります。常にこれを含めてください。

4. アドレスルックアップテーブル

Raydium は、最も使用されるアカウント(メインミント、プログラム ID、AmmConfigs)のパブリックルックアップテーブルを保持しています。アグリゲーターはこれらを使用する必要があります — トランザクションあたり ~100 バイトを節約し、より大きなルートが V0 に収まるようにします。LUT アドレスを取得:

5. 混雑への対応

高ボリュームウィンドウ中、トランザクションはメモリプール内で複数ブロック留まる可能性があります。TX 有効期限での積極的な再試行(戻りではなく — 戻りは決定論的)が推奨されます。SDK の sendAndConfirm オプションは基本的な再試行を行います。本番アグリゲーターはその上に独自のロジック(Jito バンドル、マルチ RPC ブロードキャスト)を層状化します。

チェックリスト

本番環境に移行する前に、以下を確認してください:
  • プール検出は CPMM + CLMM + AMM v4 を包括的にカバーしています。
  • クォートは、いくつかのテストトレードで Raydium 独自の UI クォート内 1 ベーシスポイント以内に一致します。
  • スプリットルーティングは、単一プール上の >5% インパクトのトレードに対してキックインします。
  • プライオリティフィーは最近のプールプログラムフィーに対してサイズ設定されています(integration-guides/priority-fee-tuning を参照)。
  • Token-2022 転送フィーが計算され、ユーザーに表示されます。
  • スリッページが超過したときにトランザクションがクリーンに戻ります。
  • 再試行ロジックは tx 有効期限(再試行)を戻り(再試行しない)から区別します。

ポインター

ソース: