Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
自 2026-07 程式升級起,AMM v4 的 OpenBook / Serum 依賴已被移除。舊版 v1 的 SwapBaseIn / SwapBaseOutDepositWithdraw 指令保持原有帳戶配置以維持向後相容性:市場帳戶仍在原位置被接受,但不再被驗證或使用(不發出 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 進入點(SwapBaseInSwapBaseOut)仍期望完整的 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 分析計數器不再更新 — 其值被凍結。使用交易日誌進行交易量分析。
常見錯誤ExceededSlippageInvalidInputInvalidStatusNotAllowed(coin/pc 鑄幣相同)。

SwapBaseOut

精確輸出,SwapBaseIn 的反向。相同帳戶。 參數

SwapBaseInV2 / SwapBaseOutV2

變體交換進入點(標籤 16 / 17),完全跳過 OpenBook 帳戶。數學與 V1 路徑相同,但帳戶列表縮小到僅 AMM 側和使用者 — 8 個帳戶,且不傳遞 amm_open_orders 流動性池準備金現在是金庫餘額(減去待處理 PnL),所以報價數學直接且與 v1 路徑相同。使用 V2 以節省計算並避免傳遞(現在被忽略的)市場帳戶。Raydium 路由器在通過 AMM v4 路由時始終使用 V2 形式。 參數與 V1 形式相同(SwapBaseInV2amount_in / minimum_amount_outSwapBaseOutV2max_amount_in / amount_out)。

MonitorStep 和其他已移除的指令

已移除 — 不再可調用。 自 2026-07 升級起,MonitorStep(標籤 2)已從程式中移除,如果被調用現在會回復unimplemented!)。其用戶端建構器也被刪除。同樣適用於 MigrateToOpenBook(5)、WithdrawSrm(8)、SimulateInfo(12)、AdminCancelOrders(13)以及舊版 Initialize(0)/ PreInitialize(10)流動性池建立進入點 — 改用 Initialize2
歷史上,MonitorStep 啟動流動性池的 OpenBook 互動:它結算已填充的訂單(通過 OpenBook CPI 將收益從市場金庫移至流動性池金庫)、取消陳舊訂單,並發佈新訂單以縮小 target_ordersamm_open_orders 之間的差距。隨著 OpenBook 依賴的移除,沒有任何東西需要啟動,指令已消失。任何仍調用它的維護者或整合必須移除該調用。

WithdrawPnl / TakePnl

累積協議費用的管理員清掃。 參數
  • WithdrawPnl 不接受參數;它讀取 need_take_pnl_* 並移動那些確切的數量。
破壞性變更(僅限管理員)。 帳戶列表從 17(+1 可選)減少到 10amm_open_orders 和全部六個市場帳戶被移除 — 無相容性解析。舊配置錯位(舊 #5 是 amm_open_orders,現在是 pool_coin_token_account)並以 InvalidCoinVault 等錯誤失敗。管理員工具必須更新。
帳戶(新 10 帳戶配置) 效果
  • pool_coin_token_account 轉移 need_take_pnl_coinpnl_coin_token_account
  • pc 相同。
  • need_take_pnl_coinneed_take_pnl_pc 歸零。
  • 邏輯變更:如果金庫餘額不足以覆蓋累積 PnL,指令直接返回 TakePnlError(它不再操縱訂單簿狀態)。
由於累積 PnL 已從不變量中排除,準備金無變化。

SetParams

管理員參數變更,由 Raydium 多簽調用。參數是 param: u8 標籤 + 有效負載。
破壞性變更(僅限管理員)。 帳戶列表被減少到僅 [amm (W), admin (S)](權限、open-orders、target-orders、金庫和所有市場帳戶被移除)。param 列舉被重新編號和修剪Status = 0、State = 1、Fees = 2(曾為 9)、SetOpenTime = 3(曾為 11)。所有訂單簿網格參數和 AmmOwnerLastOrderDistanceUpdateOpenOrder 被移除,SetParamsInstruction 結構體刪除了 new_pubkeylast_order_distance。管理員工具必須更新。

狀態變更矩陣

OpenBook 欄已消失 — 沒有指令再觸及訂單簿。

後續步驟

來源: