本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
自 2026-07 升級起,AMM v4 的 OpenBook / Serum 依賴已被 移除 — 沒有指令再讀取或寫入 OpenBook 狀態。下列市場帳戶僅作為舊版 v1 指令佈局上的位置佔位符(被接受但忽略)以及
AmmInfo 上的參考欄位保留。請使用 V2 交換進入點,它們完全省略了這些帳戶。本頁仍將帳戶分組為「池擁有」和「OpenBook(舊版)」部分,以便閱讀較舊的交易。清單
AMM v4 池在建立時在AmmInfo 上記錄一個綁定的市場。完整情況如下:
注意:為了向後相容性,「serum」前綴在 AMM v4 的 IDL 和欄位名稱中保留。OpenBook 移除後,這些帳戶不再有功能。
AmmInfo
池的根狀態帳戶。大小(約 752 位元組),因為它內聯攜帶池和 OpenBook 參考。
結構 佈局未變(位元組相容),所以現有的反序列化器繼續工作,但在 OpenBook 移除後,上面標記為
已棄用 的欄位 不再被寫入 — swap_* 交易量計數器在其最後值處凍結。對於交易量分析,請使用交易日誌而不是這些欄位。只有 need_take_pnl_* 和 pool_open_time 被主動維護。coin_vault、pc_vault— 池的 SPL Token 金庫。根據 Serum/OpenBook 慣例,coin是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)設定。見下方的 Status。lp_amount— 池的內部 LP 總量。它不等於lp_mint.supply:它剛好高出一整個 LP 代幣(10^coin_decimals個基礎單位),因為該數量在初始化時被計入但從未鑄造。程式中所有按比例的數學都使用lp_amount,所以你也應該使用它。amm_owner— 在建立時從程式硬編碼的管理員密鑰寫入,而不是從建立者寫入。state_data.need_take_pnl_*— 累積總費用與已清掃費用之間的差值。TakePnl將這些清零。
OpenBook 接線
已移除。 OpenBook / Serum 依賴已從程式中刪除(2026-07 升級)。本部分描述的帳戶不再被驗證或使用。它們作為
AmmInfo 上的參考欄位和舊版 v1 指令佈局上的位置佔位符保留。使用 V2 交換進入點(SwapBaseInV2 / SwapBaseOutV2),它們完全跳過這些帳戶。SwapBaseIn / SwapBaseOut、Deposit 或 Withdraw 指令時,帳戶 計數 必須仍然符合舊佈局(市場帳戶佔據其歷史位置),但它們的 內容不再被檢查 — 不會針對它們發出 CPI。新程式碼應使用 V2 交換變體,它們根本不接受這些帳戶。
amm_open_orders 是一個 OpenBook 擁有的帳戶,在此市場上持有池的限價訂單狀態:活躍訂單、已結算餘額、推薦人等。amm_target_orders 是 AMM 側:它持有 AMM 的 預期 網格(每個訂單槽的價格/大小),以便程式可以廉價地與當前發佈的內容進行比較,並放置/取消差值。
授權 PDA
整個 AMM v4 程式恰好有一個amm_authority PDA。其種子很簡單(["amm authority"]),其 bump 存儲在每個 AmmInfo 上。此授權簽署所有 AMM v4 池的所有代幣移動。
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 上;衍生是一次性的好奇心。
不支援 Token-2022。程式為所有金庫移動硬編碼 SPL Token 的程式 ID。嘗試將 AMM v4 池綁定到 Token-2022 鑄幣,會在 Initialize2 時以 InvalidSplTokenProgram 失敗。
LP 鑄幣
一個經典的 SPL Token 鑄幣,其授權是amm_authority。總供應量追蹤 LP 對池的所有權;燃燒 LP 按比例從兩個金庫返回代幣。
狀態中確實有一個鏡像:AmmInfo.lp_amount。它不等於鑄幣的供應量 — 它剛好高出一整個 LP 代幣(10^coin_decimals 個基礎單位),因為該數量在初始化時被計入但從未鑄造。程式中每一項按比例的計算都除以 lp_amount,所以請使用該欄位,而不是鑄幣的鏈上供應量。
狀態
AmmInfo.status 是單一的列舉 u64 狀態,不是位掩碼。請用相等來測試它 — 用 status & 1 測試的客戶端會誤判每一個線上池,因為正常的交易狀態是 6,而它的第 0 位是 1。
Initialize2 在 open_time 位於未來時寫入 7,否則寫入 6;處於 7 的池會在 state_data.pool_open_time 當時或之後的第一次交換時把自己翻轉為 6。超出 0..=7 的值會讓 AmmStatus::from_u64 panic。
Raydium 多簽透過 SetParams(param = 0,即 Status)設定該狀態;只接受 1–7 的值。(AdminCancelOrders 已被移除。)
觀察 / 預言機
AMM v4 沒有專用的觀察帳戶,而且自從移除 OpenBook 之後,也不再有可以從中衍生觀察資料的掛單簿狀態。如果你需要具有程式支援的 Raydium TWAP,請使用 CPMM 或 CLMM — 兩者都維護一個ObservationState 環形緩衝區。否則,請在鏈下索引交換日誌。
從頭衍生池的帳戶
AMM v4 的池帳戶是以綁定市場為鍵的普通 PDA — 不是有種子的密鑰對,也不是每對一個的 PDA。它們每一個都在AMM_V4_PROGRAM_ID 之下使用相同的三種子形狀 [AMM_V4_PROGRAM_ID, market, <label>]:
raydium-sdk-v2 的 Liquidity.getAssociatedPoolKeys。
實際上,整合者從 GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> 或 SDK 讀取池的完整帳戶集。手動衍生很少需要。
生命週期快速參考
池及其帳戶無限期地持續。即使流動性完全提取,
AmmInfo 仍然存在。
在哪裡讀取什麼
- 數學和費用算術:
products/amm-v4/math。 - 費用分割以及它與 CPMM/CLMM 的比較:
products/amm-v4/fees。 - 指令帳戶列表:
products/amm-v4/instructions。 - OpenBook 帳戶衍生:OpenBook 程式原始碼(
github.com/openbook-dex/program) — 一個 Rust monorepo,而非文字說明文件。
- Raydium AMM 程式 —
raydium-io/raydium-amm reference/program-addresses用於規範程式 ID- OpenBook / Serum 協議用於對方帳戶

