本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
自 2026-07 程式升級起,AMM v4 的 OpenBook / Serum 依賴已被移除。舊版 v1 的
SwapBaseIn / SwapBaseOut、Deposit 和 Withdraw 指令保持原有帳戶配置以維持向後相容性:市場帳戶仍在原位置被接受,但不再被驗證或使用(不發出 CPI)。新的整合應使用 V2 交換進入點,其完全省略市場帳戶。多個指令已被移除並現在會回復 — 見變更日誌條目。下方帳戶列表使用 Raydium SDK 的欄位名稱;底層 IDL 有時使用 serum_* 前綴。2026-09 程式升級新增一個管理員指令 WithdrawExcessLamports(標籤 18),並從 CreateConfigAccount 移除租金系統變數。交易者或 LP 呼叫的所有內容保持不變。見2026-09-09 變更日誌條目。指令清單
SDK 僅為面向使用者的指令公開建構器。維護指令通常由 Raydium 守護程式呼叫。
已移除 / 不再可呼叫(其用戶端建構器已刪除):
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 mint 相同)。
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 標籤 + 負載。
CreateConfigAccount / UpdateConfigAccount
程式級 AmmConfig PDA(種子 ["amm_config_account_seed"])的管理員管理,其持有 PnL 所有者、建立池費用和池建立標誌。
在 2026-09 中變更,向後相容。
CreateConfigAccount 不再讀取租金系統變數。其帳戶列表現在是 4 個帳戶,從 5 個下降:程式從
Rent::get() 讀取租金參數,而不是反序列化傳入的系統變數帳戶 — 這是 Solana 3.0 依賴升級使其自然的做法。被移除的帳戶是列表中的最後一個,處理器通過 next_account_info 按位置讀取其帳戶,無長度檢查。因此,仍傳遞舊 5 帳戶列表的現有管理員工具保持工作:尾部租金帳戶根本不被讀取。在方便時更新它,不是緊急的。UpdateConfigAccount 不變。Initialize2 在位置 3 保持租金系統變數,並仍使用它:程式停止在其上呼叫 Rent::from_account_info,但它仍被轉發到建立池金庫和 LP mint 的 spl_token::initialize_account 和 initialize_mint CPI。不要從帳戶列表中刪除它。
WithdrawExcessLamports
從程式控制的帳戶清掃坐在租金豁免最低額上方的 lamport。在 2026-09 升級中新增,以恢復 SIMD-0437 租金減少在每個步驟之前建立的帳戶上留下的過度資金。
它僅移動超額。代幣餘額、帳戶資料、所有者和池狀態保持不變,指令在已在最低額的帳戶上是無操作 — 所以重複發火和在每個推出步驟後再次發火是安全的。
參數 — 無。負載是單個標籤位元組 18。
帳戶
每個源帳戶的處理方式
程式根據源帳戶的
owner 分派:
常見錯誤 —
InvalidSignAccount(錯誤簽署者)、InvalidSplTokenProgram(槽 3 中的錯誤程式)、InvalidProgramAddress(錯誤 amm_authority)、LamportsCalculateError(自訂程式碼 60;wSOL 往返未淨為零)和來自程式擁有路徑的 InsufficientFunds,當帳戶持有少於其自身租金最低額時。
無 SDK 建構器。 @raydium-io/raydium-sdk-v2 不提供此指令的建構器,raydium-sdk-V2-demo 儲存庫也不提供 — 這是管理員路徑。手動編碼,就像 solana-fundamentals/rent-and-reclaimable-rent 中的錢包邊清掃對代幣程式指令所做的那樣。
狀態變更矩陣
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 程式 — 市場邊的帳戶驗證

