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

# Các tài khoản AMM v4

> Toàn bộ danh sách 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 này liên kết tới.

<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>
  AMM v4 nặng về tài khoản hơn đáng kể so với CPMM hoặc CLMM vì mọi thao tác đều chạm vào trạng thái OpenBook. Trang này sắp xếp các tài khoản thành các phần "do pool sở hữu" và "do OpenBook sở hữu" để bạn có thể nhanh chóng nhìn thấy mỗi bên là gì.
</Info>

## Danh sách tài khoản

Một pool AMM v4 liên kết tới chính xác một thị trường OpenBook tại lúc tạo. Hình ảnh trực tiếp đầy đủ là:

| 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 luỹ, trạng thái, tham chiếu tới vaults và thị trường OpenBook.     |
| Pool              | `amm_authority`                      | Chương trình AMM v4 | PDA do chương trình sở hữu ký các phép di chuyển vault. Chia sẻ giữa tất cả các pool AMM v4. |
| Pool              | `amm_open_orders`                    | OpenBook            | Tài khoản `OpenOrders` OpenBook của pool cho thị trường này.                                 |
| Pool              | `amm_target_orders`                  | Chương trình AMM v4 | Lưới các lệnh giới hạn mục tiêu của pool để đăng lại lên OpenBook.                           |
| 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ể hoán đổi.                                                                     |
| Pool              | `pool_withdraw_queue`                | Chương trình AMM v4 | Hàng đợi cũ cho rút tiền 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ợ được sử dụng trong `Initialize`.                                        |
| Market (OpenBook) | `serum_market`                       | OpenBook            | Thị trường chính nó (mint cơ sở/trích dẫn, vault signer, v.v.).                              |
| Market            | `serum_bids`, `serum_asks`           | OpenBook            | Các hàng đợi giá mua và giá bán.                                                             |
| Market            | `serum_event_queue`                  | OpenBook            | Các sự kiện đang chờ xử lý (lần khớp, hủy).                                                  |
| Market            | `serum_coin_vault`, `serum_pc_vault` | SPL Token           | Các vault cấp thị trường của OpenBook.                                                       |
| Market            | `serum_vault_signer`                 | OpenBook            | PDA cấp thị trường ký các phép di chuyển `serum_*_vault`.                                    |

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. Nó đề cập tới thị trường OpenBook ngày nay.

## `AmmInfo`

Tài khoản trạng thái gốc của pool. Kích thước 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 (tóm tắt; 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,    // mirrors OpenBook market
    pub pc_lot_size:   u64,
    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,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
```

Các trường hướng tớ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 (cơ sở), `pc` là `token_1` (trích dẫn).
* **`coin_decimals`**, **`pc_decimals`** — khớp với các mint.
* **`open_orders`**, **`target_orders`**, **`market`** — phải được chuyển tới mọi lệnh swap/deposit/withdraw.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — phí giao dịch kết hợp. Mặc định là `25 / 10_000 = 0.25%`.
* **`status`** — bitmask kiểm soát các thao tác. Có thể thiết lập bởi quản trị viên thông qua `AdminSetStatus`.
* **`state_data.need_take_pnl_*`** — dельта giữa phí tích luỹ brutto và những gì đã được xử lý. `TakePnl` làm cho những cái này bằng không.

## Kết nối OpenBook

<Note>
  **Không còn hoạt động.** Các pool AMM v4 không còn chia sẻ thanh khoản tới OpenBook — lưới lệnh giới hạn đã bị vô hiệu hóa. Các tài khoản OpenBook được mô tả trong phần này vẫn nằm trên `AmmInfo` của mỗi pool và vẫn được xác thực bởi các điểm cuối swap V1 (và bởi `Initialize`, `Deposit`, `Withdraw`) để tương thích ngược, nhưng trạng thái sách mà chúng tham chiếu là trống trong thực tế. Sử dụng các **điểm cuối swap V2** ([`SwapBaseInV2` / `SwapBaseOutV2`](/vi/products/amm-v4/instructions)) bỏ qua các tài khoản này hoàn toàn và đại diện cho con đường thực thi chính tắc ngày nay.
</Note>

Khi bạn gọi bất kỳ lệnh đọc hoặc ghi **V1** nào trên một pool AMM v4, bạn phải chuyển các tài khoản OpenBook. Chương trình re-derive và xác thực chúng, vì vậy chuyển một bộ không khớp sẽ hoàn nguyên. (Các biến thể swap V2 không yêu cầu những tài khoản này chút nào.)

```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 giữ 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ư đã thanh toán, người giới thiệu, v.v. `amm_target_orders` là phía AMM: nó giữ 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ẻ với những gì hiện đang được đăng và đặt / hủy chênh lệch.

## Các 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`. Quyền này ký tất cả các phép 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 **quyền authority được xác định phạm vi theo pool** riêng biệt được suy dẫn cho mỗi pool để ký các thao tác OpenBook (`amm_authority` ở trên thực sự bao gồm cả hai trong thiết kế của chương trình này; các phiên bản khác nhau sử dụng suy dẫn 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à những 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à những PDA cụ thể được suy dẫn 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`; suy dẫn 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 phép di chuyển vault. Cố gắng liên kết một pool AMM v4 tớ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ó quyền là `amm_authority`. Tổng cung cấp 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 có từ 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` kiểm soát các thao tác. 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 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ờ di chuyển được sử dụng bởi ops. |

Multisig Raydium đặt những cái này thông qua `AdminCancelOrders`, `AdminSetParams`, v.v.

## 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 đường sách OpenBook gián tiếp hoặc đọc ngoài chuỗi. Nếu bạn cần Raydium TWAP với hỗ trợ chương trình, hãy sử dụng CPMM hoặc CLMM.

## Suy dẫn các tài khoản của một 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 **keypair được seeded** được suy dẫn với:

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

Mẫu seeded-key tương tự được á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`.

Thực tế, bạn đọc toàn bộ bộ tài khoản của pool từ `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` hoặc từ SDK. Suy dẫn tay hiếm khi cần thiết.

## Tham khảo 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` | — (có thể tạo ATA của người dùng)                                                                            | —                |
| `TakePnl`                    | —                                                                                                            | —                |
| `MonitorStep` (crank)        | —                                                                                                            | —                |

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

## Đọc ở đâu

* **Toán học và số học phí**: [`products/amm-v4/math`](/vi/products/amm-v4/math).
* **Phân chia 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).
* **Suy dẫn 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
* OpenBook / Serum protocol cho các tài khoản đối tác
