このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このページは
products/clmm/accounts(アカウントの説明)および products/clmm/math(数学の説明)と対になっています。引数とアカウント順序の権威的な情報源です。具体的なバイト レイアウトは IDL から取得されます。2026-09 プログラム アップグレードは CLMM を Anchor 1.0.2 / Solana 3.1.10 で再構築し、管理者インストラクション CollectExcessLamports を追加し、CreateAmmConfig が owner / fund_owner に書き込む内容を変更しました。ユーザー向けのインストラクションでアカウント、引数、数学が変わったものはありません。2026-09-30 チェンジログ エントリを参照してください。2026-10-22 プログラム アップグレードは CreatePermissionedPool を CreateCustomizablePoolV2 に名前変更し、誰でも呼び出せるようにし、2 つの管理者インストラクションを持つ Permission アカウントを削除しました。2026-10-22 チェンジログ エントリを参照してください。インストラクション一覧
init-tick-array インストラクションはなく、必要ありません。 ティック配列は
OpenPosition* / IncreaseLiquidity* 内の TickArrayState::get_or_create_tick_array で作成され、payer が支払います。
(初期化されていない可能性がある、システム所有の)ティック配列 PDA を tick_array_lower / tick_array_upper として渡すと、プログラムは不足している場合にそれを割り当てます。
OpenLimitOrder は単一の tick_array に対して同じことを行います。CreateAmmConfig、UpdateAmmConfig、UpdatePoolStatus、CreateOperationAccount、UpdateOperationAccount、CloseProtocolPosition)はプログラムのハードコードされた admin 公開鍵によってゲートされています。CreateSupportMintAssociated / CloseSupportMintAssociated は admin 公開鍵または専用のサポート ミント所有者キーを受け入れます。CollectExcessLamports は admin 公開鍵または専用の collect-lamports ウォレットを受け入れます。リワード ストリーム管理者インストラクション(TransferRewardOwner、CollectRemainingRewards)はプログラム管理者ではなくリワード ファンダーによってゲートされています。
V2 サフィックスは「ボルト/NFT で Token-2022 をサポート、ビットマップ拡張スロットが必要」を意味します。SDK は新しいプールに対してデフォルトで V2 を選択します。
CreatePool
引数
前提条件
token_mint_0 < token_mint_1(バイト順)。amm_config.disable_create_pool == false。- ミントは Token-2022 拡張ホワイトリストで拒否されていません。
pool_state.sqrt_price_x64 = sqrt_price_x64、tick_current = floor(log_{1.0001}(price))。pool_state.liquidity = 0(ポジションなし)。pool_state.fee_on = FromInput(レガシー デフォルト)。pool_state.dynamic_fee_infoはゼロ化されています(動的手数料は無効)。
CreateCustomizablePool
新しいプールに推奨されます。CreatePool と同じ効果に加えて、プールごとの手数料回収モードとオプションの動的手数料オプトイン。
引数
CreatePool の正確に 13 個の宣言されたアカウント。dynamic_fee_config は宣言されたアカウントではありません。
前提条件 — CreatePool と同じ。enable_dynamic_fee = false の場合、remaining_account は不要で、渡されたものはサポート ミント レコードのみスキャンされます。
事後条件
pool_state.fee_onは選択されたCollectFeeOnバリアントに設定されます。- 動的手数料が有効な場合:
pool_state.dynamic_fee_infoは提供されたDynamicFeeConfigから初期化されます(5 つのキャリブレーション パラメータがコピーされ、状態フィールドはゼロ化されます)。 - それ以外の場合:
pool_state.dynamic_fee_infoはゼロ化されます(= このプールでは動的手数料は永遠に非アクティブ)。
fee_on と動的手数料有効化ビットはプール作成時のみ設定されます。インプレース アップグレードはありません。レガシー CreatePool で作成されたプールは、動的手数料または片側手数料を遡及的に取得することはできません。新しいデプロイメントはこのインストラクションをデフォルトにする必要があります。
CreateCustomizablePoolV2
CreatePool と CreateCustomizablePool はどちらも ["pool", amm_config, token_mint_0, token_mint_1] からプール PDA を導出するため、(config, mint0, mint1) の組み合わせごとに正確に 1 つ の正規プールアドレスが存在します。同じシードで 2 回目の init を実行するとエラーになります。CreateCustomizablePoolV2 はクライアント提供の seed_index: u16 をプール PDA シードに組み込むことでこの制限を解除し、同じペアと手数料階層に対して複数のプールを作成 できるようにします。各プールは独自のアドレスを持ちます。誰でも呼び出せます。
プールのその他すべての側面は CreateCustomizablePool と同じです。同じ CreateCustomizableParams を受け取り、片側手数料と動的手数料オプトインをサポートします。
2026-10-22 アップグレードまでは、このインストラクションは
CreatePermissionedPool と呼ばれており、支払者がアドミン発行の Permission PDA を保有する必要がありました。アップグレードにより名前が変更され、permission アカウントが削除され、権限メカニズムが廃止されました。ディスクリミネータは名前とともに変更されたため、CreatePermissionedPool に対して構築されたクライアントは再構築する必要があります。remaining_accounts: Token-2022 ミントが必要とするサポートミント レジストリ PDA、および enable_dynamic_fee = true の場合は DynamicFeeConfig 最後に — CreateCustomizablePool と同じです。
前提条件
seed_index != 0。seed_indexが0の場合はレガシープール用に予約されており、ここで拒否されます。[0, 0]シード コンポーネントがレガシープールアドレスを古典的な 4 シード形式に折りたたみます。- 導出されたアドレスにプールが既に存在しません。
CreatePoolと同じミント / 許可リストルール。
- 新しい
pool_stateがseed_index導出アドレスに存在し、pool_state.seed_index = seed_indexです。 - その他すべての事後状態は
CreateCustomizablePoolと一致します(手数料モード、オプションの動的手数料)。
OpenPositionV2 / OpenPositionWithToken22Nft
既存のプール内に新しいポジションを作成します。
引数
OpenPositionV2 は 22 個を宣言します。OpenPositionWithToken22Nft は 20 個を宣言します。
OpenPositionV2(順序通り):
OpenPositionWithToken22Nft は metadata_account(5)と metadata_program(19)が 削除された 同じリストです。代わりに NFT ミント上の Token-2022 メタデータ拡張を通じてポジションのメタデータを書き込みます。これにより 20 個のアカウントになります。その position_nft_mint は単なる Signer で、position_nft_account は UncheckedAccount です。
計算 — products/clmm/math を参照してください。base_flag が与えられた場合、プログラムは liquidity または (amount_0_max, amount_1_max) のいずれかを実際の L と消費された実際のトークン金額に解決します。
前提条件
tick_lower < tick_upper、両方ともpool.tick_spacingの倍数、[MIN_TICK, MAX_TICK]内。- 2 つのティック配列 PDA が渡されます。それらは既に存在する必要は ありません —
get_or_create_tick_arrayはこのインストラクション内でpayerの費用で不足しているものを割り当てます。個別のティック配列初期化インストラクションはありません。 - ユーザーはソース ATA に少なくとも
amount_0_maxとamount_1_maxを持っています。
personal_positionが存在し、liquidityが設定され、fee_growth_inside_lastがスナップショットされます。tick_lowerとtick_upperのティック配列エントリが更新されます(liquidity_gross += L、liquidity_net ± L、手数料成長スナップショットが保持されます)。- ポジションが範囲内の場合(
tick_lower ≤ tick_current < tick_upper)、pool_state.liquidity += L。 - ポジション NFT ミントは
pool_stateをフリーズ権限として記録します。ミント権限は単一の NFT がミントされた後に削除されます。フリーズ権限を記録しても、NFT トークンアカウントの状態は変わりません。 - NFT トークンアカウントは、インストラクションが
OpenPositionV2またはOpenPositionWithToken22Nftかつ いずれかのボルトミントのフリーズ権限が CLMM の制限発行者リストと一致する場合を除き、フリーズされたままです。その一致する V2 パスのみがアカウントをフリーズします。OpenPositionV1 はフリーズしません。
TickInvalidOrder(tick_lower >= tick_upper)、TickAndSpacingNotMatch(エンドポイントが tick_spacing の倍数ではない)、InvalidTickIndex([MIN_TICK, MAX_TICK] の外)、MissingTickArrayBitmapExtensionAccount(範囲がインラインビットマップの外で拡張が追加されていない)、NotApproved(pool_state.status がオープンをブロック)、ZeroAmountSpecified。
ポジションのフリーズは宣言されたインストラクションアカウントまたは引数を追加しません。クライアントは既存の V2 レイアウトでこれらのポジションを開くことができます。動作はオンチェーンで
vault_0_mint と vault_1_mint から選択されます。IncreaseLiquidityV2
既に開いているポジションにリクイディティを追加します。
引数
OpenPosition から導出 できません。rent、system_program、associated_token_program、メタデータアカウントがありません。
ポジションの範囲がインラインビットマップの外にある場合、
TickArrayBitmapExtension PDA を remaining_accounts[0] として先頭に追加してください。
効果
amount_0_actual/amount_1_actualをユーザー → ボルトから転送します。personal_position.liquidityとpool_state.liquidity(範囲内の場合)をインクリメントし、エンドポイントティックのliquidity_gross/liquidity_netをそれに応じて調整します。- 最後のタッチ以降に発生した手数料とリワードを収集 し、
token_fees_owed_{0,1}/reward_amount_owedにクレジットします。これらはDecreaseLiquidity/DecreaseLiquidityV2でのみ支払われ、増加時には支払われません。スタンドアロンの収集インストラクションはありません。
DecreaseLiquidityV2
ポジションからリクイディティを削除します。
引数
IncreaseLiquidityV2 と 同じ形状または順序ではありません。personal_position と pool_state が入れ替わり、ボルトがティック配列の前に来て、ユーザー側のアカウントは recipient_token_account_* という名前で、追加の memo_program があります。
残りのアカウント — アクティブなリワードごとに 3 つ、順序は
reward_token_vault(W)、recipient_token_account(W)、reward_vault_mint。ポジションの範囲がインラインビットマップの外にある場合、TickArrayBitmapExtension PDA を先頭に追加してください。
これは手数料とリワードを収集する 唯一の 方法です。ポジションを変更せずに収集するには、
liquidity = 0、amount_0_min = 0、amount_1_min = 0 で呼び出してください。- 現在の
sqrt_price_x64が与えられた場合、削除されたLに対して(amount_0, amount_1)を計算します。 - 最後のタッチ以降に発生した手数料/リワードを決済します(
IncreaseLiquidityと同じ)。 amount_0 + fees_owed_0とamount_1 + fees_owed_1をボルトからユーザーに転送します。- リクイディティカウンタをデクリメントします。新しい
personal_position.liquidity == 0の場合、ポジションはClosePositionの対象になります。
amount_0_min と amount_1_min は、出力側の Token-2022 転送手数料を差し引いた後、ユーザーが受け入れる最小値です。
ClosePosition
ポジション NFT をバーンし、PersonalPositionState をクローズします。
宣言されたアカウント
残りのアカウント
- フリーズされていない NFT:不要。ハンドラーが読み込まないため、余分なプールアカウントは問題ありません。
- フリーズされた NFT:最初の残りのアカウントとして
personal_position.pool_idを追加します。プログラムはこれをPoolStateとして読み込み、その PDA シードを使用してシャを実行します。
personal_position.liquidity == 0。tokens_fees_owed_{0,1} == 0。- すべてのリワードカウンター
reward_amount_owed == 0。
- NFT トークンアカウントがフリーズされている場合、最初の残りのアカウントが
personal_position.pool_idと等しいことを確認してから、プール PDA でシャを実行します。 - NFT をバーンします。
- NFT トークンアカウントと
personal_positionをクローズし、レント をnft_ownerに払い戻します。ポジション NFT が Token-2022 を使用している場合、NFT ミントもクローズします。クラシック SPL Token ミントはクローズできず、供給量ゼロのままになります。
AccountLack で失敗します。すべてのクローズでプールを渡すことが最も単純な互換性戦略です。
SwapV2
リクイディティ曲線を歩む。is_base_input に応じて正確な入力 または 正確な出力。
引数
呼び出し元は、予想されるスワップウォークをカバーするティックアレイのランク付きリストを渡します。プログラムは必要な数だけ使用します。SDK はこのリストを
PoolUtils.computeAmountOutFormat または API のクォートエンドポイント経由で計算します。
前提条件
pool_state.statusはスワップを許可します。now >= open_time。sqrt_price_limit_x64は方向に対してsqrt_price_x64の正しい側にあります。
TooLittleOutputReceived(正確入力スリッページ)、TooMuchInputPaid(正確出力スリッページ)、SqrtPriceLimitOverflow、NotEnoughTickArrayAccount、InvalidFirstTickArrayAccount、MissingTickArrayBitmapExtensionAccount、LiquidityInsufficient、NotApproved(pool_state.status でスワップビットが設定)。CLMM には ExceededSlippage バリアントがありません — その名前は CPMM のものです — また TickArrayNotFound もありません。
呼び出し元が知っておくべき SwapV2 が内部で行うこと(2025年リリース後):
- 動的フィー追加料金 —
pool.dynamic_fee_infoがゼロ以外の場合、プログラムは最後のスワップ以降に走査されたティック距離を使用してボラティリティアキュムレータを更新し(products/clmm/feesのフィルター/減衰ルール付き)、AmmConfig.trade_fee_rateの上にdynamic_fee_componentを追加します。総フィーは 10%(MAX_FEE_RATE_NUMERATOR / 1_000_000)でキャップされます。 - リミットオーダーマッチング — 価格ウォークがオープンなリミットオーダーを保持するティックを横切るとき、プログラムはまずそのティックで利用可能なリミットオーダーリクイディティを埋めます(
order_phaseによる FIFO)、その後 LP リクイディティ曲線に沿って進みます。埋められた金額はtick.unfilled_ratio_x64とtick.part_filled_orders_remainingを後の決済用に更新します。オーダー自体は所有者がSettleLimitOrderを呼び出すまで未使用のままです。 - 片側フィールーティング —
pool.fee_on = Token0OnlyまたはToken1Onlyの場合、スワップステップは同じ入出力トレードを計算します。その後、フィーは設定された側にルーティングされます。設定されたフィー側が出力である方向では、フィーはスワップ出力から差し引かれます(ユーザーはout − feeを受け取ります)。設定されたフィー側が入力である方向では、動作はFromInputと一致します。PoolStateのis_fee_on_input(zero_for_one)とis_fee_on_token0(zero_for_one)を参照してください。
Swap(V1)は SwapV2 と同じ動的フィー、片側フィールーティング、リミットオーダーマッチングを実装します。唯一欠けている機能は Token-2022 サポートです — 両方のボルトはクラシック SPL Token である必要があります。Token-2022 ミントを持つプールは SwapV2 経由でスワップする必要があります。アグリゲータと SDK はすでにすべての CLMM レッグで V2 を優先するため、呼び出し元はミントタイプで分岐する必要がありません。
OpenLimitOrder
特定のティックで売却オーダーを配置します。オーダーはティックごとの FIFO コホートに座り、価格が通過するにつれて埋まります。
引数
残りのアカウント —
[0] tick_array_bitmap_extension。開始インデックスがプールのインラインビットマップの外にあるティックアレイを初期化する場合にのみ必須。それ以外の場合は何も渡さないでください。
アカウントリスト変更(2026-07 リリース)。
OpenLimitOrder は入力側に加えて出力側アカウント — output_token_account、output_vault、output_vault_mint — も取得するようになりました。これらは検証にのみ使用されます。プログラムは所有者の入力または出力トークンアカウントがフリーズされている場合、オーダーを拒否します。これにより、フィルが実際に所有者の出力 ATA に決済できることが保証されます。これは許可リスト/デフォルトフリーズ Token-2022 ミント(例:許可トークン)の場合に重要です。ここでアカウントはまだシャされていない可能性があります。古い片側アカウントリストに対して構築されたクライアントは、3 つの出力アカウントを追加する必要があります。input_token_accountもoutput_token_accountもフリーズされていません(そうでない場合はNotApproved)。pool_state.statusはスワップ(ビット 4)とリミットオーダー(ビット 5)操作の両方を許可します(そうでない場合はNotApproved)。tick_index % pool.tick_spacing == 0で[MIN_TICK, MAX_TICK]内。tick_indexは選択された方向に対してpool.tick_currentの右側にあります(token0 を売却 → ティックは現在より上である必要があり、その逆も同様)。既に横切られたティックで売却することはすぐにマッチングされ、拒否されます。
limit_orderが存在し、オープン時にtick.order_phaseとtick.unfilled_ratio_x64をスナップショットします。tick.orders_amount += amount(現在のコホート内)。limit_order_nonce.order_nonce += 1。OpenLimitOrderEventが発行されます。
NotApproved(入力または出力トークンアカウントがフリーズ、またはプールがスワップ/リミットオーダーを無効化)、ZeroAmountSpecified(入力側転送フィー後 amount == 0)、InvalidLimitOrderAmount(金額がそのティックで 1 ベースユニット未満の出力を生成するか、u64 をオーバーフロー)、InvalidTickIndex([MIN_TICK, MAX_TICK] の外、または選択された方向に対して tick_current の間違った側)、TickAndSpacingNotMatch(tick_index % pool.tick_spacing != 0)、OrderPhaseSaturated。
IncreaseLimitOrder
既存のオープンオーダーに追加します。オーダーの owner のみが呼び出し可能です。
引数
system_program をドロップします。
前提条件
limit_order.owner == signer。- オーダーはまだ同じコホート内にあります(
tick.order_phase == limit_order.order_phase)。コホートが既に埋め始めている場合、オーダーは部分的に決済されています — 呼び出し元は最初にDecreaseLimitOrderまたはSettleLimitOrderを呼び出して前に進める必要があります。
- 所有者 ATA から
input_vaultにamountを転送します。 limit_order.total_amount += amount。tick.orders_amount += amount。
DecreaseLimitOrder
オープンオーダーを削減またはキャンセルします。未埋め部分を所有者に払い戻し、過去の部分埋めによって既に決済された出力も払い戻します。
引数
効果
- オープン以降のコホートの
unfilled_ratio_x64からオーダーの埋められた金額を再計算します。 - 埋められた出力を
output_token_accountに送信します。 - 未埋め入力の
amountをinput_token_accountに送り返します。 limit_orderをそれに応じて更新します。新しい未埋め残高がゼロの場合、プログラムはアカウントをクローズし、レント をownerに払い戻します。
SettleLimitOrder
満たされた出力トークンをオーダーの未決済残高を変更せずにオーナーにプッシュします。auto_withdraw キーパーが長時間実行される部分的な約定をドリップペイしたい場合に便利です。
呼び出し元 — オーダーの owner、またはプログラムの limit_order_admin(自動キーパーループを実行するオフチェーン運用ホットウォレット)。キーパーは他の権限を持たず、満たされた出力をオーダーの owner ATA にプッシュする以外にユーザーファンドを移動することはできません。
アカウント
効果
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64)を使用して累積出力を計算します。- デルタを
output_token_accountに転送します。 limit_order.settled_outputを更新します。- オーダーを閉じません。残りの入力に対してまだ開いています。
CloseLimitOrder
完全に消費されたオーダーアカウントを閉じます。誰が署名するかに関わらず、レントは常に limit_order.owner に返されます。
呼び出し元 — owner または limit_order_admin。
前提条件
- オーダーの未決済残高がゼロです(
amount == total_amountが満たされて決済されたか、オーナーが以前オーダーをゼロに減らして閉じるのを忘れました)。
limit_orderを閉じます。レントはlimit_order.ownerに送信されます。
CreateDynamicFeeConfig(管理者)
u16 インデックスの下に再利用可能なパラメータセットを作成します。
引数
一般的なエラー —
InvalidDynamicFeeConfigParams(decay_period <= filter_period の場合、または 0 値フィールドが範囲外の場合)。
UpdateDynamicFeeConfig(管理者)
既存の DynamicFeeConfig を変更します。作成時にすでにコンフィグをスナップショットしたプールは遡及的に更新されません。このコンフィグを参照する新しく作成されたプールのみが新しい値を取得します。
引数 — CreateDynamicFeeConfig と同じ 5 つのキャリブレーションフィールド(filter_period、decay_period、reduction_factor、dynamic_fee_control、max_volatility_accumulator)。index は作成時に固定され、ここでは再度渡されません。
CollectProtocolFee / CollectFundFee
プールのボルトから蓄積されたプロトコル/ファンドフィーを受取人にスイープし、対応する PoolState.protocol_fees_* / fund_fees_* フィールドをゼロにします。これは CPMM のレイアウトではありません — CLMM には authority アカウントがなく、受取人フィールドは recipient_token_{0,1}_account ではなく recipient_token_account_{0,1} という名前です。
引数 — amount_0_requested: u64、amount_1_requested: u64。
2026-09 で変更:新しいコンフィグはもはや署名者からフィー所有者を取得しません。
create_amm_config はプログラムのハードコードされた protocol_fee_owner::ID を owner に、fund_fee_owner::ID を fund_owner に書き込むようになりました。以前は、管理者署名者のキーを両方にコピーしていました。メインネットでは、これらはすでに既存の 21 個のコンフィグすべてに保存されている同じキーです。アドレスは reference/program-addresses にあります。上記の受け入れられた署名者は変わりません。管理者はまだ任意のコンフィグから収集でき、既存の AmmConfig アカウントは書き直されません。どちらかの値を想定するのではなく、アカウントから owner / fund_owner を読み取ってください。UpdateAmmConfig パラメータ 3 と 4 はまだそれらをローテーションします。CollectExcessLamports
CLMM が制御するアカウント上のレント免除最小値を超えるラムポートの管理者スイープ。SIMD-0437 レント削減が各ステップの前に作成されたアカウントに残す過剰資金を回収するために 2026-09 アップグレードで追加されました。
過剰分のみが移動します。トークン残高、アカウントデータ、オーナー、プール状態、価格曲線は変わりません。アカウントがすでに最小値にある場合は、そのままにされるため、各ロールアウトステップ後に命令を安全に再実行できます。
引数:なし。
アカウント
スコープ:呼び出しごとに 1 つのプール。 CLMM にはプログラム全体のボルト権限がありません。各プールのボルトは独自の
PoolState によって所有されます。したがって、すべてのトークンプログラムソースは、スロット 2 の pool_state をその権限として持つ必要があります:token_vault_0、token_vault_1、またはそのプールの報酬ボルトの 1 つ。別のプールのボルトまたはユーザーのトークンアカウントを渡すと、トークンプログラムのオーナーチェックが失敗し、命令全体が戻ります。スキップされません。ポジション NFT ミントはスイープできません。ポジションが開かれるとミント権限が取り消されるためです。
各ソースアカウントの処理方法
プログラムは remaining_accounts に対して 2 つのパスを実行します:最初にすべてのトークンプログラム CPI、次に直接デビット。2 つをインターリーブするとランタイムの UnbalancedInstruction エラーで中止されるため、順序はプログラムで固定され、リストを自分でソートする必要はありません。
トランザクションサイズは、1 回の呼び出しに収まるソースの数に対する実際の制限です。これは
solana-fundamentals/rent-and-reclaimable-rent で説明されているウォレット側スイープと同じ制約です。
一般的なエラー:
NotApproved(6000):間違った署名者。LamportsCalculateError(6052):wSOL ラウンドトリップがゼロに正味化されませんでした。- トークンプログラムオーナー不一致エラー:トークンソースが
pool_stateによって所有されていません。 InsufficientFunds:プログラム所有アカウントが独自のレント最小値より少ないです。
@raydium-io/raydium-sdk-v2 はこの管理者パスのビルダーを提供しません。IDL から手動でエンコードしてください。
InitializeReward
プールに新しい報酬ストリームを追加します。最大 3 つのストリームが同時にアクティブになる可能性があります。
引数 — 単一の構造体、param: InitializeRewardParam:
param オブジェクトを渡す必要があります。
アカウント
前提条件
- プール上で現在 3 未満のストリームがアクティブです。
- ファンダーは
total_emission = emissions_per_second × (end_time − open_time)相当の報酬トークンをこの命令の一部としてボルトに預けます。 operation_stateごとにホワイトリストされた報酬ミント。
SetRewardParams
既存の報酬ストリームを拡張、トップアップ、または排出率を変更します。通常、プール作成者または Raydium マルチシグによって呼び出されます。制約はオンチェーンに存在します:通常、end_time を拡張したり排出を増やしたりできますが、遡及的に縮小することはできません。operation_state のオーナーリストを確認してください。
UpdateRewardInfos
純粋な簿記 — reward_growth_global_x64 を emissions_per_second × Δt / liquidity を乗算することで現在の時刻に決済します。流動性に触れるすべての命令によって内部的に呼び出されます。外部アクター(UI、クランク)がそれをトリガーしたい場合があるため、スタンドアロン命令として公開されます。
報酬の収集
ポジションに対する報酬はDecreaseLiquidity / DecreaseLiquidityV2 によって支払われます。ポジションを変更せずに収集するには、liquidity = 0、amount_0_min = 0、amount_1_min = 0 で呼び出してください。報酬ボルトと受取人アカウントは remaining_accounts に、アクティブな報酬ごとに 3 つのグループで、reward_token_vault(W)、recipient_token_account(W)、reward_vault_mint の順序で入ります。
CollectRemainingRewards は別のもので、報酬ファンダーがストリームの end_time 後に、ポジションに割り当てられなかったトークンをスイープできます。
状態変更マトリックス
次のステップ
products/clmm/code-demos— 実行可能な TypeScript サンプル。products/clmm/fees— フィーとリワード発生の詳細。reference/error-codes— CLMM Anchor エラーコード完全表。
raydium-io/raydium-clmm—programs/amm/src/instructions- Raydium SDK v2 —
@raydium-io/raydium-sdk-v2

