メインコンテンツへスキップ

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 による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
AMM v4 は、すべての操作が OpenBook 状態に接触するため、CPMM や CLMM よりも大幅にアカウント数が多くなります。このページではアカウントを「プール所有」と「OpenBook 所有」のセクションに分けており、インテグレータは各側がどちらなのかをすぐに確認できます。

インベントリ

AMM v4 プールは、作成時に正確に 1 つの OpenBook マーケットにバインドされます。現在の全体像は以下の通りです:
カテゴリアカウントオーナー役割
PoolAmmInfoAMM v4 プログラムプール状態:累積フィー、ステータス、ボルト・OpenBook マーケットへの参照。
Poolamm_authorityAMM v4 プログラムボルト移動に署名するプログラム所有 PDA。すべての AMM v4 プール全体で共有。
Poolamm_open_ordersOpenBookこのマーケット用のプールの OpenBook OpenOrders アカウント。
Poolamm_target_ordersAMM v4 プログラムOpenBook に戻すターゲットリミットオーダーのプール側グリッド。
Poolpool_coin_token_accountSPL Tokenプールのコイン側ボルト(amm_authority の ATA)。
Poolpool_pc_token_accountSPL Tokenプールの pc 側ボルト。
Poollp_mintSPL TokenFungible LP ミント。
Poolpool_withdraw_queueAMM v4 プログラム遅延引き出しのレガシーキュー;ゼロ長で保持。
Poolpool_temp_lpAMM v4 プログラムInitialize 中に使用される補助 LP アカウント。
Market (OpenBook)serum_marketOpenBookマーケット自体(ベース/クォート ミント、ボルト署名者など)。
Marketserum_bids, serum_asksOpenBookビッド・アスク キュー。
Marketserum_event_queueOpenBook保留中のイベント(約定、キャンセル)。
Marketserum_coin_vault, serum_pc_vaultSPL TokenOpenBook のマーケット レベル ボルト。
Marketserum_vault_signerOpenBookserum_*_vault 移動に署名するマーケット レベル PDA。
注:「serum」プレフィックスは後方互換性のため AMM v4 の IDL とフィールド名に保持されています。これは現在の OpenBook マーケットを指します。

AmmInfo

プールのルート状態アカウント。プール参照と OpenBook 参照の両方をインラインで含んでいるため、大きいです(≈ 752 バイト)。
// programs/amm/src/state.rs (abridged; field order / names follow the IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump used to derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // internal state machine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // mirrors OpenBook market
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // trade/protocol/fund fee rates
    pub state_data: StateData,

    // Pool-owned accounts:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // pool's OpenOrders on OpenBook
    pub market: Pubkey,        // OpenBook market
    pub market_program: Pubkey, // OpenBook program ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // admin (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → used by OpenBook integration
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protocol's share OF the swap fee
    pub pnl_denominator:          u64,     // 100 → so 12/100 = 12% of fee, = 0.03% of volume
    pub swap_fee_numerator:       u64,     // 25  → 0.25% gross swap fee
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
インテグレータ向けフィールド:
  • coin_vaultpc_vault — プールの SPL Token ボルト。Serum/OpenBook の慣例により、cointoken_0(ベース)、pctoken_1(クォート)です。
  • coin_decimalspc_decimals — ミントに合致します。
  • open_orderstarget_ordersmarket — すべてのスワップ/デポジット/引き出し命令に渡す必要があります。
  • fees.swap_fee_numerator / swap_fee_denominator — 統合トレード フィー。デフォルトは 25 / 10_000 = 0.25%
  • status — 操作をゲートするビットマスク。AdminSetStatus 経由で管理者が設定可能。
  • state_data.need_take_pnl_* — 総累積フィーとスイープされた額との差分。TakePnl がこれらをゼロにします。

OpenBook 配線

非アクティブ。 AMM v4 プールは OpenBook にリクイディティを共有しなくなりました—リミット オーダー グリッドは無効化されています。このセクションで説明されている OpenBook アカウントは、各プールの AmmInfo に残っており、V1 スワップ エンドポイント(および InitializeDepositWithdraw)で後方互換性のために検証されていますが、実際には参照されるオン ブック状態は空です。V2 スワップ エンドポイントSwapBaseInV2 / SwapBaseOutV2)を使用してください。これらはこれらのアカウントをまったく必要としないため、今日の標準的な実行パスを表します。
AMM v4 プール上で V1 読み書き命令を呼び出す場合、OpenBook アカウントを渡す必要があります。プログラムがこれらを再導出して検証するため、不正確なセットを渡すと元に戻ります。(V2 スワップ変形はこれらのアカウントをまったく必要としません。)
const market = ...;  // OpenBook market PublicKey

// Fields OpenBook exposes on its market account:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
AMM の amm_open_orders は OpenBook 所有アカウントで、このマーケット上のプールのリミット オーダー状態を保有しています:アクティブなオーダー、決済残高、リファラーなど。amm_target_orders は AMM 側です:プログラムが現在ポストされているものと安価に比較でき、差分をプレイス/キャンセルできるように、AMM の意図されたグリッド(各オーダー スロットの価格/サイズ)を保有しています。

オーソリティ PDA

AMM v4 プログラム全体で正確に 1 つの amm_authority PDA があります。そのシード は簡単(["amm authority"])で、そのバンプはすべての AmmInfo に保存されています。このオーソリティはすべての AMM v4 プールのすべてのトークン移動に署名します。
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
OpenBook 操作に署名するために、プールごとに導出される独立したプール スコープオーソリティがあります(上記の amm_authority は実際にはこのプログラムの設計では両方をカバーしていますが、異なるバージョンは異なる導出を使用したため、コードで特定のプールの AmmInfo.nonce を確認してください)。

ボルト

プールの SPL Token ボルトは、オーナーが amm_authority である標準的なトークン アカウントです。ATA ではありません—それらのアドレスは ["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id] シードで Initialize で導出される特定の PDA です。アドレスは AmmInfo に保存されています;導出は 1 回限りの curiosity です。 Token-2022 はサポートされていません。プログラムはすべてのボルト移動に対して SPL Token のプログラム ID をハードコードしています。Token-2022 ミント に AMM v4 プールをバインドしようとすると、Initialize で失敗します。

LP ミント

オーソリティが amm_authority である classic SPL Token ミント。総供給はプール内の LP 所有権を追跡します;LP を burn するとトークンを両方のボルトから比率通りに返します。AMM v4 は CPMM より前の時代のため、プール状態には lp_supply ミラーはありません—ミントのオン チェーン供給を直接読んでください。

ステータス ビットマスク

AmmInfo.status は操作をゲートします。ビット(位置はプログラム バージョン全体で異なる場合があります—ソースで確認してください):
ビットフラグエフェクト
0SWAP_DISABLEDSwap* が拒否します。
1DEPOSIT_DISABLEDDeposit が拒否します。
2WITHDRAW_DISABLEDWithdraw が拒否します。
3CLMM_LIKE_MIGRATEops によって使用されるマイグレーション ゲート フラグ。
Raydium マルチシグは AdminCancelOrdersAdminSetParams などで これらを設定します。

Observation / オラクル

AMM v4 には専用の observation アカウントがありません。 オン チェーン TWAP が必要な他のプロトコルは、通常は OpenBook のブック クロッシングを間接的に使用するか、オフ チェーンを読みます。プログラム サポートで Raydium TWAP が必要な場合は、CPMM または CLMM を使用してください。

スクラッチからプールのアカウントを導出する

AMM v4 は決定的なペアごとの PDA 用に設計されていなかった(Solana の慣例より前)ため、標準的な amm_id は以下でシードされた keypair です:
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
amm_open_ordersamm_target_ordersamm_withdraw_queuepool_temp_lppool_coin_token_accountpool_pc_token_accountlp_mint にも同じ seeded-key パターンが適用されます。SDK と API がこれらを事前計算しています;raydium-sdk-v2Liquidity.getAssociatedPoolKeys を参照してください。 実装では、インテグレータは GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> またはSDK からプールの全アカウント セットを読みます。手動導出が必要なことはほとんどありません。

ライフサイクル クイック リファレンス

イベント作成されたアカウント破棄されたアカウント
Initialize2amm_infoamm_open_ordersamm_target_orders、ボルト、lp_mintpool_withdraw_queuepool_temp_lp
Deposit—(ユーザー LP ATA を作成する可能性)
Withdraw
SwapBaseIn / SwapBaseOut—(ユーザー ATA を作成する可能性)
TakePnl
MonitorStep(crank)
プールとそのアカウントは無期限に存続します。リクイディティが完全に引き出されても、AmmInfo は残ります。

どこで何を読むか

ソース: