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 による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
CPMMのプログラムIDとPDAシードは
reference/program-addresses に正規に記載されています。このページは各アカウントの役割と維持する不変量に焦点を当てており、ハードコードされたアドレスについては扱いません。CPMMプールの6つのアカウント
すべてのCPMMプールは、CPMMプログラム傘下の6つのプログラム派生アドレス(PDA)と、その1つが参照する共有AmmConfigアカウントで完全に記述されます。2つのミントがあれば、ネットワークに接触することなく、すべてを決定論的に導き出せます。
| アカウント | シード | 所有者 | 目的 |
|---|---|---|---|
authority | "vault_and_lp_mint_auth_seed" | CPMM | すべてのボルト移動とすべてのLPミント/バーン操作の署名者。すべてのCPMMプール間で共有。 |
poolState | "pool"、ammConfig、token0Mint、token1Mint または 任意の署名者提供のランダムキーペア | CPMM | プールの状態構造体 — ミントペア、ボルト残高、LP供給量、フィーの蓄積、observationポインタ。CPMM Initialize 命令は、4つのシードから導き出された正規PDA または 作成者が署名した任意のキーペアのいずれかを受け入れます。ランダムキーペアパスは、敵がメモプールを監視して正規PDAを正当な作成者より先に占有しようとするフロントランニング攻撃を回避するために存在します。 |
lpMint | "pool_lp_mint"、poolState | SPL Token | プールのLPトークン。供給量 = 発行済みLP総額。ミント権限 = CPMMのauthority PDA。 |
vault0 | "pool_vault"、poolState、token0Mint | SPL Token / Token-2022 | プールのtoken0残高を保有。authorityPDAが所有。 |
vault1 | "pool_vault"、poolState、token1Mint | SPL Token / Token-2022 | プールのtoken1残高を保有。authorityPDAが所有。 |
observation | "observation"、poolState | CPMM | TWAPに使用される価格サンプルのリングバッファ。すべてのスワップで書き込み。 |
| アカウント | シード | 所有者 | 目的 |
|---|---|---|---|
ammConfig | "amm_config"、index: u16 | CPMM | トレード/プロトコル/ファンド/クリエイターのフィーレートと管理者キーを保有。「フィーティア」ごと1つ。PoolStateは作成時に1つにバインドされ、その後変更できない。 |
2つのミントだけからプールを導き出す
プールIDは必ずしも正規PDAではありません。
Initialize は、上記のPDAに加えて、任意の署名者キーペアを pool_state として受け入れます。渡されたアカウントが正規PDAと一致しない場合、プログラムは署名者である必要があります。つまり、作成者は署名する新しいキーペアを渡します。これはフロントラン対策です:正規PDAをつかもうとしているサードパーティは、正当な作成者がランダムキーペアを代わりに使用することで回避できます。下流のPDA(lpMint、vault0、vault1、observation)はまだ poolState.key() から導き出されるため、使用されたアドレスに関わらず一意のままです。プールにインデックスを付けるときは、正規PDAを導き出すことではなく、オンチェーン状態からプールIDを常に検出してください(例:CPMMプログラム傘下の PoolState アカウント)。後者はランダムキーペアプールを見逃します。アカウントレイアウト
完全なRust定義はraydium-cp-swap ソースに存在します。以下のフィールドは、統合時に読み取るフィールドです。
PoolState
lp_supply— プールのLPミント供給量の内部ミラー。LP シェア計算に使用します。値はミントのオンチェーン供給量と一致するはずですが、PoolStateから読み取ることで、追加のアカウント取得を回避できます。protocol_fees_token{0,1}、fund_fees_token{0,1}— 蓄積された未実行フィー。これらはスワップ価格に影響しません。CollectProtocolFee/CollectFundFeeが呼び出されるまでボルトに残ります。status—Swap、Deposit、Withdrawが許可されているかどうかを制御するビットマスク。UpdatePoolStatus経由で管理者が更新。SDKはトランザクション構築前にこれをチェックします。直接CPIを実行している場合は、自分でチェックしてください。token0_program/token1_program— 各ボルトのためにCPIを実行するトークンプログラム。1つはSPL Tokenで、もう1つはToken-2022の場合があります。これらは独立しています。open_time— Unixタイムスタンプ。この時刻前のスワップは失敗します。デポジットはopen_time前に許可されるため、プールをシードできます。creator_fee_on/enable_creator_fee— クリエイターフィーがこのプール用にアクティブなかどうか、およびスワップのどちら側から集められるかを制御します。enable_creator_fee == falseはクリエイターフィーパスを完全にゼロにします。有効な場合、creator_fee_onは以下を選択します:0= スワップ入力であるトークンからのフィー取得(BothToken);1=token_0のみからのフィー取得(token_1 → token_0スワップをスキップ);2=token_1のみからのフィー取得。プール作成時にInitializeWithPermissionで設定;その後変更不可。creator_fees_token_{0,1}— 蓄積されたクリエイターフィー。CollectCreatorFeeで実行。
AmmConfig
trade_fee_rateとcreator_fee_rateは取引量の分数で、両者とも1/1_000_000単位で表示されます。2500は取引量の0.25%を意味します。protocol_fee_rateとfund_fee_rateはトレード フィーの分数 (取引量の分数ではなく)で、同じ1/1_000_000分母を使用します。クリエイターフィーはトレード フィーの分数ではなく、独立したレートです。完全な計算はproducts/cpmm/feesにあります。indexはu16であるため、シードハッシュは2バイトのビッグエンディアンを使用します。バイト順の1ずれは一般的な統合バグです。AmmConfigはプールレベルで不変です。 プールは作成時に1つのAmmConfigを指してから、切り替わることはありません。フィー変更は、プールがスワップのたびに設定を読み取るため伝播しますが、プールはフィーティア間で移動できません。
creator_fee_rate)は AmmConfig に存在し、フィーティア間で共有されます。特定のプールが実際にそれを請求するかどうか(enable_creator_fee)、およびスワップのどちら側に着地するか(creator_fee_on)は PoolState に存在します。クリエイターフィーはトレード フィーの独立したもので、独立したレート、独立したカウンター(creator_fees_token_{0,1})を備えており、LP/プロトコル/ファンドのトレード フィーシェアを削減することはありません。実行は CollectCreatorFee を通じて行われます。完全なメカニクスについては products/cpmm/fees を参照してください。
Permission
InitializeWithPermission で使用される小さなアクセス制御アカウント。CPMMプログラムは、他のプログラム(例えば、トークンをCPMMに卒業させるときのLaunchLab)が与えられた AmmConfig に対してプールを作成できることを証明するための、許可されたプール作成パスをサポートしています。
CreatePermissionPda を通じて作成され、ClosePermissionPda を通じて取り消されます。エンドユーザーはこのアカウントと直接やり取りしません。これはクロスプログラムフロー用の配管です。
ボルトとToken-2022
vault0 と vault1 はCPMMのauthority PDAが所有し、それらのトークンプログラム所有者(token_program)はSPL TokenまたはToken-2022で、プール作成時にミントのプログラムによって決定されます。プールは2つのケースを透過的に処理し、Swap / Deposit / Withdraw 命令アカウントで各側の正しいトークンプログラムIDを渡します。
CPMMはプール作成時に厳密な拡張許可リストを強制します(utils/token.rs の is_supported_mint)。Token-2022ミントはCPMMプールで使用でき、それがすべての拡張機能がこのリストに含まれている場合に限ります:
TransferFeeConfig。 ミントが転送のたびに適用。プールはSwapBaseInputデポジット側の受信側で、引き出し側の送信側です。プログラムはボルトに着地するネット金額を計算し、曲線をそれに応じて設定します。algorithms/token-2022-transfer-feesを参照してください。MetadataPointerおよびTokenMetadata。 ミント上の標準メタデータ。スワップ計算への影響なし。InterestBearingConfig。 ミントのUI金額は利息が蓄積。ボルトは生の金額を格納し、曲線は生の金額のみで動作します。APRを表示するUI は、Token-2022ヘルパーを呼び出してUI金額をレンダリングする必要があります。ScaledUiAmount。 UI表示スケーリング拡張機能。InterestBearingConfigと同じ扱い — 曲線は生の金額を使用します。
PermanentDelegate、TransferHook、DefaultAccountState、NonTransferable、ConfidentialTransfer、Group/GroupMember、MintCloseAuthority など — は Initialize が NotSupportMint で拒否されます。例外は、プログラムのハードコードされた小さなミントホワイトリスト(いくつかの特定のpubkeys)で、拡張チェックをバイパスします。これはケースバイケースで特定のミントをオンボードするために使用されます。
ベットされた拡張リストとミントホワイトリストは、CP-Swapソースの programs/cp-swap/src/utils/token.rs に存在し、将来のプログラムアップグレードで変更される可能性があります。
Observation
observationアカウントはObservationState エントリのリングバッファで、各エントリは block_timestamp と累積価格を格納します。スワップのたびに、最後のスワップ以降に十分な時間が経過している場合、プログラムは新しいobservationを追加します。TWAPは2つのobservationを読み、Δcumulative / Δtime を計算することで計算されます。
ObservationState PDAは約4,100バイトです。
2つのコンシューマー規則:
- 単一observationを価格として使用しないでください。 それは累積であって、スポット価格ではありません。TWAPを計算するため、2つを使用してください。
- 少なくとも1ブロック離れたobservationを選択してください。 同じブロック内のスワップは新しいobservationを生成しない場合があります。連続読み取りは同じレコードを返すことがあります。
products/clmm/accounts にあります。
アカウントライフサイクル
| イベント | 作成されたアカウント | 削除されたアカウント |
|---|---|---|
Initialize | poolState、lpMint、vault0、vault1、observation | — |
Deposit | — (ユーザーLP ATAが作成される可能性あり) | — |
Withdraw | — | — |
Swap | — (ユーザー宛先ATAが作成される可能性あり) | — |
CollectProtocolFee | — | — |
CollectFundFee | — | — |
UpdatePoolStatus | — | — |
poolState は残ります。これは意図的です:後で同じプールを再シードすることは、その履歴observationバッファを保持し、そのPDA導出の安定性を保ちます。
どこで何を読むか
- 命令アカウント一覧(上記のうち各命令に対して書き込み可能/署名者であるもの):
products/cpmm/instructions。 - フィー蓄積セマンティクス:
products/cpmm/fees。 - スワップ計算 / observation更新規則:
products/cpmm/math。 - 正規シード / プログラムID:
reference/program-addresses。


