このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
アグリゲーターの役割は、多くのプール全体でユーザーに最適な価格を提供し、単一の入力を複数のプールルートに分割して、アトミックに実行することです。このページでは、その仕事の Raydium 固有の部分、つまり検出、クォート取得、トランザクション組み立てについて説明します。
検出
プール在庫
各プロダクトの全ライブ Raydium プールのリストが必要です。3 つのオプションがあります:- REST API(最もシンプル):
GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1は 1000 個単位でプールを返します。すべてを取得するまでページネーションしてください。1~5 分間キャッシュしてください。 - オンチェーンスキャン:CPMM、CLMM、AMM v4 プログラム ID に対して
getProgramAccountsを実行し、ステートアカウントディスクリミネーターでフィルタリングします。約 10 秒の RPC 時間でほぼすべてのライブプールを取得できます。API がダウンしているか、レート制限されている場合に便利です。 - ハイブリッド:API をプライマリソースとして使用し、日次のオンチェーンスキャンをサニティチェックとして実行します。チームは API の包括性を保証していますが、直接 CPI を通じて作成されたプール(フロントエンドなし)は時々遅れることがあります。
ミントペアルックアップ
特定の(mintA, mintB) ペアについては、GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity を使用してください。任意のフィー層とプロダクトタイプのすべてのプールを返します。よく使われるミントでは 1 ペアあたり最大 10 件程度の結果が一般的です。TVL でソートして、ルーティング用に上位数件を選択してください。
クォート取得
クォート計算はプロダクトごとに異なります。SDK の純粋な数学関数を使用して、再実装を避けてください: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 とインストラクションを手動で構成してください。パターン:アトミック性
アグリゲーターはアトミック性を保証する必要があります:完全なルートが着地するか、何も着地しないかのいずれかです。Raydium のスワップインストラクションはExceededSlippage で戻ります。そのため、1 つのホップが失敗するマルチプールルートはトランザクション全体を戻します。無料です。
唯一の例外:ルートが Raydium + サードパーティ DEX を通過する場合、その DEX もスリッページ戻りモデルを持つことを確認してください。一部のプログラムはスリッページ境界を無視します(稀)。
落とし穴
1. 古いクォート
ユーザーが「125.43 RAY を受け取ります」を見てからトランザクションが着地するまで、リザーブは変動する可能性があります。提出直前にプール状態を再取得してください。再クォート;新しいクォートが >1% 悪い場合、一時停止してユーザーに再確認してください。2. プールブラックリスト
一部の Raydium プールは、転送フィーが 99% に設定されているか、転送不可能な拡張機能を持つスキャムトークンです。REST API はこれらにタグを付けます(tags フィールドを参照)。scam または honeypot とタグ付けされたプールをスキップしてください。Raydium のタグの上に独自のセーフティチェックを実行することは慎重です。
3. CLMM の観測状態要件
CLMMSwapV2 は 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 有効期限(再試行)を戻り(再試行しない)から区別します。
ポインター
integration-guides/routing-and-mev— サンドイッチ耐性、バンドル。integration-guides/priority-fee-tuning— コンピュートバジェットインストラクションのサイズ設定。sdk-api/rest-api— プールリストエンドポイント。

