このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このページは権威的なインストラクション・リファレンスです。これらのインストラクションを実際に構成するコードについては、
products/cpmm/code-demos を参照してください。エラーコードの意味については reference/error-codes を参照してください。インストラクション一覧
ステータスビットマスク:各プールの
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)。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(100 ラムポートの LP トークン)の 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より前に拒否されます。デポジットと引き出しはすぐに機能します。
reference/error-codes を参照)
InvalidInput— ミントがソートされていない、または同一のミント。NotSupportMint— ブロックされた Token-2022 拡張機能。ExceededSlippage— まれに。init_amount_0/1が小数点の不一致により 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 トークンがバーンされるため、lp_mint は書き込み可能です。)
計算
lp_supply -= lp_token_amount。- ボールトは
out_token_0/out_token_1を送信します(総額。ユーザーは Token-2022 転送フィーを差し引いた額を受け取ります)。
SwapBaseInput
正確な入力スワップ。
引数
順序は、プールの正規
token_0 / token_1 ではなく、ユーザーの方向による入力 → 出力です。プログラムはミントをマッチングすることでどのボールトがどれであるかを判断します。
計算 — products/cpmm/math を参照してください。
前提条件
open_time <= now。pool_statusはスワップを許可します。- どちらのミントもこの権限に対して一時停止またはフリーズされていません。
amount_in > 0。
ExceededSlippage—amount_out < minimum_amount_out。ZeroTradingTokens— トレードがゼロに丸められます。NotApproved— プールはUpdatePoolStatus経由でスワップに対して一時停止されています。InvalidInput— ミントがプールのボールトミントのいずれとも一致しません。
SwapBaseOutput
正確な出力スワップ。
引数
SwapBaseInput と同じ。
計算 — 逆曲線と天井。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 によって署名されます。完全な creator_fees_token_0 および creator_fees_token_1 残高をクリエイターのトークンアカウントに転送し、両方のカウンターをゼロにします。両方のカウンターがゼロの場合、NoFeeCollect を返します。
CollectCreatorFeePermissionless
誰でもクリエイターフィー回収をトリガーできます。インストラクションは常に完全な蓄積残高を pool_state.pool_creator が所有する正規関連トークンアカウントに送信します。呼び出し元は別のクリエイターまたは宛先を選択できません。どちらかの ATA が不足している場合、ペイヤーがその作成に資金を提供します。
元の CollectCreatorFee は呼び出し可能なままなので、既存のクライアントは互換性を保ちます。
引数 — なし。
アカウント
効果
- すべての
creator_fees_token_0およびcreator_fees_token_1をプールボールトからクリエイター ATA に転送します。 - 両方のクリエイターフィーカウンターをゼロにし、
pool_state.recent_epochを更新します。 - 両方のカウンターがゼロの場合、
NoFeeCollectを返します。
UpdatePoolStatus
プール上の個別の操作を一時停止または再開します。status フィールドはビットマスクです:
引数
管理者キーは CPMM プログラムのアップグレード権限です。実際には、Raydium マルチシグです。
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 にバインドされたすべてのプール に影響します。マイグレーションなし。プールは単に新しい値を読み取ります。
状態変化マトリックス
次のステップ
products/cpmm/code-demos— 上記の実行可能な TypeScript サンプル。reference/error-codes— 完全な Anchor エラーテーブル。products/cpmm/fees—Collect*Feeインストラクションが排出するフィー蓄積モデル。

