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

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 による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →

インストラクション概要

ディスクリミネータ名署名者動作
Initializeプール作成者2つのミント と AmmConfig から新しい CPMM プールを作成します。パーミッションレス。新しいプールで enable_creator_fee = false がハードコードされます。pool_state アカウントは正規 PDA またはランダムキーペア(Initialize アカウント参照)です。
InitializeWithPermissionペイヤー + Permission PDA の保有者Initialize の許可版。呼び出し者(ペイヤー)は自身の公開鍵から導出された Permission PDA を所有する必要があります。プール作成をゲートする必要があるプラットフォームで使用(例:LaunchLab 卒業)。呼び出し者が creator_fee_on を固定でき、新しいプールで enable_creator_fee = true に強制されます。pool_statecreator フィールドはペイヤーではなく別途渡される creator アカウントに設定されます。pool_state の正規 PDA またはランダムキーペアの柔軟性は Initialize と同じです。
DepositLP両トークンで流動性を追加。LP トークンを受け取ります。
WithdrawLPLP トークンをバーン。両方の基礎となるトークンを按分で受け取ります。
SwapBaseInputスワップ実行者確定入力スワップ(amount_in をイン、≥ minimum_amount_out をアウト)。
SwapBaseOutputスワップ実行者確定出力スワップ(≤ maximum_amount_in をイン、amount_out をアウト)。
CollectProtocolFeeprotocol_owner (AmmConfig より)ボルトから蓄積したプロトコルフィーを回収します。
CollectFundFeefund_owner (AmmConfig より)ボルトから蓄積したファンドフィーを回収します。
CollectCreatorFeepool_creator蓄積したクリエイターフィーを回収(クリエイターフィーが有効な場合)。
UpdatePoolStatusadminビットマスクを使用してプール上の特定の操作を一時停止・再開します。
UpdateAmmConfigadminAmmConfig のフィー率またはプロトコル/ファンド所有者を変更します。
CreateAmmConfigadmin新しいフィーティア(新しい AmmConfig アカウント)を作成します。
CreatePermissionPdaadmin特定の権限が InitializeWithPermission を呼び出すことを許可する Permission PDA をミント。
ClosePermissionPdaadmin以前発行された Permission PDA を取り消します。
ステータスビットマスク:各プールの statusu8 で、ビット 0 = デポジット無効、ビット 1 = 引出無効、ビット 2 = スワップ無効(プログラムの PoolStatusBitIndex { Deposit, Withdraw, Swap } など)。クリアビットは操作が許可されたことを意味し、セットビットは一時停止されたことを意味します。UpdatePoolStatus は生の u8 を受け取り、既存値を上書きします。 以降のセクションでは詳細に説明します。アカウント順序は CPMM IDL に従い、SDK および raydium-cp-swap/programs/cp-swap/src/instructions の Rust クライアントがこの順序に合わせます。

Initialize

新しい CPMM プールを作成します。 引数
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix タイムスタンプ。これ以前のスワップは拒否されます
アカウント (W = 書き込み可能、S = 署名者)
#名前WS注記
1creatorWSレント払い。pool_state.pool_creator として記録されます。
2amm_config選択されたフィーティア。
3authorityCPMM グローバルオーソリティ PDA。
4pool_stateWS*ここで init正規 PDA ["pool", amm_config, token_0_mint, token_1_mint] または ランダムキーペア — 正規 PDA でない場合、プログラムは pool_state に署名を要求(require_eq!(pool_account_info.is_signer, true))。ランダムキーペアパスは作成者が正規 PDA での前走行動作を回避できます。下流 PDA(lp_mint、ボルト、observation_state)は pool_state.key() から導出されます。
5token_0_mintソート:token_0_mint < token_1_mint
6token_1_mint
7lp_mintWここで init。オーソリティを authority に設定。
8creator_token_0Winit_amount_0 のソース ATA。
9creator_token_1Winit_amount_1 のソース ATA。
10creator_lp_tokenWLP の宛先(欠落時に作成)。
11token_0_vaultWここで initauthority が所有。
12token_1_vaultW
13create_pool_feeW作成者が支払う create_pool_fee の宛先 ATA。
14observation_stateWここで init
15token_programSPL Token(LP ミント用)。
16token_0_programSPL Token または Token-2022。
17token_1_programSPL Token または Token-2022。
18associated_token_program
19system_program
20rent
* pool_state はランダムキーペアパスでのみ署名します。正規 PDA パスは pool_state なしで実行されます。 事前条件
  • ミントがソート済み(バイト順で token_0_mint < token_1_mint)。
  • どちらのミントも CPMM許可リスト外の拡張を使用していない(TransferFeeConfigMetadataPointerTokenMetadataInterestBearingConfigScaledUiAmount) — /ja/products/cpmm/accounts 参照。プログラム内の小さいミント単位の許可リストは個別サポートのチェックをバイパス。
  • creator は各 ATA に init_amount_0 および init_amount_1 を持つ。
  • amm_config.disable_create_pool == false
事後条件
  • pool_statelp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP で存在。
  • LOCKED_LP(LP トークン 100 ラムポート)の LP スターターが永続的にロック — pool_state.lp_supplyliquidity − 100 を記録しつつ、100 LP ユニットは流通外のまま、プールが完全にドレイン・ゼロ除算を防止。
  • observation_state 初期化;observation_index = 0 および pool_id = pool_state.key()
  • create_pool_fee ラムポートは作成者から受信者に転送され、ネイティブ SOL(wSOL ATA)として同期。
  • プールのステータスビットマスクは 0(デポジット・引出・スワップすべて有効)。
  • enable_creator_fee = false および creator_fee_on = BothTokenInitialize はクリエイターフィー有効化をサポートしません — そのパスは InitializeWithPermission
  • open_time は呼び出し者が <= block_timestamp の値を渡した場合 block_timestamp + 1 に引き上げられます。スワップは open_time 前に拒否;デポジット・引出は即座に動作。
