Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
2026-07 アップグレード以降、AMM v4 の OpenBook / Serum 依存関係は 削除されました — 命令がもう OpenBook の状態を読み書きすることはありません。以下のマーケット アカウントは、レガシー v1 命令レイアウト上の位置プレースホルダーとして(受け入れられるが無視される)、および AmmInfo の参照フィールドとしてのみ保持されます。V2 スワップ エントリポイントを使用してください。これらのアカウントを完全に省略します。このページは、古いトランザクションを読むために、アカウントを「プール所有」と「OpenBook(レガシー)」セクションにグループ化しています。

インベントリ

AMM v4 プールは作成時に 1 つのバインドされたマーケットを AmmInfo に記録します。全体像は以下の通りです: 注:「serum」プレフィックスは、後方互換性のため AMM v4 の IDL とフィールド名に保持されています。これらのアカウントは OpenBook 削除後、もう機能していません。

AmmInfo

プールのルート状態アカウント。プールと OpenBook 参照の両方をインラインで保持するため、大きい(≈ 752 バイト)です。
構造体の レイアウトは変更されていません(バイト互換)ため、既存のデシリアライザーは動作し続けますが、OpenBook 削除後、上記の DEPRECATED とマークされたフィールドは もう書き込まれません — swap_* ボリューム カウンターは最後の値で凍結されます。ボリューム分析には、これらのフィールドではなくトレード ログを使用してください。need_take_pnl_* と pool_open_time のみがアクティブに保持されます。
インテグレーター向けフィールド:
  • coin_vault、pc_vault — プールの SPL Token ボルト。coin は Serum/OpenBook 規約により token_0(ベース)、pc は token_1(クォート)です。
  • coin_decimals、pc_decimals — ミントに対応します。
  • open_orders、target_orders、market — レガシー参照フィールド。AmmInfo には今も存在し、v1 命令レイアウトでは今も位置的に渡されますが、プログラムはもう読み取りも検証もしません。V2 スワップ エントリポイントはこれらを省略します。
  • fees.swap_fee_numerator / swap_fee_denominator — 合計トレード フィー。デフォルト 25 / 10_000 = 0.25%。
  • status — 操作をゲートする単一の列挙された u64 状態であり、ビットマスクでは ありません。SetParams の param = 0(Status)経由で管理者が設定可能です。下記のステータスを参照してください。
  • lp_amount — プール内部の LP 合計。これは lp_mint.supply と等しく ありません:ちょうど LP トークン 1 枚分(10^coin_decimals ベース単位)だけ大きい値です。その分は init 時に計上されるものの、実際にはミントされないためです。プログラム内のすべての比例計算は lp_amount を使用するため、あなたもこれを使用してください。
  • amm_owner — 作成時に、クリエーターではなくプログラムにハードコードされた管理者キーから書き込まれます。
  • state_data.need_take_pnl_* — 蓄積された総フィーと掃引されたもの間のデルタ。TakePnl はこれらをゼロにします。

OpenBook 配線

削除されました。 OpenBook / Serum 依存関係はプログラムから削除されました(2026-07 アップグレード)。このセクションで説明されているアカウントはもう検証または使用されません。AmmInfo の参照フィールドおよびレガシー v1 命令レイアウトの位置プレースホルダーとして残ります。V2 スワップ エントリポイント(SwapBaseInV2 / SwapBaseOutV2)を使用してください。これらのアカウントを完全にスキップします。
レガシー v1 SwapBaseIn / SwapBaseOut、Deposit、または Withdraw 命令を呼び出すとき、アカウント 数 は古いレイアウトと一致する必要があります(マーケット アカウントは歴史的位置を占めます)が、その 内容はもう確認されません — CPI は発行されません。新しいコードは V2 スワップ バリアントを使用する必要があります。これらはこれらのアカウントをまったく取りません。
AMM の amm_open_orders は OpenBook 所有のアカウント。このマーケット上のプールのリミット オーダー状態を保持します:アクティブなオーダー、決済残高、リファラーなど。amm_target_orders は AMM 側:プログラムが現在ポストされているものと安価に比較でき、差分をプレイス / キャンセルできるように、AMM の 意図された グリッド(各オーダー スロットの価格/サイズ)を保持します。

オーソリティ PDA

AMM v4 プログラム全体に対して、正確に 1 つの amm_authority PDA があります。そのシードは単純です(["amm authority"])。そのバンプはすべての AmmInfo に保存されます。このオーソリティはすべての AMM v4 プールのすべてのトークン移動に署名します。
2 つ目のプール スコープのオーソリティは存在しません:この 1 つの PDA が、プログラムが署名するすべてをカバーします。そのバンプはメインネットでは 254 で、すべての AmmInfo の nonce にミラーされます。WithdrawExcessLamports はその nonce をハードコードして再導出します。

ボルト

プールの SPL Token ボルトは、owner が amm_authority である標準的なトークン アカウントです。ATA ではありません — それらのアドレスは Initialize2 の時点で [AMM_V4_PROGRAM_ID, market, "coin_vault_associated_seed"] および [AMM_V4_PROGRAM_ID, market, "pc_vault_associated_seed"] から導出される PDA です。ミントはシードではなく、amm_id もシードではありません。アドレスは AmmInfo に保存されます。導出は 1 回限りの好奇心です。 Token-2022 は サポートされていません。プログラムはすべてのボルト移動に対して SPL Token のプログラム ID をハードコードします。AMM v4 プールを Token-2022 ミントにバインドしようとすると、Initialize2 で InvalidSplTokenProgram により失敗します。

LP ミント

オーソリティが amm_authority である古典的な SPL Token ミント。総供給はプールの LP 所有権を追跡します。LP を焼却すると、両方のボルトからトークンが比例的に返されます。 状態内のミラーは 存在します:AmmInfo.lp_amount です。これはミントの供給とは等しくありません — ちょうど LP トークン 1 枚分(10^coin_decimals ベース単位)だけ大きい値です。その分は init 時に計上されるものの、実際にはミントされないためです。プログラム内のすべての比例計算は lp_amount で除算するため、ミントのオンチェーン供給ではなくこのフィールドを使用してください。

ステータス

AmmInfo.status は単一の列挙された u64 状態であり、ビットマスクでは ありません。等価性でテストしてください — status & 1 でテストするクライアントは、通常のトレード状態が 6 でビット 0 が立っているため、稼働中のプールをすべて誤分類します。 Initialize2 は open_time が未来なら 7、そうでなければ 6 を書き込みます。7 のプールは state_data.pool_open_time 以降の最初のスワップで自身を 6 に切り替えます。0..=7 の範囲外の値は AmmStatus::from_u64 をパニックさせます。 Raydium マルチシグは SetParams の param = 0(Status)経由で状態を設定します。受け付けられる値は 1〜7 のみです。(AdminCancelOrders は削除されました。)

オブザベーション / オラクル

AMM v4 には専用のオブザベーション アカウントがありません。また、OpenBook の削除以降、それを導出できるオーダーブックの状態も存在しません。プログラム サポート付きの Raydium TWAP が必要な場合は、CPMM または CLMM を使用してください — どちらも ObservationState リング バッファを維持しています。それ以外の場合は、スワップ ログをオフチェーンでインデックスしてください。

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

AMM v4 のプール アカウントは、バインドされたマーケットをキーとする素の PDA です — シード キーペアでも、ペアごとの PDA でもありません。そのすべてが AMM_V4_PROGRAM_ID の下で同じ 3 シード構造 [AMM_V4_PROGRAM_ID, market, <label>] を使用します:
バインドされたマーケットが唯一の可変シードであり、そのため 1 つのマーケットはちょうど 1 つの AMM v4 プールに対応します。SDK と API はこれらを事前計算します。raydium-sdk-v2 の Liquidity.getAssociatedPoolKeys を参照してください。 実際には、インテグレーターは GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> または SDK からプールの完全なアカウント セットを読み取ります。手動導出はめったに必要ありません。

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

プールとそのアカウントは無期限に存続します。流動性が完全に引き出されても、AmmInfo は残ります。

どこで何を読むか

ソース: