このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このページは
products/clmm/accounts(アカウントの内容)および products/clmm/math(計算式の内容)と対応しています。引数とアカウントの順序についての正式なリファレンスです。具体的なバイトレイアウトはIDLを参照してください。インストラクション一覧
| グループ | インストラクション | 備考 |
|---|---|---|
| 管理者 | CreateAmmConfig | 新しい手数料ティアを定義します。 |
| 管理者 | UpdateAmmConfig | 既存ティアのレートを変更します。 |
| 管理者 | UpdatePoolStatus | プールの操作を一時停止・再開します。 |
| 管理者 | CreateSupportMintAssociated | CLMMプールで使用するToken-2022ミント拡張設定をホワイトリストに追加します。 |
| 管理者 | CreateOperationAccount | プログラムレベルのオペレーションアカウントを初期化します(初回のみ)。 |
| 管理者 | UpdateOperationAccount | オペレーションアカウントのホワイトリストを変更します。 |
| 管理者 | CreateDynamicFeeConfig | u16インデックスの下に再利用可能なダイナミックフィーパラメータセットを作成します。 |
| 管理者 | UpdateDynamicFeeConfig | 既存の DynamicFeeConfig を変更します。作成時にスナップショットを取得済みのプールには影響しません。 |
| プール | CreatePool | AmmConfig に紐付けられたCLMMプールを初期化します。標準のFromInput手数料パス。CreateCustomizablePool と共存します。 |
| プール | CreateCustomizablePool | 新しいプールに推奨。CreatePool と同じ構造に加え、collect_fee_on と enable_dynamic_fee フラグのオプトインが可能です。 |
| ポジション | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | ポジションNFTをミントします。OpenPositionV2 はV1を置き換えます(ビットマップ拡張スロットを含む新しいアカウントレイアウト)。OpenPositionWithToken22Nft はポジションNFTをSPLトークンではなくToken-2022として発行します。新しいコードはV2またはToken-2022バリアントを使用してください。 |
| ポジション | IncreaseLiquidity / IncreaseLiquidityV2 | 既存ポジションに流動性を追加します。 |
| ポジション | DecreaseLiquidity / DecreaseLiquidityV2 | 流動性を削除し、未払い手数料を回収します。 |
| ポジション | ClosePosition | NFTをバーンし、PersonalPositionState を閉じます。 |
| ポジション | CloseProtocolPosition | レガシーな ProtocolPositionState PDAの管理者専用スイープ。現在のプログラムは ProtocolPositionState を作成・読み取りしません。このインストラクションは旧バージョンのプログラムで作成されたアカウントのレントを回収するためだけに存在します。 |
| スワップ | Swap / SwapV2 | 一定流動性スワップ。両バリアントともダイナミックフィー・片側手数料ルーティング・指値注文マッチングに対応しています。唯一の違いは SwapV2 がToken-2022ミントを受け付ける点です(V1バリアントは両方のボルトが従来のSPLトークンである必要があります)。 |
| スワップ | SwapRouterBaseIn | マルチホップ。ルーターが使用します。 |
| 指値注文 | OpenLimitOrder | 特定のティックに売り注文を配置します。未約定トークンはそのティックに留まり、価格がクロスするとマッチングエンジンが約定させます。 |
| 指値注文 | IncreaseLimitOrder | 既存のオープン注文に追加します。 |
| 指値注文 | DecreaseLimitOrder | オープン注文を減額またはキャンセルします。未約定残高と既に決済済みの出力を払い出します。 |
| 指値注文 | SettleLimitOrder | 約定済み出力トークンを注文オーナーにプッシュします。オーナーまたはオペレーショナルキーパーが呼び出せます。 |
| 指値注文 | CloseLimitOrder | 完全に消費された注文アカウントを閉じます。レントは常に注文の owner に返却されます。オーナーまたはキーパーが呼び出せます。 |
| 手数料 | CollectProtocolFee | プロトコル手数料の管理者スイープ。 |
| 手数料 | CollectFundFee | ファンド手数料の管理者スイープ。 |
| リワード | InitializeReward | プールに新しいリワードストリームを追加します。 |
| リワード | SetRewardParams | 既存リワードのエミッションレート・終了時刻を変更します。 |
| リワード | UpdateRewardInfos | リワード成長を現在時刻まで決済します(スワップ・ポジション変更のたびに呼び出されます)。 |
| リワード | TransferRewardOwner | リワードストリームの設定・補充権限を移転します。 |
| リワード | CollectRemainingRewards | リワードストリームの end_time 経過後、未割り当てトークンをファンダーに回収します。 |
| ユーティリティ | InitTickArray | ティックアレイアカウントを初期化します(OpenPosition と一緒にバンドルされることが多いです)。 |
CreateAmmConfig、UpdateAmmConfig、UpdatePoolStatus、CreateSupportMintAssociated、CreateOperationAccount、UpdateOperationAccount、CloseProtocolPosition)は、プログラムにハードコードされた admin 公開鍵でゲートされています。リワードストリームの管理者インストラクション(TransferRewardOwner、CollectRemainingRewards)は、プログラム管理者ではなくリワードファンダーによってゲートされています。
「V2」サフィックスは「ボルト・NFTでToken-2022をサポート、ビットマップ拡張スロットが必要」を意味します。SDKは新しいプールに対してデフォルトでV2を選択します。
CreatePool
引数
| # | 名前 | W | S | 備考 |
|---|---|---|---|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | 選択した手数料ティア。 | ||
| 3 | pool_state | W | ここで init。 | |
| 4 | token_mint_0 | ソート済み。 | ||
| 5 | token_mint_1 | |||
| 6 | token_vault_0 | W | ここで init、プールオーソリティPDA所有。 | |
| 7 | token_vault_1 | W | ||
| 8 | observation_state | W | ここで init。 | |
| 9 | tick_array_bitmap_extension | W | ここで init(V2)。 | |
| 10 | token_program | |||
| 11 | token_program_2022 | |||
| 12 | system_program, rent |
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 と同じ。enable_dynamic_fee = true の場合は以下が追加されます:
| # | 名前 | W | S | 備考 |
|---|---|---|---|---|
| N | dynamic_fee_config | スナップショット元の共有設定。事前に存在している必要があります。 |
CreatePool と同じ。enable_dynamic_fee = false の場合、dynamic_fee_config は無視されます。
事後条件
pool_state.fee_onが選択したCollectFeeOnバリアントに設定されます。- ダイナミックフィーが有効な場合:
pool_state.dynamic_fee_infoは提供されたDynamicFeeConfigから初期化されます(5つのキャリブレーションパラメータがコピーされ、状態フィールドはゼロになります)。 - それ以外の場合:
pool_state.dynamic_fee_infoはゼロ初期化(このプールではダイナミックフィーは永続的に無効)。
fee_on とダイナミックフィーの有効化フラグはプール作成時のみ設定されます。インプレースアップグレードはできません。レガシーの CreatePool で作成されたプールは、後からダイナミックフィーや片側手数料を追加することはできません。新しい実装はデフォルトでこのインストラクションを使用してください。
OpenPositionV2 / OpenPositionWithToken22Nft
既存プール内に新しいポジションを作成します。
引数
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | |||
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | オーナーのNFT用ATA。 | |
| 5 | metadata_account | W | Metaplex(with_metadata の場合、オプション)。 | |
| 6 | pool_state | W | ||
| 7 | protocol_position | |||
| 8 | tick_array_lower | W | 未初期化の場合は作成。 | |
| 9 | tick_array_upper | W | 同様。 | |
| 10 | personal_position | W | ここで作成。 | |
| 11 | token_account_0, token_account_1 | W | ユーザーのソースATA。 | |
| 12 | token_vault_0, token_vault_1 | W | ||
| 13 | rent, system_program, token_program | |||
| 14 | associated_token_program | |||
| 15 | metadata_program | オプション。 | ||
| 16 | token_program_2022 | V2。 | ||
| 17 | vault_0_mint, vault_1_mint | V2。 | ||
| 18 | tick_array_bitmap_extension | W | V2(タッチした場合)。 |
products/clmm/math を参照してください。base_flag に基づき、プログラムは liquidity または (amount_0_max, amount_1_max) から実際の L と消費トークン量を解決します。
前提条件
tick_lower < tick_upper、両方ともpool.tick_spacingの倍数で、[MIN_TICK, MAX_TICK]の範囲内。- 必要なティックアレイが渡され、初期化済みであること(またはトランザクション内の
InitTickArrayCPIでここで作成)。 - ユーザーのソース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。
InvalidTickIndex、NotApproved、ZeroAmountSpecified、TransactionTooLarge(ティックアレイが多すぎる場合)。
IncreaseLiquidityV2
既存ポジションに流動性を追加します。
引数
OpenPosition と同様ですが、NFTミントは不要です(ポジションは既に存在し、NFTはオーナーのATAに1トークンとして渡します)。
効果
- ユーザーからボルトへ
amount_0_actual/amount_1_actualを転送します。 personal_position.liquidityとpool_state.liquidity(レンジ内の場合)、およびエンドポイントティックのliquidity_gross/liquidity_netを増加させます。- 最後のタッチ以降に発生した手数料とリワードを回収し、
tokens_fees_owed_{0,1}/reward_amount_owedにクレジットします。これらはDecreaseLiquidityまたはCollectReward時にのみ払い出され、増加時には払い出されません。
DecreaseLiquidityV2
ポジションから流動性を削除します。
引数
IncreaseLiquidity と同じ構造。
効果
- 現在の
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 を閉じます。
前提条件
personal_position.liquidity == 0。tokens_fees_owed_{0,1} == 0。- すべてのリワードカウンター
reward_amount_owed == 0。
- NFTをバーンします。
- NFTミントアカウントと
personal_positionアカウントを閉じ、payerにレントを返金します。
SwapV2
is_base_input に応じて、完全入力または完全出力で流動性カーブを走査します。
引数
| # | 名前 | W | S | 備考 |
|---|---|---|---|---|
| 1 | payer | S | ||
| 2 | amm_config | |||
| 3 | pool_state | W | ||
| 4 | input_token_account | W | ||
| 5 | output_token_account | W | ||
| 6 | input_vault | W | ||
| 7 | output_vault | W | ||
| 8 | observation_state | W | ||
| 9 | token_program | |||
| 10 | token_program_2022 | V2。 | ||
| 11 | memo_program | V2(一部のToken-2022パスで必要)。 | ||
| 12 | input_vault_mint, output_vault_mint | V2。 | ||
| 13 | tick_array_bitmap_extension(オプション) | W | スワップが拡張領域に入る場合。 | |
| 14+ | tick_array(残り) | W | 予想されるウォーク範囲をカバーするのに十分な数のアレイ。 |
PoolUtils.computeAmountOutFormat またはAPIのクォートエンドポイントでこのリストを計算します。
前提条件
pool_state.statusがスワップを許可していること。now >= open_time。sqrt_price_limit_x64が方向に対してsqrt_price_x64の正しい側にあること。
ExceededSlippage、SqrtPriceLimitOverflow、TickArrayNotFound、LiquidityInsufficient。
呼び出し元が知っておくべき 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-2022ミントを持つプールは SwapV2 でスワップする必要があります。アグリゲーターとSDKはすべてのCLMMレグでV2を優先するため、呼び出し元はミントタイプで分岐する必要はありません。
OpenLimitOrder
特定のティックに売り注文を配置します。注文はティックごとのFIFOコホートに入り、価格が通過するにつれて約定します。
引数
| # | 名前 | W | S | 備考 |
|---|---|---|---|---|
| 1 | payer | W | S | 注文オーナー。レントを支払います。 |
| 2 | pool_state | W | ||
| 3 | tick_array | W | tick_index を含むティックアレイ。 | |
| 4 | limit_order_nonce | W | PDA。init_if_needed — この nonce_index の最初の注文時に作成されます。 | |
| 5 | limit_order | W | PDA。ここで init。 | |
| 6 | input_token_account | W | ユーザーの入力ATA。 | |
| 7 | input_vault | W | プールの入力ボルト。 | |
| 8 | input_vault_mint | Token-2022手数料処理。 | ||
| 9 | input_token_program | SPLまたはToken-2022。 | ||
| 10 | system_program, rent |
tick_index % pool.tick_spacing == 0かつ[MIN_TICK, MAX_TICK]の範囲内。tick_indexが選択した方向に対して**pool.tick_currentの正しい側**にあること(token0を売る場合→ティックは現在より上、その逆も同様)。既にクロス済みのティックでの売りは即時約定となるため、拒否されます。pool_state.statusが指値注文操作を許可していること(ビット5)。
limit_orderが存在し、オープン時のtick.order_phaseとtick.unfilled_ratio_x64をスナップショットしています。tick.orders_amount += amount(現在のコホート)。limit_order_nonce.order_nonce += 1。OpenLimitOrderEventが発行されます。
InvalidLimitOrderAmount(ゼロまたはプールの最低額未満)、InvalidTickIndex([MIN_TICK, MAX_TICK] 外、または選択した方向に対して tick_current の誤った側)、TickAndSpacingNotMatch(tick_index % pool.tick_spacing != 0)、OrderPhaseSaturated。
IncreaseLimitOrder
既存のオープン注文に追加します。注文の owner のみが呼び出せます。
引数
OpenLimitOrder と同様ですが、nonceアカウントは不要です。limit_order PDAが直接渡されます。
前提条件
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
オープン注文を減額または完全キャンセルします。未約定残高を、過去の部分約定で既に決済された出力とともにオーナーに返します。
引数
| # | 名前 | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | pool_state | W | |
| 3 | tick_array | W | |
| 4 | limit_order | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_vault_mint, output_vault_mint | ||
| 10 | token_program, token_program_2022 |
- オープン以降のコホートの
unfilled_ratio_x64から注文の約定済み金額を再計算します。 - 約定済み出力を
output_token_accountに送信します。 - 未約定の入力
amountをinput_token_accountに返送します。 limit_orderを適宜更新します。新しい未約定残高がゼロになった場合、プログラムはアカウントを閉じてレントをownerに返金します。
SettleLimitOrder
注文の未約定残高を変更せずに、約定済み出力トークンをオーナーにプッシュします。auto_withdraw キーパーが長期的な部分約定に対して定期的に支払いを行いたい場合に便利です。
呼び出し元 — 注文の owner、またはプログラムの limit_order_admin(自動キーパーループを実行するオフチェーンの運用ホットウォレット)。キーパーには他の権限はありません。約定済み出力を注文の owner ATAにプッシュする以外に、ユーザー資金を移動させることはできません。
アカウント
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | signer | S | オーナー または limit_order_admin | |
| 2 | pool_state | |||
| 3 | tick_array | |||
| 4 | limit_order | W | ||
| 5 | output_token_account | W | オーナーの出力ATA。 | |
| 6 | output_vault | W | プールの出力ボルト。 | |
| 7 | output_vault_mint | |||
| 8 | output_token_program |
(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インデックスの下に再利用可能なパラメータセットを作成します。
引数
| # | 名前 | W | S | 備考 |
|---|---|---|---|---|
| 1 | owner | W | S | ハードコードされた管理者公開鍵。 |
| 2 | dynamic_fee_config | W | PDA、ここで init。 | |
| 3 | system_program |
decay_period <= filter_period またはゼロ値フィールドが範囲外の場合、InvalidDynamicFeeConfigParams。
UpdateDynamicFeeConfig(管理者)
既存の DynamicFeeConfig を変更します。作成時にこの設定をスナップショットしたプールは遡及的に更新されません。この設定を参照して新しく作成されたプールのみが新しい値を適用します。
引数 — CreateDynamicFeeConfig と同じ5つのキャリブレーションフィールド(filter_period、decay_period、reduction_factor、dynamic_fee_control、max_volatility_accumulator)。index は作成時に固定され、ここでは再渡しされません。
CollectProtocolFee / CollectFundFee
CPMMの CollectProtocolFee / CollectFundFee と同じ構造です。署名者は AmmConfig.owner / AmmConfig.fund_owner と一致する必要があります。プールのボルトから発生したプロトコル・ファンド手数料を受取人にスイープし、対応する PoolState.protocol_fees_* / fund_fees_* フィールドをゼロにします。
InitializeReward
プールに新しいリワードストリームを追加します。同時に最大3つのストリームをアクティブにできます。
引数
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | ||
| 3 | amm_config | |||
| 4 | pool_state | W | ||
| 5 | operation_state | リワード作成をゲートするCLMMオペレーションステートPDA。 | ||
| 6 | reward_token_mint | |||
| 7 | reward_token_vault | W | ここで init。 | |
| 8 | reward_token_program | |||
| 9 | system_program, rent |
- プールで現在アクティブなストリームが3未満であること。
- このインストラクションの一部として、ファンダーは
total_emission = emissions_per_second × (end_time − open_time)分のリワードトークンをボルトに預け入れます。 operation_stateによるリワードミントのホワイトリスト登録。
SetRewardParams
既存のリワードストリームの延長・補充・エミッションレートの変更を行います。通常、プール作成者またはRaydiumマルチシグが呼び出します。制約はオンチェーンに存在します。通常、end_time の延長やエミッションの増加は可能ですが、遡及的な縮小はできません。operation_state のオーナーリストを確認してください。
UpdateRewardInfos
純粋なブックキーピングです。emissions_per_second × Δt / liquidity を計算して reward_growth_global_x64 を現在時刻まで決済します。流動性に触れるすべてのインストラクションから内部的に呼び出されます。外部アクター(UI、クランク)がトリガーしたい場合に備えて、スタンドアロンインストラクションとして公開されています。
CollectReward
ポジションオーナーが未払いのリワードトークンを請求します。
アカウント
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | nft_owner | S | ||
| 2 | nft_account | ポジションNFTを保持するオーナーのATA。 | ||
| 3 | personal_position | W | ||
| 4 | pool_state | W | ||
| 5 | protocol_position | |||
| 6 | reward_token_vault | W | ||
| 7 | recipient_token_account | W | ||
| 8 | token_program | |||
| 9 | token_program_2022 |
- リワード成長を決済します(手数料と同じパターン)。
- 未払い額を受取人ATAに転送し、
reward_amount_owed[i]をゼロにします。
状態変化マトリックス
| インストラクション | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | ティックアレイ |
|---|---|---|---|---|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | レンジ内なら+ | — | — | 新規 | liquidity_gross/netを追加 |
IncreaseLiquidity | レンジ内なら+ | 未払いを決済 | 未払いを決済 | + | 調整 |
DecreaseLiquidity | レンジ内なら− | 未払いを決済 | 未払いを決済 | − | 調整 |
ClosePosition | — | — | — | 破棄 | — |
SwapV2 | クロス時に± | + | — | — | クロス&外側フリップ、指値注文コホートのマッチング |
OpenLimitOrder | — | — | — | — | 対象ティックで orders_amount += amount |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=、コホートを閉じる場合あり |
SettleLimitOrder | — | — | — | — | —(ティックは読み取り専用) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | 未払いを決済 | — | — |
次のステップ
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

