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 による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
インストラクション一覧
| グループ | インストラクション | 備考 |
|---|
| 管理者 | 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
引数
sqrt_price_x64: u128 // initial price
open_time: u64 // swaps rejected before this time
アカウント(省略版)
| # | 名前 | 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 と同じ効果に加え、プールごとの手数料回収モードとオプションのダイナミックフィーオプトインが利用できます。
引数
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 の場合は以下が追加されます:
| # | 名前 | 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
既存プール内に新しいポジションを作成します。
引数
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
アカウント(省略版)
| # | 名前 | 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] の範囲内。
- 必要なティックアレイが渡され、初期化済みであること(またはトランザクション内の
InitTickArray CPIでここで作成)。
- ユーザーのソース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
既存ポジションに流動性を追加します。
引数
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.liquidity と pool_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_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 に応じて、完全入力または完全出力で流動性カーブを走査します。
引数
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
アカウント(省略版)
| # | 名前 | 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 | | 予想されるウォーク範囲をカバーするのに十分な数のアレイ。 |
呼び出し元は予想されるスワップウォークをカバーするティックアレイのランク付きリストを渡します。プログラムは必要な分だけ使用します。SDKは 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コホートに入り、価格が通過するにつれて約定します。
引数
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
アカウント(省略版)
| # | 名前 | 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 のみが呼び出せます。
引数
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_vault へ amount を転送します。
limit_order.total_amount += amount;tick.orders_amount += amount。
DecreaseLimitOrder
オープン注文を減額または完全キャンセルします。未約定残高を、過去の部分約定で既に決済された出力とともにオーナーに返します。
引数
amount: u64 // input-token amount to withdraw (max = unfilled remainder)
amount_min: u64 // slippage floor on the input-side withdrawal
アカウント — 入力と出力の両トークンサイド:
| # | 名前 | 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インデックスの下に再利用可能なパラメータセットを作成します。
引数
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
アカウント
| # | 名前 | 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つのストリームをアクティブにできます。
引数
open_time: u64
end_time: u64
emissions_per_second_x64: u128 // Q64.64
アカウント
| # | 名前 | 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 | — | — | 未払いを決済 | — | — |
次のステップ
ソース: