> ## 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.

# Hướng dẫn lệnh AMM v4

> Mọi lệnh AMM v4 với các đối số, tài khoản pool và OpenBook mà nó yêu cầu, cũng như các điều kiện trước/sau cho mỗi lệnh.

<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 →](/products/amm-v4/instructions)
</Info>

<Info>
  Các lệnh AMM v4 đều yêu cầu cả **phía pool** (tài khoản chương trình AMM v4) và **phía market** (tài khoản OpenBook cho thị trường powiązanego). Nếu bỏ sót hoặc không khớp một trong hai bộ này, giao dịch sẽ bị hoàn tác. Danh sách tài khoản dưới đây sử dụng tên trường từ Raydium SDK để rõ ràng; IDL cơ bản đôi khi sử dụng tiền tố `serum_*`.
</Info>

## Danh sách lệnh

| Nhóm          | Lệnh                  | Ghi chú                                                                                          |
| ------------- | --------------------- | ------------------------------------------------------------------------------------------------ |
| Vòng đời pool | `Initialize2`         | Lệnh tạo pool hiện tại (vẫn hoạt động; giao diện người dùng mặc định sử dụng CPMM cho pool mới). |
| Thanh khoản   | `Deposit`             | Thêm thanh khoản, nhận LP.                                                                       |
| Thanh khoản   | `Withdraw`            | Đốt LP, nhận cả hai phía theo tỷ lệ.                                                             |
| Swap          | `SwapBaseIn`          | Swap đầu vào chính xác (toàn bộ đường dẫn: vaults + OpenBook).                                   |
| Swap          | `SwapBaseOut`         | Swap đầu ra chính xác (toàn bộ đường dẫn).                                                       |
| Swap          | `SwapBaseInV2`        | Swap đầu vào chính xác bỏ qua OpenBook — chỉ vaults, ít tài khoản hơn.                           |
| Swap          | `SwapBaseOutV2`       | Swap đầu ra chính xác bỏ qua OpenBook.                                                           |
| Bảo trì       | `SetParams`           | Admin: thay đổi tham số pool.                                                                    |
| Bảo trì       | `WithdrawPnl`         | Quét PnL giao thức tích lũy vào các tài khoản chủ sở hữu PnL.                                    |
| Bảo trì       | `CreateConfigAccount` | Admin: khởi tạo PDA `AmmConfig` cấp chương trình.                                                |
| Bảo trì       | `UpdateConfigAccount` | Admin: thay đổi các tham số cấu hình cấp chương trình.                                           |

SDK chỉ cung cấp các builder cho các lệnh hướng tới người dùng. Các lệnh bảo trì thường được gọi bởi người bảo trì Raydium.

## `Initialize2`

Khởi động một pool AMM v4 mới được liên kết với một thị trường OpenBook hiện có.

**Đối số**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Tài khoản** (có thể ghi `W`, ký `S`)

| #  | Tên                          | W | S | Ghi chú                                               |
| -- | ---------------------------- | - | - | ----------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                            |
| 2  | `system_program`             |   |   |                                                       |
| 3  | `rent`                       |   |   |                                                       |
| 4  | `amm`                        | W |   | Tài khoản `AmmInfo` (khóa được tạo seed).             |
| 5  | `amm_authority`              |   |   | PDA chương trình.                                     |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (được tạo seed).                |
| 7  | `lp_mint`                    | W |   |                                                       |
| 8  | `coin_mint`                  |   |   |                                                       |
| 9  | `pc_mint`                    |   |   |                                                       |
| 10 | `pool_coin_token_account`    | W |   |                                                       |
| 11 | `pool_pc_token_account`      | W |   |                                                       |
| 12 | `pool_withdraw_queue`        | W |   |                                                       |
| 13 | `pool_target_orders_account` | W |   |                                                       |
| 14 | `pool_lp_token_account`      | W |   | ATA LP của người tạo.                                 |
| 15 | `pool_temp_lp_token_account` | W |   | Tài khoản tạm.                                        |
| 16 | `market_program`             |   |   | Chương trình OpenBook.                                |
| 17 | `market`                     |   |   | Thị trường OpenBook.                                  |
| 18 | `user_wallet`                | W | S | Người tạo. Trả tiền thuê và tài trợ tiền gửi ban đầu. |
| 19 | `user_token_coin`            | W |   |                                                       |
| 20 | `user_token_pc`              | W |   |                                                       |

**Điều kiện sau**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, trong đó `INIT_BURN` ≈ 100 đơn vị LP được giữ ngoài lưu thông.
* Các đơn hàng OpenBook **chưa** được đăng; `MonitorStep` đầu tiên đăng lưới ban đầu.

