このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
インストラクション概要
ステータスビットマスク:各プールの
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 プールを作成します。
引数
* 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
プールに比例する両トークンで流動性を追加。
引数
数学
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 トークンをバーン、両基礎トークンを按分で受け取ります。
引数
(
Deposit と同一;lp_mint は LP トークンがバーンされるため書き込み可能)
数学
lp_supply -= lp_token_amount。- ボルトが
out_token_0/out_token_1を送信(総額;ユーザーは Token-2022 転送フィー差引後を受取)。
SwapBaseInput
確定入力スワップ。
引数
順序は 入力 → 出力 で、プールの正規
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
ボルトから蓄積したプロトコルフィーを回収。
引数 — なし。
アカウント
エフェクト
protocol_owner でない場合 NotApproved。
CollectFundFee
CollectProtocolFee と同じ形だが、fund_owner が署名、fund_fees_* カウンタをゼロ化。
CollectCreatorFee
同じ形、pool_state.pool_creator が署名。プールが非ゼロクリエイターフィー率で初期化された場合のみ転送を発行。
UpdatePoolStatus
プール上の個別操作を一時停止・再開。status フィールドはビットマスク:
引数
アドミン鍵は CPMM プログラムのアップグレード権限 — 実際には Raydium マルチシグ。
/ja/security/admin-and-multisig 参照。
CreateAmmConfig
新しいフィーティアを作成。
引数
事前条件
- 同じ
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 にバインドされた すべてのプール に次のスワップで影響。マイグレーションなし;プールは単に新値を読み込み。
状態変更マトリックス
次へ進む
/ja/products/cpmm/code-demos— 上記の実行可能 TypeScript サンプル。/ja/reference/error-codes— 完全 Anchor エラーテーブル。/ja/products/cpmm/fees—CollectProtocolFee/CollectFundFee/CollectCreatorFeeが回収するフィー蓄積モデル。