一般的エラー (完全リストは /ja/reference/error-codes で)
  • InvalidInput — ミント非ソート、または同一ミント。
  • NotSupportMint — ブロック Token-2022 拡張。
  • ExceededSlippage — 稀に;init_amount_0/1 が小数点不一致で 0 LP になった場合。

Deposit

プールに比例する両トークンで流動性を追加。 引数
lp_token_amount:   u64   // LP にミントする LP トークン数
maximum_token_0:   u64
maximum_token_1:   u64
アカウント
#名前WS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
数学
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
k の比例性に変化なし — ボルトと lp_supply は同一要素でスケール。 事後条件
  • lp_supply += lp_token_amount
  • vault_0 += needed_token_0(入力時 Token-2022 転送フィー差引後)。
  • vault_1 += needed_token_1(入力時 Token-2022 転送フィー差引後)。
一般的エラーExceededSlippageZeroTradingTokens、デポジット一時停止時 InvalidStatus

Withdraw

LP トークンをバーン、両基礎トークンを按分で受け取ります。 引数
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
アカウント
#名前WS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
Deposit と同一;lp_mint は LP トークンがバーンされるため書き込み可能) 数学
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
事後条件
  • lp_supply -= lp_token_amount
  • ボルトが out_token_0 / out_token_1 を送信(総額;ユーザーは Token-2022 転送フィー差引後を受取)。

SwapBaseInput

確定入力スワップ。 引数
amount_in:            u64
minimum_amount_out:   u64
アカウント
#名前WS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
順序は 入力 → 出力 で、プールの正規 token_0 / token_1 ではなくユーザー方向。プログラムはミントを照合してボルトを判定。 数学/ja/products/cpmm/math 参照。 事前条件
  • open_time <= now
  • pool_status がスワップを許可。
  • このオーソリティに対してミント一時停止・フリーズなし。
  • amount_in > 0
一般的エラー
  • ExceededSlippageamount_out < minimum_amount_out
  • ZeroTradingTokens — トレードが 0 に丸める。
  • NotApprovedUpdatePoolStatus でプールがスワップ一時停止。
  • InvalidInput — ミントがプールボルトのいずれとも一致しない。

SwapBaseOutput

確定出力スワップ。 引数
max_amount_in:  u64
amount_out:     u64
アカウントSwapBaseInput と同じ。 数学 — 逆曲線(シーリング付き)、/ja/products/cpmm/math 参照。 一般的エラーExceededSlippagegross_in > max_amount_in)、ZeroTradingTokensInvalidInputNotApproved

CollectProtocolFee

ボルトから蓄積したプロトコルフィーを回収。 引数 — なし。 アカウント
#名前WS
1ownerSamm_config.protocol_owner に一致する必要。
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_program_2022
エフェクト
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
曲線の有効バランスに変化なし(蓄積フィーはすでに除外)。 一般的エラー — 署名者が protocol_owner でない場合 NotApproved

CollectFundFee

CollectProtocolFee と同じ形だが、fund_owner が署名、fund_fees_* カウンタをゼロ化。

CollectCreatorFee

同じ形、pool_state.pool_creator が署名。プールが非ゼロクリエイターフィー率で初期化された場合のみ転送を発行。

UpdatePoolStatus

プール上の個別操作を一時停止・再開。status フィールドはビットマスク:
ビットフラグセット時の効果
0DEPOSIT_DISABLEDDepositNotApproved で拒否。
1WITHDRAW_DISABLEDWithdraw が拒否。
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput が拒否。
引数
status: u8      // 新しいビットマスク
アカウント
#名前WS
1authoritySCPMM プログラムのアドミン鍵に一致する必要。
2pool_stateW
アドミン鍵は CPMM プログラムのアップグレード権限 — 実際には Raydium マルチシグ。/ja/security/admin-and-multisig 参照。

CreateAmmConfig

新しいフィーティアを作成。 引数
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
アカウント
#名前WS
1ownerWSアドミン。
2amm_configWここで init
3system_program
事前条件
  • 同じ index の既存 AmmConfig なし。
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE

UpdateAmmConfig

既存 AmmConfig でフィー率またはオーナーシップを変更。param: u8(更新フィールドディスクリミネータ)と value: u64 を受け取ります。パラメータあたりの値セマンティクスはソースに;一般的には:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_ownerPubkey バイトを再解釈として渡す)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
変更はアドミンが署名、この AmmConfig にバインドされた すべてのプール に次のスワップで影響。マイグレーションなし;プールは単に新値を読み込み。

状態変更マトリックス

インストラクションlp_supplyボルトバランス蓄積フィーフィールドobservation
Initialize+ init LP+ init_amount_{0,1}0init
InitializeWithPermission+ init LP+ init_amount_{0,1}0init
Deposit++ both
Withdraw− both
SwapBaseInput+ in, − out+ trade_fee をプロトコル/ファンドに分割;有効な場合 + creator_fee+ (インターバル経過時)
SwapBaseOutput+ in, − out+ trade_fee をプロトコル/ファンドに分割;有効な場合 + creator_fee+ (インターバル経過時)
CollectProtocolFee−(プロトコルバケット分)protocol_* → 0
CollectFundFee−(ファンドバケット分)fund_* → 0
CollectCreatorFee−(クリエイターバケット分)creator_* → 0
UpdatePoolStatus

次へ進む

ソース: