このページは 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 スケルトンは raydium-clmm の chore/upgrade-anchor ブランチ、Anchor 1.0.2 を対象としており、CPMM ページと同じピンなので、両者は 1 つのクレート内に共存できます。master はまだ 0.32.1 をピンしています。プログラム ID は reference/program-addresses から SDK 経由で取得します。セットアップ
raydium-sdk-V2-demo/src/clmm のファイルをミラーしており、GitHub リンクは各セクションの横に配置されています。ブートストラップはデモリポジトリの config.ts.template(ソース)に従います。disableFeatureCheck: true は非自明な統合の推奨設定です:
CLMM プールの作成
ソース:src/clmm/createPool.ts
- 導出前に
mint1/mint2をバイト順でソートします。 sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64)を計算します。observationとtick_array_bitmap_extensionアカウントを作成します。ammConfigで定義されたプール作成手数料を支払います。
選択した範囲でポジションを開設
ソース:src/clmm/createPosition.ts
OpenPosition* は不足しているティック配列を自身で割り当てます。支払者の費用で。
既存ポジションのリクイディティを増加
ソース:src/clmm/increaseLiquidity.ts
リクイディティを減少(同時に手数料を回収)
ソース:src/clmm/decreaseLiquidity.ts と src/clmm/closePosition.ts
liquidity = new BN(0) で decreaseLiquidity を呼び出します。命令の副作用は token_fees_owed_{0,1} と reward_amount_owed を決済し、それらを転送することです。これが唯一の回収方法です。
ゼロ化されたリクイディティと手数料の後、ポジションを完全に閉じるには、最終的な decreaseLiquidity 呼び出しで ownerInfo: { closePosition: true } を渡します。SDK は ClosePosition を追加し、NFT をバーンします。
直接 Anchor クライアントの場合、宣言されたアカウントを変更せず、プールを追加します:
poolId を渡すことができます。CLMM は positionNftAccount が凍結されている場合にのみそれを読み取ります。これにより、1 つのクライアントパスが古いポジションと新しいポジションの両方と互換性を保ちます。
リワードを回収
ソース:src/clmm/harvestAllRewards.ts
harvestAllRewards は渡されたすべてのプール上のすべてのポジションを走査し、手数料とリワードを決済するゼロリクイディティ DecreaseLiquidity 呼び出し(および任意の UpdateRewardInfos)をバッチ処理し、必要に応じてトランザクション全体に分割します。
スワップ
ソース:src/clmm/swap.ts
amountCalculated)とスワップが接するアカウントの正確なリスト(accounts)を返します。
シミュレーションが返す remainingAccounts を常に渡してください。不足していると、スワップは NotEnoughTickArrayAccount でウォーク途中に戻ります。古いものは単にコンピュートを浪費します。
PoolUtils.computeAmountOutFormat はまだ存在しますが、ComputeClmmPoolInfo(getPoolInfoFromRpc からの computePoolInfo。API プールオブジェクトではない)と 2 つの追加必須引数 — tickarrayBitmapExtension と blockTimestamp — が必要です。また、raydium.clmm.fetchTickArrays メソッドはありません(fetchTickArrays はフリー関数です。モジュールレベルのヘルパーは PoolUtils.fetchMultiplePoolTickArrays と getPoolInfoFromRpc が返す tickData / tickArrays です)。カスタマイズ可能な CLMM プールを作成
createCustomizablePool はプール作成時に動的手数料と片側手数料トグルを公開するエントリポイントです。createPool の形状に加えて 2 つ の追加があります:
createPool はデフォルト手数料、動的手数料なしのパスで機能し続けます。どちらかのノブが必要な場合は常に createCustomizablePool を使用してください。オンチェーンアカウントリストについては products/clmm/instructions を参照してください。
リミットオーダー
リミットオーダーはユーザー入力を単一ティックに駐車し、スワップがそのティックを横切るときに FIFO で満たされます。出力は決済時に所有者の ATA にプッシュされます。所有者がオンラインである必要はありません。リミットオーダーを開設
(owner, nonce PDA, order nonce) から LimitOrderState PDA を導出し、ウォレットごとの LimitOrderNonce をバンプし、そのティックの FIFO コホートにオーダーを挿入します。
開いているオーダーを増加 / 減少
decreaseLimitOrder はオーダーの 未充足 部分からのみ削除できます。充足部分は決済まで ロックされます。両方の命令は、オーダーが既に完全に充足されている場合、InvalidOrderPhase で戻ります。
充足されたオーダーを決済
settleLimitOrder はオーダーの unfilled_ratio_x64 をコホートトラッカーに対して読み取り、充足出力を計算し、所有者の ATA に転送します。所有者は自分でこれを呼び出すことができます。limit_order_admin(オフチェーン運用キーパー)も所有者の代わりに呼び出すことができます。出力は依然として所有者に行きます。
完全に決済されたオーダーを閉じてレントを回復するには、closeLimitOrder(単一)または closeAllLimitOrder(バッチ)を使用します。多くを一度に決済するには、settleAllLimitOrder は v0 tx に収まるだけ多くの SettleLimitOrder 呼び出しをパックします。
ウォレットの駐車中のオーダーをリスト(オフチェーン)
totalAmount / filledAmount / pendingSettle がフェーズを区別します)。クローズオーダー履歴については /limit-order/history/order/list-by-user?wallet=…(ウォレットごと、nextPageId でページネーション)を使用します。特定のオーダーの完全なイベントログについては /limit-order/history/event/list-by-pda?pda=… を使用します。
Rust CPI スケルトン
SwapV2 の残りアカウント順序:
よくある落とし穴
- スペーシング外のティックエンドポイント →
TickAndSpacingNotMatch。常にTickUtil.getPriceAndTick(単数TickUtil)経由でスナップしてください。 SwapV2で提供されるティック配列が不足 →NotEnoughTickArrayAccount。swapInternal(...).accountsからリストを取得してください。- ビットマップ拡張なしのフルレンジポジション → 拡張 PDA は書き込み可能である必要があります。SDK はこれを自動的に処理します。
sqrt_price_x64をpriceと間違える → ここでの 2 倍の混乱は特に痛いです。疑わしい場合は、SDK に人間が読める価格から計算させてください。- リワードを早すぎるに回収 → 各回収はゼロリクイディティ
DecreaseLiquidityで、1 トランザクションのコストがかかります。harvestAllRewards経由で多くのポジション全体でバッチ処理し、そのexecuteが{ sequentially: true }を必要とすることを忘れないでください。 - NFT アカウントを自分で閉じる →
ClosePositionは NFT をバーンし、その ATA を閉じます。また、Token-2022 NFT ミントを閉じます。古典的な SPL Token ミントは供給ゼロのままです。そのプログラムはミントを閉じることができないからです。サポートされているアカウントを別途閉じないでください。命令は戻ります。 - 非スペーシングティックでリミットオーダーを開く →
TickAndSpacingNotMatch。常にエクスポートされたgetOrderTickヘルパー経由で量子化してください。 - 完全に充足されたオーダーで
decreaseLimitOrderを呼び出す →InvalidOrderPhase。代わりにsettleLimitOrderを使用してからcloseLimitOrderを使用してください。 enableDynamicFeeフラグを期待する → ありません。dynamicFeeConfigを省略すると、静的手数料プールが静かに、エラーなしで作成されます。動的手数料が必要な場合は、/main/clmm-dynamic-configから選択された設定アカウントのPublicKeyを渡してください。
次に進む
sdk-api/typescript-sdk— 完全な SDK サーフェス。sdk-api/rest-api— クォートとプールメタデータエンドポイント。user-flows/create-clmm-pool— コードなしのウォークスルー。integration-guides/aggregator— パスの一部として CLMM をルーティング。

