本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
自 2026-07 程式升級起,AMM v4 的 OpenBook / Serum 依賴已被移除。舊版 v1 的
SwapBaseIn / SwapBaseOut、Deposit 和 Withdraw 指令保持原有帳戶配置以維持向後相容性:市場帳戶仍在原位置被接受,但不再被驗證或使用(不發出 CPI)。新的整合應使用 V2 交換進入點,其完全省略市場帳戶。多個指令已被移除並現在會回復 — 請參閱變更日誌條目。下方帳戶列表使用 Raydium SDK 的欄位名稱;底層 IDL 有時使用 serum_* 前綴。指令清單
SDK 僅公開使用者面向指令的建構器。維護指令通常由 Raydium 維護者調用。
已移除 / 不再可調用(現在會以
unimplemented! 回復,其用戶端建構器已刪除):Initialize(標籤 0,使用 Initialize2)、MonitorStep(2)、MigrateToOpenBook(5)、WithdrawSrm(8)、PreInitialize(10,使用 Initialize2)、SimulateInfo(12)、AdminCancelOrders(13)。
Initialize2
啟動綁定到現有 OpenBook 市場的新 AMM v4 流動性池。
參數
W、簽署者 S)
後置條件
lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN,其中INIT_BURN≈ 100 LP 單位保留在流通外。- 未發佈任何 OpenBook 訂單(訂單簿網格已移除)。
market_program/market仍被傳遞但僅作為參考欄位儲存;coin_lot_size/pc_lot_size/min_size初始化為0。
InvalidInput(小數位不匹配、未排序)、NotAllowed。
Deposit
增加流動性。
參數
數學 — 標準按比例分配。使用流動性池的有效準備金(金庫 + 帳簿上),SDK 計算產生給定 LP 數量的 coin/pc 對,並根據
max_* 檢查。如果任一邊超過上限,則以 ExceededSlippage 回復。
Withdraw
銷毀 LP,接收雙邊資產。
參數
Deposit,方向相反;lp_mint 可寫用於銷毀,使用者 ATA 是接收者。帳戶配置不變(市場帳戶仍按位置傳遞,被忽略)。不再有任何從 OpenBook 結算的步驟 — 按比例分配數學直接使用金庫餘額。
SwapBaseIn
精確輸入交換。始終是AMM 路徑交換(不通過 OpenBook 配對路由)。
新程式碼應使用 V2 變體。 由於 AMM v4 的 OpenBook 依賴已被移除,V1 進入點(
SwapBaseIn、SwapBaseOut)仍期望完整的 17 帳戶列表(或 18 個含可選的 target-orders 帳戶),但 OpenBook/市場帳戶現在按位置被接受並忽略 — 它們不被驗證且不發出 CPI。傳遞錯誤的帳戶數量仍會以 WrongAccountsNumber 回復,但市場帳戶內容不再被檢查。新的整合應使用 SwapBaseInV2 / SwapBaseOutV2,其採用更小的帳戶列表,代表當今的規範執行路徑。V1 形式在此記錄以供完整性和閱讀現有鏈上交易。
數學 — 見
products/amm-v4/math。
前置條件
amm.status允許交換(狀態位掩碼的第 0 位未設置)。amm.state_data.pool_open_time <= now。amount_in > 0。user_source_token_account持有至少amount_in。
- 使用者失去
amount_in的源代幣,獲得amount_out ≥ minimum_amount_out的目標代幣。 need_take_pnl_*按協議費用份額遞增。- 注意:
state_data.swap_*_in_amount/swap_*_out_amount分析計數器不再更新 — 其值被凍結。使用交易日誌進行交易量分析。
ExceededSlippage、InvalidInput、InvalidStatus、NotAllowed(coin/pc 鑄幣相同)。
SwapBaseOut
精確輸出,SwapBaseIn 的反向。相同帳戶。
參數
SwapBaseInV2 / SwapBaseOutV2
變體交換進入點(標籤 16 / 17),完全跳過 OpenBook 帳戶。數學與 V1 路徑相同,但帳戶列表縮小到僅 AMM 側和使用者 — 8 個帳戶,且不傳遞 amm_open_orders:
流動性池準備金現在是金庫餘額(減去待處理 PnL),所以報價數學直接且與 v1 路徑相同。使用 V2 以節省計算並避免傳遞(現在被忽略的)市場帳戶。Raydium 路由器在通過 AMM v4 路由時始終使用 V2 形式。
參數與 V1 形式相同(
SwapBaseInV2 的 amount_in / minimum_amount_out;SwapBaseOutV2 的 max_amount_in / amount_out)。
MonitorStep 和其他已移除的指令
歷史上,MonitorStep 啟動流動性池的 OpenBook 互動:它結算已填充的訂單(通過 OpenBook CPI 將收益從市場金庫移至流動性池金庫)、取消陳舊訂單,並發佈新訂單以縮小 target_orders 和 amm_open_orders 之間的差距。隨著 OpenBook 依賴的移除,沒有任何東西需要啟動,指令已消失。任何仍調用它的維護者或整合必須移除該調用。
WithdrawPnl / TakePnl
累積協議費用的管理員清掃。
參數
WithdrawPnl不接受參數;它讀取need_take_pnl_*並移動那些確切的數量。
效果
- 從
pool_coin_token_account轉移need_take_pnl_coin到pnl_coin_token_account。 - pc 相同。
- 將
need_take_pnl_coin和need_take_pnl_pc歸零。 - 邏輯變更:如果金庫餘額不足以覆蓋累積 PnL,指令直接返回
TakePnlError(它不再操縱訂單簿狀態)。
SetParams
管理員參數變更,由 Raydium 多簽調用。參數是 param: u8 標籤 + 有效負載。
狀態變更矩陣
OpenBook 欄已消失 — 沒有指令再觸及訂單簿。後續步驟
products/amm-v4/code-demos— 交換和 LP 流程的 TypeScript 範例。products/amm-v4/fees—WithdrawPnl詳情和費用分割。reference/error-codes— 前向參考表(AMM v4 錯誤列在該頁面上)。
- Raydium AMM 程式 —
raydium-io/raydium-amm - Raydium SDK v2
Liquidity模組 - OpenBook 程式 — 市場側帳戶驗證

