メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このページは products/clmm/accounts(アカウントの内容)および products/clmm/math(計算式の内容)と対応しています。引数とアカウントの順序についての正式なリファレンスです。具体的なバイトレイアウトはIDLを参照してください。

インストラクション一覧

グループインストラクション備考
管理者CreateAmmConfig新しい手数料ティアを定義します。
管理者UpdateAmmConfig既存ティアのレートを変更します。
管理者UpdatePoolStatusプールの操作を一時停止・再開します。
管理者CreateSupportMintAssociatedCLMMプールで使用するToken-2022ミント拡張設定をホワイトリストに追加します。
管理者CreateOperationAccountプログラムレベルのオペレーションアカウントを初期化します(初回のみ)。
管理者UpdateOperationAccountオペレーションアカウントのホワイトリストを変更します。
管理者CreateDynamicFeeConfigu16インデックスの下に再利用可能なダイナミックフィーパラメータセットを作成します。
管理者UpdateDynamicFeeConfig既存の DynamicFeeConfig を変更します。作成時にスナップショットを取得済みのプールには影響しません。
プールCreatePoolAmmConfig に紐付けられたCLMMプールを初期化します。標準のFromInput手数料パス。CreateCustomizablePool と共存します。
プールCreateCustomizablePool新しいプールに推奨。CreatePool と同じ構造に加え、collect_fee_onenable_dynamic_fee フラグのオプトインが可能です。
ポジションOpenPosition / OpenPositionV2 / OpenPositionWithToken22NftポジションNFTをミントします。OpenPositionV2 はV1を置き換えます(ビットマップ拡張スロットを含む新しいアカウントレイアウト)。OpenPositionWithToken22Nft はポジションNFTをSPLトークンではなくToken-2022として発行します。新しいコードはV2またはToken-2022バリアントを使用してください。
ポジションIncreaseLiquidity / IncreaseLiquidityV2既存ポジションに流動性を追加します。
ポジションDecreaseLiquidity / DecreaseLiquidityV2流動性を削除し、未払い手数料を回収します。
ポジションClosePositionNFTをバーンし、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 と一緒にバンドルされることが多いです)。
管理者専用インストラクション(CreateAmmConfigUpdateAmmConfigUpdatePoolStatusCreateSupportMintAssociatedCreateOperationAccountUpdateOperationAccountCloseProtocolPosition)は、プログラムにハードコードされた admin 公開鍵でゲートされています。リワードストリームの管理者インストラクション(TransferRewardOwnerCollectRemainingRewards)は、プログラム管理者ではなくリワードファンダーによってゲートされています。 「V2」サフィックスは「ボルト・NFTでToken-2022をサポート、ビットマップ拡張スロットが必要」を意味します。SDKは新しいプールに対してデフォルトでV2を選択します。

CreatePool

引数
sqrt_price_x64: u128           // initial price
open_time:      u64            // swaps rejected before this time
アカウント(省略版)
#名前WS備考
1pool_creatorWS
2amm_config選択した手数料ティア。
3pool_stateWここで init
4token_mint_0ソート済み。
5token_mint_1
6token_vault_0Wここで init、プールオーソリティPDA所有。
7token_vault_1W
8observation_stateWここで init
9tick_array_bitmap_extensionWここで init(V2)。
10token_program
11token_program_2022
12system_program, rent
前提条件
  • token_mint_0 < token_mint_1(バイト順)。
  • amm_config.disable_create_pool == false
  • ミントがToken-2022拡張ホワイトリストで拒否されていないこと。
事後条件
  • pool_state.sqrt_price_x64 = sqrt_price_x64tick_current = floor(log_{1.0001}(price))
  • pool_state.liquidity = 0(ポジションなし)。
  • pool_state.fee_on = FromInput(レガシーデフォルト)。
  • pool_state.dynamic_fee_info はゼロ初期化(ダイナミックフィー無効)。

CreateCustomizablePool

新しいプールに推奨します。CreatePool と同じ効果に加え、プールごとの手数料回収モードとオプションのダイナミックフィーオプトインが利用できます。 引数
pub struct CreateCustomizableParams {
    pub sqrt_price_x64:    u128,
    pub collect_fee_on:    CollectFeeOn,   // FromInput | Token0Only | Token1Only
    pub enable_dynamic_fee: bool,
}
アカウント(省略版)CreatePool と同じ。enable_dynamic_fee = true の場合は以下が追加されます:
#名前WS備考
Ndynamic_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

既存プール内に新しいポジションを作成します。 引数
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity:  u128              // desired L (or 0 to use amounts below)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool           // write NFT metadata (Metaplex)
base_flag: Option<bool>       // true = fit to amount0; false = fit to amount1
アカウント(省略版)
#名前WS
1payerWS
2position_nft_owner
3position_nft_mintWS (keypair)
4position_nft_accountWオーナーのNFT用ATA。
5metadata_accountWMetaplex(with_metadata の場合、オプション)。
6pool_stateW
7protocol_position
8tick_array_lowerW未初期化の場合は作成。
9tick_array_upperW同様。
10personal_positionWここで作成。
11token_account_0, token_account_1WユーザーのソースATA。
12token_vault_0, token_vault_1W
13rent, system_program, token_program
14associated_token_program
15metadata_programオプション。
16token_program_2022V2。
17vault_0_mint, vault_1_mintV2。
18tick_array_bitmap_extensionWV2(タッチした場合)。
計算products/clmm/math を参照してください。base_flag に基づき、プログラムは liquidity または (amount_0_max, amount_1_max) から実際の L と消費トークン量を解決します。 前提条件
  • tick_lower < tick_upper、両方とも pool.tick_spacing の倍数で、[MIN_TICK, MAX_TICK] の範囲内。
  • 必要なティックアレイが渡され、初期化済みであること(またはトランザクション内の InitTickArray CPIでここで作成)。
  • ユーザーのソースATAに少なくとも amount_0_maxamount_1_max があること。
事後条件
  • personal_position が存在し、liquidity が設定され、fee_growth_inside_last がスナップショットされています。
  • tick_lowertick_upper のティックアレイエントリが更新されます(liquidity_gross += Lliquidity_net ± L、手数料成長スナップショットが維持されます)。
  • ポジションがレンジ内(tick_lower ≤ tick_current < tick_upper)の場合、pool_state.liquidity += L
よくあるエラーInvalidTickIndexNotApprovedZeroAmountSpecifiedTransactionTooLarge(ティックアレイが多すぎる場合)。

IncreaseLiquidityV2

既存ポジションに流動性を追加します。 引数
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
アカウントOpenPosition と同様ですが、NFTミントは不要です(ポジションは既に存在し、NFTはオーナーのATAに1トークンとして渡します)。 効果
  • ユーザーからボルトへ amount_0_actual / amount_1_actual を転送します。
  • personal_position.liquiditypool_state.liquidity(レンジ内の場合)、およびエンドポイントティックの liquidity_gross / liquidity_net を増加させます。
  • 最後のタッチ以降に発生した手数料とリワードを回収しtokens_fees_owed_{0,1} / reward_amount_owed にクレジットします。これらは DecreaseLiquidity または CollectReward 時にのみ払い出され、増加時には払い出されません。

DecreaseLiquidityV2

ポジションから流動性を削除します。 引数
liquidity: u128
amount_0_min: u64
amount_1_min: u64
アカウントIncreaseLiquidity と同じ構造。 効果
  • 現在の sqrt_price_x64 に基づき、削除された L に対する (amount_0, amount_1) を計算します。
  • IncreaseLiquidity と同様に、最後のタッチ以降に発生した手数料・リワードを決済します。
  • ボルトからユーザーへ amount_0 + fees_owed_0amount_1 + fees_owed_1 を転送します。
  • 流動性カウンターを減算します。新しい personal_position.liquidity == 0 になった場合、ClosePosition の対象となります。
スリッページamount_0_minamount_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 に応じて、完全入力または完全出力で流動性カーブを走査します。 引数
amount: u64                  // input if is_base_input=true, output otherwise
other_amount_threshold: u64  // min out or max in
sqrt_price_limit_x64: u128   // hard bound; 0 ⇒ unbounded
is_base_input: bool
アカウント(省略版)
#名前WS備考
1payerS
2amm_config
3pool_stateW
4input_token_accountW
5output_token_accountW
6input_vaultW
7output_vaultW
8observation_stateW
9token_program
10token_program_2022V2。
11memo_programV2(一部のToken-2022パスで必要)。
12input_vault_mint, output_vault_mintV2。
13tick_array_bitmap_extension(オプション)Wスワップが拡張領域に入る場合。
14+tick_array(残り)W予想されるウォーク範囲をカバーするのに十分な数のアレイ。
呼び出し元は予想されるスワップウォークをカバーするティックアレイのランク付きリストを渡します。プログラムは必要な分だけ使用します。SDKは PoolUtils.computeAmountOutFormat またはAPIのクォートエンドポイントでこのリストを計算します。 前提条件
  • pool_state.status がスワップを許可していること。
  • now >= open_time
  • sqrt_price_limit_x64 が方向に対して sqrt_price_x64 の正しい側にあること。
よくあるエラーExceededSlippageSqrtPriceLimitOverflowTickArrayNotFoundLiquidityInsufficient 呼び出し元が知っておくべき SwapV2 の内部動作(2025年以降のリリース):
  1. ダイナミックフィーサーチャージpool.dynamic_fee_info が非ゼロの場合、プログラムは最後のスワップからのティック移動距離を使用してボラティリティアキュムレーターを更新し(products/clmm/fees のフィルター・減衰ルールを使用)、AmmConfig.trade_fee_ratedynamic_fee_component を上乗せします。合計手数料は10%上限です(MAX_FEE_RATE_NUMERATOR / 1_000_000)。
  2. 指値注文マッチング — 価格ウォークがオープン指値注文を保持するティックを横断すると、プログラムはまずそのティックで利用可能な指値注文流動性を約定させ(order_phase によるFIFO)、その後LP流動性カーブに沿って進みます。約定済み金額は tick.unfilled_ratio_x64tick.part_filled_orders_remaining を更新し、後の決済に備えます。注文自体は、オーナーが SettleLimitOrder を呼び出すまで未使用のままです。
  3. 片側手数料ルーティングpool.fee_on = Token0Only または Token1Only の場合、スワップステップは同じ入出力取引を計算し、手数料は設定されたサイドにルーティングされます。設定された手数料サイドが出力の方向では、手数料はスワップ出力から差し引かれます(ユーザーは out − fee を受け取ります)。入力の方向では、FromInput と同じ動作をします。PoolStateis_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コホートに入り、価格が通過するにつれて約定します。 引数
nonce_index:    u8       // user's chosen nonce-account index (0..255 per wallet)
zero_for_one:   bool     // true: sell token0 for token1; false: sell token1 for token0
tick_index:     i32      // must be a multiple of pool.tick_spacing
amount:         u64      // input-token amount
アカウント(省略版)
#名前WS備考
1payerWS注文オーナー。レントを支払います。
2pool_stateW
3tick_arrayWtick_index を含むティックアレイ。
4limit_order_nonceWPDA。init_if_needed — この nonce_index の最初の注文時に作成されます。
5limit_orderWPDA。ここで init
6input_token_accountWユーザーの入力ATA。
7input_vaultWプールの入力ボルト。
8input_vault_mintToken-2022手数料処理。
9input_token_programSPLまたはToken-2022。
10system_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_phasetick.unfilled_ratio_x64 をスナップショットしています。
  • tick.orders_amount += amount(現在のコホート)。
  • limit_order_nonce.order_nonce += 1
  • OpenLimitOrderEvent が発行されます。
よくあるエラーInvalidLimitOrderAmount(ゼロまたはプールの最低額未満)、InvalidTickIndex[MIN_TICK, MAX_TICK] 外、または選択した方向に対して tick_current の誤った側)、TickAndSpacingNotMatchtick_index % pool.tick_spacing != 0)、OrderPhaseSaturated

IncreaseLimitOrder

既存のオープン注文に追加します。注文の owner のみが呼び出せます。 引数
amount: u64    // additional input-token amount
アカウントOpenLimitOrder と同様ですが、nonceアカウントは不要です。limit_order PDAが直接渡されます。 前提条件
  • limit_order.owner == signer
  • 注文が同じコホートに属していること(tick.order_phase == limit_order.order_phase)。コホートが既に約定を開始している場合、注文は部分的に決済されています。呼び出し元はまず DecreaseLimitOrder または SettleLimitOrder を呼び出してロールフォワードしてください。
効果
  • オーナーATAから input_vaultamount を転送します。
  • limit_order.total_amount += amounttick.orders_amount += amount

DecreaseLimitOrder

オープン注文を減額または完全キャンセルします。未約定残高を、過去の部分約定で既に決済された出力とともにオーナーに返します。 引数
amount:     u64    // input-token amount to withdraw (max = unfilled remainder)
amount_min: u64    // slippage floor on the input-side withdrawal
アカウント — 入力と出力の両トークンサイド:
#名前WS
1ownerS
2pool_stateW
3tick_arrayW
4limit_orderW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_vault_mint, output_vault_mint
10token_program, token_program_2022
効果
  • オープン以降のコホートの unfilled_ratio_x64 から注文の約定済み金額を再計算します。
  • 約定済み出力を output_token_account に送信します。
  • 未約定の入力 amountinput_token_account に返送します。
  • limit_order を適宜更新します。新しい未約定残高がゼロになった場合、プログラムはアカウントを閉じてレントを owner に返金します。

SettleLimitOrder

注文の未約定残高を変更せずに、約定済み出力トークンをオーナーにプッシュします。auto_withdraw キーパーが長期的な部分約定に対して定期的に支払いを行いたい場合に便利です。 呼び出し元 — 注文の owner、またはプログラムの limit_order_admin(自動キーパーループを実行するオフチェーンの運用ホットウォレット)。キーパーには他の権限はありません。約定済み出力を注文の owner ATAにプッシュする以外に、ユーザー資金を移動させることはできません。 アカウント
#名前WS
1signerSオーナー または limit_order_admin
2pool_state
3tick_array
4limit_orderW
5output_token_accountWオーナーの出力ATA。
6output_vaultWプールの出力ボルト。
7output_vault_mint
8output_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インデックスの下に再利用可能なパラメータセットを作成します。 引数
index:                       u16
filter_period:               u16   // seconds; e.g. 30
decay_period:                u16   // seconds; e.g. 600. Must be > filter_period
reduction_factor:            u16   // 1..10_000; e.g. 5_000 = 50% retention per decay window
dynamic_fee_control:         u32   // 1..100_000; gain on the volatility-to-fee curve
max_volatility_accumulator:  u32   // ceiling
アカウント
#名前WS備考
1ownerWSハードコードされた管理者公開鍵。
2dynamic_fee_configWPDA、ここで init
3system_program
よくあるエラーdecay_period <= filter_period またはゼロ値フィールドが範囲外の場合、InvalidDynamicFeeConfigParams

UpdateDynamicFeeConfig(管理者)

既存の DynamicFeeConfig を変更します。作成時にこの設定をスナップショットしたプールは遡及的に更新されません。この設定を参照して新しく作成されたプールのみが新しい値を適用します。 引数CreateDynamicFeeConfig と同じ5つのキャリブレーションフィールド(filter_perioddecay_periodreduction_factordynamic_fee_controlmax_volatility_accumulator)。index は作成時に固定され、ここでは再渡しされません。

CollectProtocolFee / CollectFundFee

CPMMの CollectProtocolFee / CollectFundFee と同じ構造です。署名者は AmmConfig.owner / AmmConfig.fund_owner と一致する必要があります。プールのボルトから発生したプロトコル・ファンド手数料を受取人にスイープし、対応する PoolState.protocol_fees_* / fund_fees_* フィールドをゼロにします。

InitializeReward

プールに新しいリワードストリームを追加します。同時に最大3つのストリームをアクティブにできます。 引数
open_time:     u64
end_time:      u64
emissions_per_second_x64: u128   // Q64.64
アカウント
#名前WS
1reward_funderWS
2funder_token_accountW
3amm_config
4pool_stateW
5operation_stateリワード作成をゲートするCLMMオペレーションステートPDA。
6reward_token_mint
7reward_token_vaultWここで init
8reward_token_program
9system_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

ポジションオーナーが未払いのリワードトークンを請求します。 アカウント
#名前WS
1nft_ownerS
2nft_accountポジションNFTを保持するオーナーのATA。
3personal_positionW
4pool_stateW
5protocol_position
6reward_token_vaultW
7recipient_token_accountW
8token_program
9token_program_2022
効果
  • リワード成長を決済します(手数料と同じパターン)。
  • 未払い額を受取人ATAに転送し、reward_amount_owed[i] をゼロにします。

状態変化マトリックス

インストラクションpool.liquiditypool.fee_growth_globalpool.reward_growth_globalpersonal_position.liquidityティックアレイ
CreatePool00
OpenPositionレンジ内なら+新規liquidity_gross/netを追加
IncreaseLiquidityレンジ内なら+未払いを決済未払いを決済+調整
DecreaseLiquidityレンジ内なら−未払いを決済未払いを決済調整
ClosePosition破棄
SwapV2クロス時に±+クロス&外側フリップ、指値注文コホートのマッチング
OpenLimitOrder対象ティックで orders_amount += amount
IncreaseLimitOrderorders_amount += amount
DecreaseLimitOrderorders_amount -=、コホートを閉じる場合あり
SettleLimitOrder—(ティックは読み取り専用)
CloseLimitOrder
CreateCustomizablePool00
UpdateRewardInfos+
CollectReward未払いを決済

次のステップ

ソース: