> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-07-22 — AMM v4：移除 OpenBook / Serum 依賴

> AMM v4 移除其休眠的 OpenBook/Serum 依賴、CPI 和做市指令：v1 Swap/Deposit/Withdraw 保持相容，WithdrawPnl 和 SetParams 是硬性破壞性變更，多個指令不再可呼叫。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/reference/changelog/2026-07-22-amm-v4-openbook-removal)
</Info>

<Info>
  文件變更日誌條目。如需所有更新的索引，請參閱 [`reference/changelog`](/zh-Hant/reference/changelog)。如需協議本身的歷史時間軸，請參閱 [`introduction/history-and-milestones`](/zh-Hant/introduction/history-and-milestones)。
</Info>

AMM v4 **早已停止與 OpenBook（前身為 Serum）共享流動性**；混合訂單簿做市路徑已休眠多年。此次升級是清理工作：它**移除 Serum 依賴、所有訂單簿 CPI 和已廢棄的做市指令**，使 AMM v4 成為純粹的常數乘積（`x·y=k`）AMM。它**不會**改變任何實時交易行為——沒有遺留的 OpenBook 訂單需要停止下單。

## 整合者速覽

* **Swap / Deposit / Withdraw 無需變更即可繼續運作。** 使用舊帳戶佈局構建的交易仍會執行——已移除的 Serum/市場帳戶會被簡單忽略（無驗證、無 CPI）。`SwapBaseIn` / `SwapBaseOut` 仍需要 **17 個（+1 個可選）** 帳戶；`Deposit` 和 `Withdraw` 佈局保持不變。你**無需**發佈客戶端更新來保持現有流程運作。
* **遷移至 V2 交換進入點。** `SwapBaseInV2` / `SwapBaseOutV2` 不含市場帳戶和 `amm_open_orders`（共 8 個帳戶），因此交易更小、成本更低。路由器/聚合器應透過 V2 路由。
* **`WithdrawPnl` 是硬性破壞性變更（僅限管理員）。** 帳戶數從 **17 個（+1 個可選）→ 10 個**，**無相容性解析**；舊佈局會錯位（舊的 #5 是 `amm_open_orders`）並驗證失敗。管理員工具必須更新。
* **`SetParams` 是硬性破壞性變更（僅限管理員）。** 帳戶縮減至 `[amm, admin]`，`param` 列舉被**重新編號**（`Fees` 9 → 2，`SetOpenTime` 11 → 3）；`AmmOwner`、`LastOrderDistance`、`UpdateOpenOrder` 和網格參數已移除。
* **多個指令不再可呼叫。** `Initialize`、`PreInitialize`、`MonitorStep`、`MigrateToOpenBook`、`WithdrawSrm`、`SimulateInfo` 和 `AdminCancelOrders` 現在會回復。使用 `Initialize2` 建立池。
* **鏈上帳戶佈局位元組穩定，錯誤代碼保持不變。** `AmmInfo` / `StateData` 保持其佈局（舊 OpenBook 欄位保留但已棄用/凍結）；`AmmError` 編號保留，僅在末尾附加新的 `NotAllowed`。

## 為什麼這很重要（對交易者、LP 和整合者）

* **交易者**在交換行為或定價上看不到變化——常數乘積曲線保持不變。V2 佈局交換成本更低，因為它們攜帶的帳戶少約 8 個。
* **LP** 保持相同的存入/提取經濟學。流動性長期以來完全位於池金庫中，因此池價值完全在池上；此升級僅刪除了陳舊的市場管道。
* **整合者**獲得更小、更簡單的交易和直接從金庫讀取的報價模型。現有整合不會中斷（除了管理員 `WithdrawPnl` / `SetParams`），但 v1 交換相容性墊片是臨時的——請在方便時遷移至 V2。

## 指令級變更

### 仍可呼叫，佈局不變（向後相容）

`Initialize2`、`Deposit`、`Withdraw`、`SwapBaseIn`、`SwapBaseOut`、`CreateConfigAccount` 和 `UpdateConfigAccount` 保持其現有帳戶列表。在 `SwapBaseIn` / `SwapBaseOut`、`Deposit` 和 `Withdraw` 上，OpenBook/市場帳戶仍被按位置接受，但**不再被驗證或使用**——不發出 CPI，池準備金僅從金庫計算。帳戶**數量**仍必須匹配，因此現有交易繼續無變化地執行。

### `SwapBaseInV2` / `SwapBaseOutV2` — 推薦路徑

完全省略市場帳戶和 `amm_open_orders`（8 個帳戶；標籤 16 / 17）。報價數學與 v1 相同。新整合和路由器應使用 V2。

### `WithdrawPnl` — 17 個（+1 個可選）→ 10 個帳戶（⚠️ 硬性破壞，無相容性路徑）

`amm_open_orders` 和所有六個市場帳戶已移除。新的固定 10 帳戶、僅限管理員的佈局**沒有**相容性解析；舊佈局會錯位並因 `InvalidCoinVault` 等錯誤而失敗。

### `SetParams` — 縮減至 `[amm, admin]`（⚠️ 硬性破壞）+ 重新編號的參數

權限、開放訂單、目標訂單、金庫和所有市場帳戶已移除。`param` 列舉被重新編號和修剪：

| 參數            | 舊值 | 新值    |
| ------------- | -- | ----- |
| `Status`      | 0  | 0     |
| `State`       | 1  | 1     |
| `Fees`        | 9  | **2** |
| `SetOpenTime` | 11 | **3** |

所有訂單簿網格參數（`OrderNum`、`Depth`、`AmountWave`、`MinPriceMultiplier`、`MaxPriceMultiplier`、`MinSize`、`VolMaxCutRatio`、`InitOrderDepth`、`SetSwitchTime`、`ClearOpenTime`、`Seperate`）加上 `AmmOwner`、`LastOrderDistance` 和 `UpdateOpenOrder` 已移除。`SetParamsInstruction` 結構刪除了 `new_pubkey` 和 `last_order_distance`。

### 不再可呼叫（運行時回復；構建器已移除）

| 指令                  | 標籤 | 替代品              |
| ------------------- | -- | ---------------- |
| `Initialize`        | 0  | `Initialize2`    |
| `MonitorStep`       | 2  | 無（訂單簿 crank，已停用） |
| `MigrateToOpenBook` | 5  | 無                |
| `WithdrawSrm`       | 8  | 無（SRM 費用折扣，已停用）  |
| `PreInitialize`     | 10 | `Initialize2`    |
| `SimulateInfo`      | 12 | 鏈下 / SDK 報價      |
| `AdminCancelOrders` | 13 | 無                |

## 準備金 / 狀態變更

* **池資產公式。** 總池資產現為 `金庫餘額 − 待處理 PnL (need_take_pnl)`；OpenBook 開放訂單項——實際上已為零——已刪除。報價代碼可直接從金庫餘額讀取。
* **已棄用的狀態欄位。** `StateData.total_pnl_pc`、`total_pnl_coin`、`orderbook_to_init_time`、`swap_coin_in_amount`、`swap_pc_out_amount`、`swap_acc_pc_fee`、`swap_pc_in_amount`、`swap_coin_out_amount` 和 `swap_acc_coin_fee` 為了佈局相容性而保留，但**不再更新**。依賴 `swap_*` 交易量計數器的消費者應切換至交易日誌。
* **`AmmInfo` 初始化。** `coin_lot_size`、`pc_lot_size` 和 `min_size` 現初始化為 `0`。
* **已移除的依賴和 CPI。** `serum_dex` crate 從 `Cargo.toml` 中刪除；所有 Serum DEX CPI（`invoke_dex_new_order_v3`、`invoke_dex_cancel_order_v2`、`invoke_dex_settle_funds`、`invoke_dex_init_open_orders`、…）從 `invokers.rs` 中移除。已移除的數據結構：`LastOrderDistance`、`SimulateParams`、`RunCrankData`、`GetPoolData`、`GetSwapBaseInData`、`GetSwapBaseOutData`。
