> ## 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: loại bỏ phụ thuộc OpenBook / Serum

> AMM v4 loại bỏ phụ thuộc OpenBook/Serum không hoạt động, các CPI và hướng dẫn tạo thị trường: v1 Swap/Deposit/Withdraw vẫn tương thích, WithdrawPnl và SetParams bị phá vỡ hoàn toàn, và một số hướng dẫn không còn có thể gọi được.

<Info>
  **Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.**

  [Xem bản tiếng Anh →](/reference/changelog/2026-07-22-amm-v4-openbook-removal)
</Info>

AMM v4 **đã ngừng chia sẻ thanh khoản cho OpenBook (trước đây là Serum) từ lâu**; con đường tạo thị trường hybrid order-book đã không hoạt động trong nhiều năm. Bản nâng cấp này là công việc dọn dẹp: nó **loại bỏ phụ thuộc Serum, tất cả các CPI order-book và các hướng dẫn tạo thị trường chết** khỏi chương trình, để lại AMM v4 như một AMM constant-product (`x·y=k`) thuần túy. Nó **không** thay đổi bất kỳ hành vi giao dịch trực tiếp nào — không còn đơn hàng OpenBook nào để dừng đặt.

## TL;DR cho các nhà tích hợp

* **Swap / Deposit / Withdraw tiếp tục hoạt động mà không có thay đổi.** Các giao dịch được xây dựng với bố cục tài khoản cũ vẫn thực thi — các tài khoản Serum/market bị loại bỏ được đơn giản bỏ qua (không xác thực, không CPI). `SwapBaseIn` / `SwapBaseOut` vẫn mong đợi **17 (+1 tùy chọn)** tài khoản; bố cục `Deposit` và `Withdraw` không thay đổi. Bạn **không** phải gửi bản cập nhật máy khách để giữ các luồng hiện có hoạt động.
* **Di chuyển sang các điểm vào swap V2.** `SwapBaseInV2` / `SwapBaseOutV2` không có tài khoản thị trường và không có `amm_open_orders` (8 tài khoản tổng cộng), vì vậy các giao dịch nhỏ hơn và rẻ hơn. Các bộ định tuyến/tổng hợp nên định tuyến qua V2.
* **`WithdrawPnl` là một thay đổi phá vỡ hoàn toàn (chỉ quản trị viên).** Nó đi từ **17 (+1 tùy chọn) → 10** tài khoản với **không có phân tích tương thích**; bố cục cũ không khớp (cũ #5 là `amm_open_orders`) và không vượt qua xác thực. Công cụ quản trị phải được cập nhật.
* **`SetParams` là một thay đổi phá vỡ hoàn toàn (chỉ quản trị viên).** Tài khoản thu nhỏ thành `[amm, admin]`, và enum `param` được **đánh số lại** (`Fees` 9 → 2, `SetOpenTime` 11 → 3); `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` và các tham số lưới bị loại bỏ.
* **Một số hướng dẫn không còn có thể gọi được.** `Initialize`, `PreInitialize`, `MonitorStep`, `MigrateToOpenBook`, `WithdrawSrm`, `SimulateInfo` và `AdminCancelOrders` giờ đây hoàn nguyên. Sử dụng `Initialize2` để tạo pool.
* **Bố cục tài khoản trên chuỗi ổn định về byte, và mã lỗi không thay đổi.** `AmmInfo` / `StateData` giữ bố cục của chúng (các trường OpenBook cũ được giữ lại nhưng không dùng nữa/đóng băng); việc đánh số `AmmError` được bảo tồn, chỉ có `NotAllowed` mới được thêm vào.

## Tại sao điều này quan trọng (cho các nhà giao dịch, LP và nhà tích hợp)

* **Các nhà giao dịch** không thấy thay đổi nào trong hành vi hoặc giá swap — đường cong constant-product không thay đổi. Các swap bố cục V2 rẻ hơn để đặt vì chúng mang \~8 tài khoản ít hơn.
* **LP** giữ lại cùng một kinh tế gửi/rút. Thanh khoản đã lâu nằm hoàn toàn trong các kho pool, vì vậy giá trị pool hoàn toàn nằm trên pool; bản nâng cấp này chỉ xóa đi các đường ống thị trường cũ.
* **Các nhà tích hợp** nhận được các giao dịch nhỏ hơn, đơn giản hơn và một mô hình trích dẫn đọc thẳng từ các kho. Các tích hợp hiện có không bị phá vỡ (ngoại trừ quản trị viên `WithdrawPnl` / `SetParams`), nhưng shim tương thích v1-swap là tạm thời — di chuyển sang V2 khi bạn thuận tiện.

## Thay đổi cấp độ hướng dẫn

### Vẫn có thể gọi được, bố cục không thay đổi (tương thích ngược)

`Initialize2`, `Deposit`, `Withdraw`, `SwapBaseIn`, `SwapBaseOut`, `CreateConfigAccount` và `UpdateConfigAccount` giữ danh sách tài khoản hiện có của chúng. Trên `SwapBaseIn` / `SwapBaseOut`, `Deposit` và `Withdraw`, các tài khoản OpenBook/market vẫn được chấp nhận theo vị trí nhưng **không còn được xác thực hoặc sử dụng** — không có CPI được phát hành và dự trữ pool được tính toán chỉ từ kho. Số lượng tài khoản **phải** vẫn khớp, vì vậy các giao dịch hiện có tiếp tục thực thi không thay đổi.

### `SwapBaseInV2` / `SwapBaseOutV2` — con đường được khuyến nghị

Bỏ qua các tài khoản thị trường và `amm_open_orders` hoàn toàn (8 tài khoản; thẻ 16 / 17). Toán học trích dẫn giống hệt v1. Các tích hợp mới và bộ định tuyến nên sử dụng V2.

### `WithdrawPnl` — 17 (+1 tùy chọn) → 10 tài khoản (⚠️ phá vỡ hoàn toàn, không có con đường tương thích)

`amm_open_orders` và tất cả sáu tài khoản thị trường bị loại bỏ. Bố cục 10 tài khoản cố định mới, chỉ dành cho quản trị viên, **không** có phân tích tương thích; bố cục cũ không khớp và không vượt qua với các lỗi như `InvalidCoinVault`.

### `SetParams` — giảm xuống `[amm, admin]` (⚠️ phá vỡ hoàn toàn) + tham số được đánh số lại

Quyền hạn, open-orders, target-orders, vault và tất cả các tài khoản thị trường bị loại bỏ. Enum `param` được đánh số lại và cắt ngắn:

| Param         | Giá trị cũ | Giá trị mới |
| ------------- | ---------- | ----------- |
| `Status`      | 0          | 0           |
| `State`       | 1          | 1           |
| `Fees`        | 9          | **2**       |
| `SetOpenTime` | 11         | **3**       |

Tất cả các tham số lưới order-book (`OrderNum`, `Depth`, `AmountWave`, `MinPriceMultiplier`, `MaxPriceMultiplier`, `MinSize`, `VolMaxCutRatio`, `InitOrderDepth`, `SetSwitchTime`, `ClearOpenTime`, `Seperate`) cộng với `AmmOwner`, `LastOrderDistance` và `UpdateOpenOrder` bị loại bỏ. Struct `SetParamsInstruction` loại bỏ `new_pubkey` và `last_order_distance`.

### Không còn có thể gọi được (hoàn nguyên tại thời gian chạy; các nhà xây dựng bị loại bỏ)

| Hướng dẫn           | thẻ | Thay thế                               |
| ------------------- | --- | -------------------------------------- |
| `Initialize`        | 0   | `Initialize2`                          |
| `MonitorStep`       | 2   | không (order-book crank, đã loại bỏ)   |
| `MigrateToOpenBook` | 5   | không                                  |
| `WithdrawSrm`       | 8   | không (chiết khấu phí SRM, đã loại bỏ) |
| `PreInitialize`     | 10  | `Initialize2`                          |
| `SimulateInfo`      | 12  | trích dẫn ngoài chuỗi / SDK            |
| `AdminCancelOrders` | 13  | không                                  |

## Thay đổi dự trữ / trạng thái

* **Công thức tài sản pool.** Tổng tài sản pool hiện là `số dư kho − PnL đang chờ xử lý (need_take_pnl)`; thuật ngữ open-order OpenBook — đã bằng không trong thực tế — bị loại bỏ. Mã trích dẫn có thể đọc thẳng từ số dư kho.
* **Các trường trạng thái không dùng nữa.** `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` và `swap_acc_coin_fee` được giữ lại để tương thích bố cục nhưng **không còn được cập nhật**. Các người tiêu dùng dựa vào các bộ đếm khối lượng `swap_*` nên chuyển sang nhật ký giao dịch.
* **Khởi tạo `AmmInfo`.** `coin_lot_size`, `pc_lot_size` và `min_size` hiện được khởi tạo thành `0`.
* **Phụ thuộc bị loại bỏ và CPI.** Crate `serum_dex` bị loại bỏ khỏi `Cargo.toml`; tất cả các CPI Serum DEX (`invoke_dex_new_order_v3`, `invoke_dex_cancel_order_v2`, `invoke_dex_settle_funds`, `invoke_dex_init_open_orders`, …) bị loại bỏ khỏi `invokers.rs`. Các struct dữ liệu bị loại bỏ: `LastOrderDistance`, `SimulateParams`, `RunCrankData`, `GetPoolData`, `GetSwapBaseInData`, `GetSwapBaseOutData`.
