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

# Tài khoản AMM v4

> Danh sách đầy đủ các tài khoản của một pool AMM v4 — AmmInfo, TargetOrders, OpenOrders, vaults, LP mint, authority — cộng với các tài khoản OpenBook mà pool được liên kết.

<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/accounts)
</Info>

<Info>
  Kể từ bản nâng cấp 2026-07, phụ thuộc OpenBook / Serum của AMM v4 đã bị **xóa** — không có lệnh nào đọc hoặc ghi trạng thái OpenBook nữa. Các tài khoản thị trường dưới đây chỉ được giữ lại như những placeholder vị trí trên bố cục lệnh v1 cũ (được chấp nhận nhưng bỏ qua) và như các trường tham chiếu trên `AmmInfo`. Hãy sử dụng các điểm vào swap V2, những điểm này hoàn toàn bỏ qua chúng. Trang này vẫn nhóm các tài khoản thành các phần "pool-owned" và "OpenBook (legacy)" để đọc các giao dịch cũ hơn.
</Info>

## Danh sách khoá

Một pool AMM v4 ghi lại một thị trường được liên kết trên `AmmInfo` tại thời điểm tạo. Bức tranh đầy đủ:

| Danh mục          | Tài khoản                            | Chủ sở hữu          | Vai trò                                                                                                                      |
| ----------------- | ------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Pool              | `AmmInfo`                            | Chương trình AMM v4 | Trạng thái pool: phí tích lũy, trạng thái, tham chiếu đến vaults (và, như các trường cũ, thị trường).                        |
| Pool              | `amm_authority`                      | Chương trình AMM v4 | PDA do chương trình sở hữu ký các lần di chuyển vault. Được chia sẻ trên tất cả các pool AMM v4.                             |
| Pool              | `amm_open_orders`                    | OpenBook            | Tham chiếu `OpenOrders` cũ. Không còn được đọc/ghi bởi chương trình; vẫn được truyền theo vị trí trên bố cục v1.             |
| Pool              | `amm_target_orders`                  | Chương trình AMM v4 | Tài khoản target-orders cũ. Vẫn được tham chiếu bởi `WithdrawPnl` (như tài khoản #10) nhưng không có lưới nào được xây dựng. |
| Pool              | `pool_coin_token_account`            | SPL Token           | Vault phía coin của pool (ATA của `amm_authority`).                                                                          |
| Pool              | `pool_pc_token_account`              | SPL Token           | Vault phía pc của pool.                                                                                                      |
| Pool              | `lp_mint`                            | SPL Token           | Mint LP có thể trao đổi.                                                                                                     |
| Pool              | `pool_withdraw_queue`                | Chương trình AMM v4 | Hàng đợi cũ cho rút tiền bị trì hoãn; giữ độ dài bằng không.                                                                 |
| Pool              | `pool_temp_lp`                       | Chương trình AMM v4 | Tài khoản LP phụ trợ.                                                                                                        |
| Legacy (OpenBook) | `serum_market`                       | OpenBook            | Thị trường được liên kết. Được truyền trên bố cục v1 nhưng không còn được xác thực hoặc sử dụng.                             |
| Legacy            | `serum_bids`, `serum_asks`           | OpenBook            | Hàng đợi bid/ask. Bỏ qua.                                                                                                    |
| Legacy            | `serum_event_queue`                  | OpenBook            | Các sự kiện đang chờ xử lý. Bỏ qua.                                                                                          |
| Legacy            | `serum_coin_vault`, `serum_pc_vault` | SPL Token           | Vaults cấp thị trường. Bỏ qua.                                                                                               |
| Legacy            | `serum_vault_signer`                 | OpenBook            | PDA cấp thị trường. Bỏ qua.                                                                                                  |

Lưu ý: "serum" được giữ lại như tiền tố trong IDL và tên trường của AMM v4 để tương thích ngược. Các tài khoản này không còn hoạt động sau khi xóa OpenBook.

## `AmmInfo`

Tài khoản trạng thái gốc của pool. Lớn (≈ 752 byte) vì nó mang cả tham chiếu pool và OpenBook nội tuyến.

```rust theme={null}
// programs/amm/src/state.rs (rút gọn; thứ tự trường / tên theo IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump used to derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // internal state machine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // legacy (OpenBook lot size); now initialized to 0
    pub pc_lot_size:   u64,    // legacy; now initialized to 0
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // trade/protocol/fund fee rates
    pub state_data: StateData,

    // Pool-owned accounts:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // pool's OpenOrders on OpenBook
    pub market: Pubkey,        // OpenBook market
    pub market_program: Pubkey, // OpenBook program ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // admin (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → used by OpenBook integration
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protocol's share OF the swap fee
    pub pnl_denominator:          u64,     // 100 → so 12/100 = 12% of fee, = 0.03% of volume
    pub swap_fee_numerator:       u64,     // 25  → 0.25% gross swap fee
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,        // still updated — accrued protocol fee (coin side)
    pub need_take_pnl_pc:   u64,        // still updated — accrued protocol fee (pc side)
    pub total_pnl_pc:   u64,            // DEPRECATED — no longer updated
    pub total_pnl_coin: u64,            // DEPRECATED — no longer updated
    pub pool_open_time: u64,            // still used — pool open timestamp
    pub padding: [u64; 2],              // reserved
    pub orderbook_to_init_time: u64,    // DEPRECATED — no longer updated
    pub swap_coin_in_amount: u128,      // DEPRECATED — volume counters frozen
    pub swap_pc_out_amount:  u128,      // DEPRECATED
    pub swap_acc_pc_fee:    u64,        // DEPRECATED
    pub swap_pc_in_amount:  u128,       // DEPRECATED
    pub swap_coin_out_amount: u128,     // DEPRECATED
    pub swap_acc_coin_fee:  u64,        // DEPRECATED
}
```

<Note>
  Bố cục struct **không thay đổi** (tương thích byte) nên các deserializer hiện tại tiếp tục hoạt động, nhưng sau khi xóa OpenBook, các trường được đánh dấu `DEPRECATED` ở trên **không còn được ghi** — các bộ đếm khối lượng `swap_*` bị đóng băng ở giá trị cuối cùng của chúng. Để phân tích khối lượng, hãy sử dụng nhật ký giao dịch thay vì các trường này. Chỉ `need_take_pnl_*` và `pool_open_time` được duy trì tích cực.
</Note>

Các trường hướng đến người tích hợp:

* **`coin_vault`**, **`pc_vault`** — các vault SPL Token của pool. `coin` là `token_0` theo quy ước Serum/OpenBook (base), `pc` là `token_1` (quote).
* **`coin_decimals`**, **`pc_decimals`** — khớp với các mint.
* **`open_orders`**, **`target_orders`**, **`market`** — các trường tham chiếu cũ. Vẫn có trên `AmmInfo` và vẫn được truyền theo vị trí trên bố cục lệnh v1 cũ, nhưng chương trình không còn đọc hoặc xác thực chúng. Các điểm vào swap V2 bỏ qua chúng.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — phí giao dịch kết hợp. Mặc định `25 / 10_000 = 0.25%`.
* **`status`** — bitmask gating các hoạt động. Có thể đặt bởi admin thông qua `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — delta giữa phí tích lũy brutto và những gì đã được quét. `TakePnl` đặt lại những cái này thành không.

## Dây dẫn OpenBook

<Note>
  **Đã xóa.** Phụ thuộc OpenBook / Serum đã bị xóa khỏi chương trình (bản nâng cấp 2026-07). Các tài khoản được mô tả trong phần này không còn được xác thực hoặc sử dụng. Chúng vẫn tồn tại như các trường tham chiếu trên `AmmInfo` và như các placeholder vị trí trên bố cục lệnh v1 cũ. Sử dụng **các điểm vào swap V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/vi/products/amm-v4/instructions)) bỏ qua hoàn toàn các tài khoản này.
</Note>

Khi bạn gọi lệnh **v1** cũ `SwapBaseIn` / `SwapBaseOut`, `Deposit`, hoặc `Withdraw`, **số lượng** tài khoản phải vẫn khớp với bố cục cũ (các tài khoản thị trường chiếm các vị trí lịch sử của chúng), nhưng **nội dung của chúng không còn được kiểm tra** — không có CPI nào được phát hành đối với chúng. Mã mới nên sử dụng các biến thể swap V2, không lấy các tài khoản này.

```ts theme={null}
const market = ...;  // OpenBook market PublicKey

// Fields OpenBook exposes on its market account:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
```

`amm_open_orders` của AMM là một tài khoản do OpenBook sở hữu chứa trạng thái lệnh giới hạn của pool trên thị trường này: các lệnh hoạt động, số dư đã giải quyết, người giới thiệu, v.v. `amm_target_orders` là phía AMM: nó chứa lưới *dự định* của AMM (giá/kích thước cho mỗi khe lệnh) để chương trình có thể so sánh rẻ tiền với những gì hiện đang được đăng và đặt / hủy sự khác biệt.

## PDA Authority

Có chính xác một PDA `amm_authority` cho toàn bộ chương trình AMM v4. Seed của nó là tầm thường (`["amm authority"]`) và bump của nó được lưu trữ trên mỗi `AmmInfo`. Authority này ký tất cả các lần di chuyển token cho tất cả các pool AMM v4.

```ts theme={null}
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
```

Có một authority **scoped pool** riêng biệt được lấy cho mỗi pool để ký các hoạt động OpenBook (`amm_authority` ở trên thực tế bao gồm cả hai trong thiết kế chương trình này; các phiên bản khác nhau sử dụng các lệnh lấy khác nhau, vì vậy hãy kiểm tra `AmmInfo.nonce` của pool cụ thể trong mã).

## Vaults

Các vault SPL Token của pool là các tài khoản token tiêu chuẩn có `owner` là `amm_authority`. Không phải ATA — địa chỉ của chúng là các PDA cụ thể được lấy tại `Initialize` với các seed `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. Địa chỉ được lưu trữ trên `AmmInfo`; lệnh lấy là một điều tò mò một lần.

Token-2022 **không** được hỗ trợ. Chương trình hardcode ID chương trình SPL Token cho tất cả các lần di chuyển vault. Cố gắng liên kết một pool AMM v4 với một mint Token-2022 sẽ thất bại tại `Initialize`.

## LP mint

Một mint SPL Token cổ điển có authority là `amm_authority`. Tổng cung theo dõi quyền sở hữu LP của pool; đốt LP trả lại token từ cả hai vault theo tỷ lệ. Vì AMM v4 trước CPMM, không có `lp_supply` mirror trong trạng thái pool — đọc cung cấp trên chuỗi của mint trực tiếp.

## Bitmask trạng thái

`AmmInfo.status` gating các hoạt động. Các bit (vị trí có thể khác nhau giữa các phiên bản chương trình — xác nhận thông qua nguồn):

| Bit | Cờ                  | Hiệu ứng                                |
| --- | ------------------- | --------------------------------------- |
| 0   | `SWAP_DISABLED`     | `Swap*` từ chối.                        |
| 1   | `DEPOSIT_DISABLED`  | `Deposit` từ chối.                      |
| 2   | `WITHDRAW_DISABLED` | `Withdraw` từ chối.                     |
| 3   | `CLMM_LIKE_MIGRATE` | Cờ migration-gate được sử dụng bởi ops. |

Multisig Raydium đặt những cái này thông qua `SetParams` (với `param = Status`). (`AdminCancelOrders` đã bị xóa.)

## Quan sát / oracle

**AMM v4 không có tài khoản quan sát chuyên dụng.** Các giao thức khác cần TWAP trên chuỗi thường tiêu thụ các lần giao nhau sách OpenBook gián tiếp hoặc đọc ngoài chuỗi. Nếu bạn cần TWAP Raydium với hỗ trợ chương trình, hãy sử dụng CPMM hoặc CLMM.

## Lấy các tài khoản của pool từ đầu

Vì AMM v4 không được thiết kế cho các PDA xác định theo cặp (nó trước quy ước Solana đó), `amm_id` chính tắc là một **seeded keypair** được lấy với:

```
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
```

Mô hình seeded-key tương tự áp dụng cho `amm_open_orders`, `amm_target_orders`, `amm_withdraw_queue`, `pool_temp_lp`, `pool_coin_token_account`, `pool_pc_token_account`, và `lp_mint`. SDK và API tính toán trước những cái này cho bạn; xem `raydium-sdk-v2`'s `Liquidity.getAssociatedPoolKeys`.

Trong thực tế, các người tích hợp đọc bộ tài khoản đầy đủ của pool từ `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` hoặc từ SDK. Lệnh lấy bằng tay hiếm khi cần thiết.

## Tham chiếu nhanh vòng đời

| Sự kiện                                | Tài khoản được tạo                                                                                           | Tài khoản bị xóa |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------- |
| `Initialize2`                          | `amm_info`, `amm_open_orders`, `amm_target_orders`, vaults, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —                |
| `Deposit`                              | — (có thể tạo ATA LP của người dùng)                                                                         | —                |
| `Withdraw`                             | —                                                                                                            | —                |
| `SwapBaseIn` / `SwapBaseOut` (v1 / V2) | — (có thể tạo ATA của người dùng)                                                                            | —                |
| `WithdrawPnl`                          | —                                                                                                            | —                |

Các pool và tài khoản của chúng tồn tại vô thời hạn. Ngay cả khi thanh khoản được rút hoàn toàn, `AmmInfo` vẫn tồn tại.

## Đọc ở đâu

* **Toán học và số học phí**: [`products/amm-v4/math`](/vi/products/amm-v4/math).
* **Chia tách phí và cách nó so sánh với CPMM/CLMM**: [`products/amm-v4/fees`](/vi/products/amm-v4/fees).
* **Danh sách tài khoản lệnh**: [`products/amm-v4/instructions`](/vi/products/amm-v4/instructions).
* **Lệnh lấy tài khoản OpenBook**: Tài liệu chương trình OpenBook ([`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)).

Nguồn:

* [Chương trình Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/vi/reference/program-addresses) cho các ID chương trình chính tắc
* Giao thức OpenBook / Serum cho các tài khoản đối tác