**Lỗi phổ biến** — `InvalidInput` (không khớp số chữ số thập phân, không được sắp xếp), `NotApproved`, phía OpenBook `InvalidMarketState`.

## `Deposit`

Thêm thanh khoản.

**Đối số**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base on coin, 1 = base on pc
// (một số biến thể SDK cũng chấp nhận other_amount_min)
```

**Tài khoản** (tóm tắt)

| #  | Tên                       | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**Toán học** — tiêu chuẩn theo tỷ lệ. Sử dụng dự trữ *hiệu quả* của pool (vaults + trên sổ), SDK tính toán cặp coin/pc mang lại lượng LP đã cho và kiểm tra so với `max_*`. Hoàn tác với `ExceededSlippage` nếu một phía vượt quá giới hạn.

## `Withdraw`

Đốt LP, nhận cả hai phía.

**Đối số**

```
amount: u64    // LP để đốt
```

**Tài khoản** — giống như `Deposit` với hướng đảo ngược; `lp_mint` có thể ghi để đốt, các ATA người dùng là người nhận. Một bước settle-from-OpenBook giống `MonitorStep` xảy ra nội bộ trước toán học theo tỷ lệ để việc hoàn lại sử dụng dự trữ mới.

## `SwapBaseIn`

Swap đầu vào chính xác. Luôn là swap **đường dẫn AMM** (không định tuyến qua khớp OpenBook).

<Note>
  **Sử dụng các biến thể V2 cho mã mới.** Vì AMM v4 không còn chia sẻ thanh khoản với OpenBook, các điểm vào V1 (`SwapBaseIn`, `SwapBaseOut`) — vẫn yêu cầu bộ tài khoản OpenBook đầy đủ để xác thực — về mặt chức năng là dư thừa. Các tích hợp mới nên sử dụng [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), nhận danh sách tài khoản nhỏ hơn nhiều và đại diện cho đường dẫn thực thi chính tắc ngày hôm nay. Các dạng V1 được ghi lại ở đây để hoàn chỉnh và để đọc các giao dịch hiện có trên chuỗi.
</Note>

**Đối số**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Tài khoản** (tóm tắt)

| #  | Tên                         | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Toán học** — xem [`products/amm-v4/math`](/vi/products/amm-v4/math).

**Điều kiện trước**

* `amm.status` cho phép swap (bit 0 của mặt nạ trạng thái chưa được đặt).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` giữ ít nhất `amount_in`.

**Điều kiện sau**

* Người dùng mất `amount_in` token nguồn, nhận `amount_out ≥ minimum_amount_out` token đích.
* `state_data.swap_*_in_amount` và `swap_*_out_amount` tăng (để phân tích).
* `need_take_pnl_*` tăng theo phần chia phí giao thức.

**Lỗi phổ biến** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

Đầu ra chính xác, ngược lại của `SwapBaseIn`. Cùng tài khoản.

**Đối số**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

Các điểm vào swap biến thể **bỏ qua hoàn toàn các tài khoản OpenBook**. Toán học giống với đường dẫn V1, nhưng danh sách tài khoản chỉ còn phía AMM:

| # | Tên                         | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `amm_open_orders`           |   |   |
| 5 | `pool_coin_token_account`   | W |   |
| 6 | `pool_pc_token_account`     | W |   |
| 7 | `user_source_token_account` | W |   |
| 8 | `user_dest_token_account`   | W |   |
| 9 | `user_owner`                |   | S |

Dự trữ hiệu quả của pool vẫn tính đến các token được đăng trên OpenBook, vì vậy toán học báo giá không thay đổi. Sử dụng V2 để tiết kiệm compute và tránh truyền các tài khoản thị trường khi bạn không cần một crank OpenBook trong cùng một giao dịch. Bộ định tuyến Raydium luôn sử dụng dạng V2 khi định tuyến qua AMM v4.

Các đối số giống như các dạng V1 (`amount_in / minimum_amount_out` cho `SwapBaseInV2`; `max_amount_in / amount_out` cho `SwapBaseOutV2`).

## `MonitorStep` (cũ / không hoạt động)

<Note>
  **Không còn được crank.** AMM v4 không còn chia sẻ thanh khoản với OpenBook, vì vậy `MonitorStep` không có gì để làm — pool không có đơn hàng được đăng để settle, hủy hoặc thay thế. Lệnh vẫn tồn tại trong chương trình trên chuỗi để tương thích ngược nhưng người bảo trì Raydium không còn gọi nó. Gọi nó theo cách thủ công về cơ bản là một no-op (ngoài việc làm mới trạng thái được đặt thành 0) và không nên cần thiết đối với người tích hợp.
</Note>

Ban đầu lệnh này cranked tương tác OpenBook của pool.

**Đối số**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**Tài khoản** — mọi thứ trên cho một swap, cộng với các tài khoản OpenBook hành chính.

**Hiệu ứng gốc** (không còn liên quan trong thực tế):

* Settled bất kỳ đơn hàng nào được điền (số tiền của chúng được chuyển từ `market_coin_vault`/`market_pc_vault` vào vaults của pool thông qua OpenBook CPI).
* Hủy các đơn hàng cũ có giá hoặc kích thước không còn khớp với `target_orders`.
* Đăng các đơn hàng mới để đóng khoảng cách giữa `target_orders` và `amm_open_orders`.

Không có quyền hạn. Bất kỳ tài khoản nào cũng có thể gọi nó; trong lịch sử người bảo trì Raydium thường làm như vậy.

## `WithdrawPnl` / `TakePnl`

Quét admin phí giao thức tích lũy.

**Đối số**

* `WithdrawPnl` không nhận đối số; nó đọc `need_take_pnl_*` và di chuyển các lượng chính xác đó.

**Tài khoản** (tóm tắt)

| #  | Tên                       | W | S |                                       |
| -- | ------------------------- | - | - | ------------------------------------- |
| 1  | `token_program`           |   |   |                                       |
| 2  | `amm`                     | W |   |                                       |
| 3  | `amm_authority`           |   |   |                                       |
| 4  | `amm_config`              |   |   |                                       |
| 5  | `amm_open_orders`         | W |   |                                       |
| 6  | `pool_coin_token_account` | W |   |                                       |
| 7  | `pool_pc_token_account`   | W |   |                                       |
| 8  | `pnl_coin_token_account`  | W |   | Người nhận, lưu trữ trên `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                       |
| 10 | `pnl_owner`               |   | S | Multisig admin.                       |
| 11 | `market_program`          |   |   |                                       |
| 12 | `market`                  | W |   |                                       |
| 13 | `market_event_queue`      | W |   |                                       |
| 14 | `market_coin_vault`       | W |   |                                       |
| 15 | `market_pc_vault`         | W |   |                                       |
| 16 | `market_vault_signer`     |   |   |                                       |

**Hiệu ứng**

* Chuyển `need_take_pnl_coin` từ `pool_coin_token_account` đến `pnl_coin_token_account`.
* Tương tự cho pc.
* Đặt về 0 `need_take_pnl_coin` và `need_take_pnl_pc`.

Không thay đổi dự trữ vì PnL tích lũy đã bị loại trừ khỏi bất biến.

## `SetParams`

Thay đổi tham số admin: mặt nạ trạng thái, độ sâu lưới đặt hàng, sóng lượng, phí (hiếm khi), v.v. Được gọi bởi multisig Raydium. Các đối số là thẻ `param: u8` + payload, tương tự như `UpdateAmmConfig` của CPMM.

## Ma trận thay đổi trạng thái

| Lệnh          | cung cấp `lp_mint`                   | Vaults                                   | Bộ đếm PnL | OpenBook             |
| ------------- | ------------------------------------ | ---------------------------------------- | ---------- | -------------------- |
| `Initialize2` | cung cấp init được tạo cho người tạo | `+ init_coin_amount`, `+ init_pc_amount` | 0          | OpenOrders được tạo  |
| `Deposit`     | +                                    | + cả hai                                 | —          | settle điền          |
| `Withdraw`    | −                                    | − cả hai                                 | —          | settle điền          |
| `SwapBaseIn`  | —                                    | + vào, − ra                              | + chia pnl | có thể đăng lại lưới |
| `SwapBaseOut` | —                                    | + vào, − ra                              | + chia pnl | có thể đăng lại lưới |
| `MonitorStep` | —                                    | settle điền                              | —          | hủy / đăng           |
| `WithdrawPnl` | —                                    | − (pnl quét)                             | 0          | —                    |
| `SetParams`   | —                                    | —                                        | —          | —                    |

## Tiếp theo đi đâu

* [`products/amm-v4/code-demos`](/vi/products/amm-v4/code-demos) — Ví dụ TypeScript cho swap và luồng LP.
* [`products/amm-v4/fees`](/vi/products/amm-v4/fees) — Chi tiết `WithdrawPnl` và phân chia phí.
* [`reference/error-codes`](/vi/reference/error-codes) — Bảng tham chiếu chuyển tiếp (các lỗi AMM v4 được liệt kê trên trang đó).

Nguồn:

* [Chương trình Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Mô-đun `Liquidity` SDK Raydium v2
* Chương trình OpenBook — xác thực tài khoản trên phía thị trường
