メインコンテンツへスキップ
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →

インストラクション概要

ステータスビットマスク:各プールの statusu8 で、ビット 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 = 署名者) * 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

プールに比例する両トークンで流動性を追加。 引数
アカウント 数学
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 トークンをバーン、両基礎トークンを按分で受け取ります。 引数
アカウント 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
一般的エラー
  • ExceededSlippageamount_out < minimum_amount_out
  • ZeroTradingTokens — トレードが 0 に丸める。
  • NotApprovedUpdatePoolStatus でプールがスワップ一時停止。
  • InvalidInput — ミントがプールボルトのいずれとも一致しない。

SwapBaseOutput

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

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 = 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 にバインドされた すべてのプール に次のスワップで影響。マイグレーションなし;プールは単に新値を読み込み。

状態変更マトリックス

次へ進む

ソース: