このページは 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_state の creator フィールドはペイヤーではなく別途渡される creator アカウントに設定されます。pool_state の正規 PDA またはランダムキーペアの柔軟性は Initialize と同じです。 |
Deposit | LP | 両トークンで流動性を追加。LP トークンを受け取ります。 |
Withdraw | LP | LP トークンをバーン。両方の基礎となるトークンを按分で受け取ります。 |
SwapBaseInput | スワップ実行者 | 確定入力スワップ(amount_in をイン、≥ minimum_amount_out をアウト)。 |
SwapBaseOutput | スワップ実行者 | 確定出力スワップ(≤ maximum_amount_in をイン、amount_out をアウト)。 |
CollectProtocolFee | protocol_owner (AmmConfig より) | ボルトから蓄積したプロトコルフィーを回収します。 |
CollectFundFee | fund_owner (AmmConfig より) | ボルトから蓄積したファンドフィーを回収します。 |
CollectCreatorFee | pool_creator | 蓄積したクリエイターフィーを回収(クリエイターフィーが有効な場合)。 |
UpdatePoolStatus | admin | ビットマスクを使用してプール上の特定の操作を一時停止・再開します。 |
UpdateAmmConfig | admin | AmmConfig のフィー率またはプロトコル/ファンド所有者を変更します。 |
CreateAmmConfig | admin | 新しいフィーティア(新しい AmmConfig アカウント)を作成します。 |
CreatePermissionPda | admin | 特定の権限が InitializeWithPermission を呼び出すことを許可する Permission PDA をミント。 |
ClosePermissionPda | admin | 以前発行された Permission PDA を取り消します。 |
status は u8 で、ビット 0 = デポジット無効、ビット 1 = 引出無効、ビット 2 = スワップ無効(プログラムの PoolStatusBitIndex { Deposit, Withdraw, Swap } など)。クリアビットは操作が許可されたことを意味し、セットビットは一時停止されたことを意味します。UpdatePoolStatus は生の u8 を受け取り、既存値を上書きします。
以降のセクションでは詳細に説明します。アカウント順序は CPMM IDL に従い、SDK および raydium-cp-swap/programs/cp-swap/src/instructions の Rust クライアントがこの順序に合わせます。
Initialize
新しい CPMM プールを作成します。
引数
| # | 名前 | W | S | 注記 |
|---|---|---|---|---|
| 1 | creator | W | S | レント払い。pool_state.pool_creator として記録されます。 |
| 2 | amm_config | 選択されたフィーティア。 | ||
| 3 | authority | CPMM グローバルオーソリティ PDA。 | ||
| 4 | pool_state | W | S* | ここで 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() から導出されます。 |
| 5 | token_0_mint | ソート:token_0_mint < token_1_mint。 | ||
| 6 | token_1_mint | |||
| 7 | lp_mint | W | ここで init。オーソリティを authority に設定。 | |
| 8 | creator_token_0 | W | init_amount_0 のソース ATA。 | |
| 9 | creator_token_1 | W | init_amount_1 のソース ATA。 | |
| 10 | creator_lp_token | W | LP の宛先(欠落時に作成)。 | |
| 11 | token_0_vault | W | ここで init。authority が所有。 | |
| 12 | token_1_vault | W | ||
| 13 | create_pool_fee | W | 作成者が支払う create_pool_fee の宛先 ATA。 | |
| 14 | observation_state | W | ここで init。 | |
| 15 | token_program | SPL Token(LP ミント用)。 | ||
| 16 | token_0_program | SPL Token または Token-2022。 | ||
| 17 | token_1_program | SPL Token または Token-2022。 | ||
| 18 | associated_token_program | |||
| 19 | system_program | |||
| 20 | rent |
* pool_state はランダムキーペアパスでのみ署名します。正規 PDA パスは pool_state なしで実行されます。
事前条件
- ミントがソート済み(バイト順で
token_0_mint < token_1_mint)。 - どちらのミントも CPMM許可リスト外の拡張を使用していない(
TransferFeeConfig、MetadataPointer、TokenMetadata、InterestBearingConfig、ScaledUiAmount) —/ja/products/cpmm/accounts参照。プログラム内の小さいミント単位の許可リストは個別サポートのチェックをバイパス。 creatorは各 ATA にinit_amount_0およびinit_amount_1を持つ。amm_config.disable_create_pool == false。
pool_stateがlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LPで存在。LOCKED_LP(LP トークン 100 ラムポート)の LP スターターが永続的にロック —pool_state.lp_supplyはliquidity − 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 = BothToken。Initializeはクリエイターフィー有効化をサポートしません — そのパスは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
プールに比例する両トークンで流動性を追加。
引数
| # | 名前 | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
k の比例性に変化なし — ボルトと lp_supply は同一要素でスケール。
事後条件
lp_supply += lp_token_amount。vault_0 += needed_token_0(入力時 Token-2022 転送フィー差引後)。vault_1 += needed_token_1(入力時 Token-2022 転送フィー差引後)。
ExceededSlippage、ZeroTradingTokens、デポジット一時停止時 InvalidStatus。
Withdraw
LP トークンをバーン、両基礎トークンを按分で受け取ります。
引数
| # | 名前 | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
Deposit と同一;lp_mint は LP トークンがバーンされるため書き込み可能)
数学
lp_supply -= lp_token_amount。- ボルトが
out_token_0/out_token_1を送信(総額;ユーザーは Token-2022 転送フィー差引後を受取)。
SwapBaseInput
確定入力スワップ。
引数
| # | 名前 | W | S |
|---|---|---|---|
| 1 | payer | S | |
| 2 | authority | ||
| 3 | amm_config | ||
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | ||
| 10 | output_token_program | ||
| 11 | input_token_mint | ||
| 12 | output_token_mint | ||
| 13 | observation_state | W |
token_0 / token_1 ではなくユーザー方向。プログラムはミントを照合してボルトを判定。
数学 — /ja/products/cpmm/math 参照。
事前条件
open_time <= now。pool_statusがスワップを許可。- このオーソリティに対してミント一時停止・フリーズなし。
amount_in > 0。
ExceededSlippage—amount_out < minimum_amount_out。ZeroTradingTokens— トレードが 0 に丸める。NotApproved—UpdatePoolStatusでプールがスワップ一時停止。InvalidInput— ミントがプールボルトのいずれとも一致しない。
SwapBaseOutput
確定出力スワップ。
引数
SwapBaseInput と同じ。
数学 — 逆曲線(シーリング付き)、/ja/products/cpmm/math 参照。
一般的エラー — ExceededSlippage(gross_in > max_amount_in)、ZeroTradingTokens、InvalidInput、NotApproved。
CollectProtocolFee
ボルトから蓄積したプロトコルフィーを回収。
引数 — なし。
アカウント
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | owner | S | amm_config.protocol_owner に一致する必要。 | |
| 2 | authority | |||
| 3 | pool_state | W | ||
| 4 | amm_config | |||
| 5 | token_0_vault | W | ||
| 6 | token_1_vault | W | ||
| 7 | vault_0_mint | |||
| 8 | vault_1_mint | |||
| 9 | recipient_token_0_account | W | ||
| 10 | recipient_token_1_account | W | ||
| 11 | token_program | |||
| 12 | token_program_2022 |
protocol_owner でない場合 NotApproved。
CollectFundFee
CollectProtocolFee と同じ形だが、fund_owner が署名、fund_fees_* カウンタをゼロ化。
CollectCreatorFee
同じ形、pool_state.pool_creator が署名。プールが非ゼロクリエイターフィー率で初期化された場合のみ転送を発行。
UpdatePoolStatus
プール上の個別操作を一時停止・再開。status フィールドはビットマスク:
| ビット | フラグ | セット時の効果 |
|---|---|---|
| 0 | DEPOSIT_DISABLED | Deposit が NotApproved で拒否。 |
| 1 | WITHDRAW_DISABLED | Withdraw が拒否。 |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput が拒否。 |
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | authority | S | CPMM プログラムのアドミン鍵に一致する必要。 | |
| 2 | pool_state | W |
/ja/security/admin-and-multisig 参照。
CreateAmmConfig
新しいフィーティアを作成。
引数
| # | 名前 | W | S | |
|---|---|---|---|---|
| 1 | owner | W | S | アドミン。 |
| 2 | amm_config | W | ここで init。 | |
| 3 | system_program |
- 同じ
indexの既存AmmConfigなし。 protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE。
UpdateAmmConfig
既存 AmmConfig でフィー率またはオーナーシップを変更。param: u8(更新フィールドディスクリミネータ)と value: u64 を受け取ります。パラメータあたりの値セマンティクスはソースに;一般的には:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(Pubkeyバイトを再解釈として渡す)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig にバインドされた すべてのプール に次のスワップで影響。マイグレーションなし;プールは単に新値を読み込み。
状態変更マトリックス
| インストラクション | lp_supply | ボルトバランス | 蓄積フィーフィールド | observation |
|---|---|---|---|---|
Initialize | + init LP | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + init LP | + init_amount_{0,1} | 0 | init |
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 | — | — | — | — |
次へ進む
/ja/products/cpmm/code-demos— 上記の実行可能 TypeScript サンプル。/ja/reference/error-codes— 完全 Anchor エラーテーブル。/ja/products/cpmm/fees—CollectProtocolFee/CollectFundFee/CollectCreatorFeeが回収するフィー蓄積モデル。

