Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
バージョン情報。 すべての TypeScript デモは @raydium-io/raydium-sdk-v2@0.2.64-alpha を対象としており、0.2.42-alpha(2026-04)に対して最後に実行され、2026-09-09 に Solana mainnet-beta に対して 0.2.64-alpha ソースに対して呼び出しシグネチャが再確認されています。Rust CPI スケルトンは chore/upgrade-anchor ブランチの raydium-cp-swap を対象としており、Anchor 1.0.2 — master はまだ 0.32.1 をピンしています。プログラム ID は reference/program-addresses の定数から取得されます。

前提条件

このページのすべてのデモは raydium-sdk-V2-demo/src/cpmm のファイルを反映しており、GitHub リンクは各セクションの横に配置されています。ブートストラップはデモリポジトリの config.ts.template(ソース)に従います:
Raydium インスタンスは SDK のファサードです — 以下のすべてのデモがこれを使用します。Raydium.load は非同期です。デフォルトではトークンリストを読み込むためです。そのフェッチをスキップするには disableLoadToken: true を渡してください。利用可能性機能チェックは disableFeatureCheck: false を渡さない限りすでにスキップされています。手数料設定は raydium.api.getCpmmConfigs() を通じて最初の使用時に遅延フェッチされます。

CPMM プールを作成する

ソース:src/cpmm/createCpmmPool.ts
SDK が静かに処理するいくつかのこと:
  • PDA を導出する前に、ミントを token0/token1 の順序にソートします。
  • 1 回限りの create_pool_fee を poolFeeAccount に支払います。
  • 呼び出し元の関連トークンアカウントが不足している場合は作成します。
  • 側ごとに正しいトークンプログラム(SPL Token vs Token-2022)を選択します。
確認後、以下を使用してライブプール状態を取得できます:

スワップ(ベース入力)

ソース:src/cpmm/swap.ts
注意:SDK は getPoolInfoFromRpc 内で常にプール状態を RPC から再フェッチします。署名しようとしているトランザクションについて api-v3.raydium.io から見積もらないでください — 1 ブロック古い見積もりは着地時に ExceededSlippage にスリップする可能性があります。

スワップ(ベース出力)

ソース:src/cpmm/swapBaseOut.ts

流動性を供給する

ソース:src/cpmm/deposit.ts
SDK はプールの現在のリザーブから対になった金額を導出し、各側をスリッページで膨らませて命令の maximum_* 引数にし、必要に応じて ATA 作成を構築します。raydium.cpmm.computePairAmount({ ... }) は UI プレビュー用に同じ数値を返します。

流動性を引き出す

ソース:src/cpmm/withdraw.ts

プロトコル・ファンド・クリエイター手数料を回収する

ソース:src/cpmm/collectCreatorFee.ts、src/cpmm/collectAllCreatorFee.ts プロトコルおよびファンド回収は権限ゲートのままです。クリエイター手数料には 2 つのパスがあります:クリエイター署名の CollectCreatorFee と、加算的な CollectCreatorFeePermissionless で、任意のペイヤーが呼び出せますが、クリエイターの正規 ATA にのみ転送できます。0.2.64-alpha は両方のクリエイターパスのモジュールレベルビルダーを提供します:
両方のクリエイター命令は 2026-09-19 プログラムアップグレードでアカウントリストを変更しました。 それぞれは ["creator_fee_share", creator, ammConfig] の creator_fee_share PDA を取るようになり、パーミッションレスのものは amm_config も取ります — 両方とも system_program の後に追加 されるため、すでにそこにあったアカウントはその位置を保持します。アップグレード前の SDK リリースにピンされたビルダーは短いリストを出力し、トランザクションはアカウント不足で拒否されます。アップグレードされたプログラムに対してこれらのヘルパーを使用する前に、インストールするバージョンが新しいアカウントを含むことを確認し、IDL から生成する場合は IDL をリフレッシュしてください。PDA を渡すことは、それが作成されたことがない場合でも必須です — それを導出して渡してください。プログラムはアカウントが空の場合、AmmConfig.creator_fee_share_rate にフォールバックします。
2 つのクリエイター命令には 異なるディスクリミネータとアカウントレイアウト があります — パーミッションレスのものはクリエイター署名者を別の payer と署名しない creator に置き換えます。一致するビルダーを使用してください。もう一方のアカウントを手動で交換するのではなく。SDK にはプロトコルまたはファンド手数料ビルダーがありません(makeCollectProtocolFeeInstruction と makeCollectFundFeeInstruction はどの名前でも存在しません)— これらは管理パスであり、CreateCreatorFeeShare / CloseCreatorFeeShare も同様で、ビルダーもありません。存在する低レベル命令ビルダーは collectCpFeeInstruction、makeCollectCreatorFeeInstruction および collectCreatorFeePermissionlessInInstruction です。
オフチェーンでは、PoolState から直接発生した手数料を読むことができます:

Rust CPI スケルトン

独自の Anchor プログラムから CPMM を呼び出したい場合 — たとえば、預金者に代わってスワップするボルト — CPI コンテキストは次のようになります。アカウント順序は products/cpmm/instructions に従います。
CPI が PDA として署名する場合(たとえば、預金者に代わってボルトを管理する場合)、CpiContext::new を CpiContext::new_with_signer に交換し、シードを渡してください。

よくある落とし穴

サポートチケットを開く前の短いチェックリスト:
  • ソート済みミント。 導出した poolState PDA がオンチェーンプールと一致しない場合、おそらくミントのソートを忘れています。
  • 古い API 見積もり。 api-v3.raydium.io からのリザーブ値を CurveCalculator.swap に渡さないでください。RPC から取得してください。
  • 間違ったトークンプログラム。 Token-2022 ミントのボルトは SPL Token ではなく Token-2022 プログラムによって所有されています。常にプールの token_0_program / token_1_program フィールドを使用してください。
  • 転送手数料ミントに対して過小評価されたスリッページ。 プールのどちらかの側が Token-2022 転送手数料ミントの場合、minimum_amount_out はボルトが送信するものではなく、ユーザーが実際に受け取るもので表示される必要があります。
  • スワップで NotApproved。 PoolState.status を確認してください — 管理者がそのプールでスワップを一時停止している可能性があります。ステータスビットマスクについては products/cpmm/instructions を参照してください。

次に進むべき場所

ソース: