> ## 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 Stable AMM

> AmmInfo, ModelDataInfo, DataElement, Fees, và bố cục vault. Danh sách đầy đủ các tài khoản của một pool Stable AMM (một chương trình Raydium độc lập, thuần AMM).

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

<Info>
  Stable AMM là một chương trình riêng; cấu trúc tài khoản phía pool của nó tương tự AMM v4 (AmmInfo, vaults, authority), và nó còn có một tài khoản `ModelDataInfo` lưu trữ bảng tra cứu. Trang này bao gồm cả hai.
</Info>

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

<Note>
  **Thuần AMM.** Stable AMM giữ tất cả thanh khoản trong các vault riêng của nó và không phụ thuộc vào OpenBook. Nó từng có một đường dẫn market-making OpenBook vào đầu cuộc đời của nó, nhưng đường dẫn đó đã không hoạt động trong nhiều năm, và [bản nâng cấp 2026-06-22](/vi/reference/changelog) đã loại bỏ mã còn sót lại. Do đó, các tài khoản thị trường `serum_*` và `amm_open_orders` dưới đây là **di sản**: chúng có thể vẫn xuất hiện trong các giao dịch bố cục cũ để tương thích ngược, nhưng chương trình không xác thực hoặc đọc chúng, và các hướng dẫn bố cục mới sẽ bỏ qua chúng hoàn toàn.
</Note>

Danh sách tài khoản hoạt động hiện nay hoàn toàn ở phía pool:

| Danh mục | Tài khoản                            | Chủ sở hữu          | Vai trò                                                                                              |
| -------- | ------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------- |
| Pool     | `AmmInfo`                            | Chương trình Stable | Trạng thái pool, tham chiếu đến vaults và tài khoản dữ liệu mô hình.                                 |
| Pool     | `amm_authority`                      | Chương trình Stable | 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 Stable AMM. |
| Pool     | `amm_target_orders`                  | Chương trình Stable | Tài khoản lưới phía pool (được giữ lại trong bố cục; không còn điều khiển các lệnh OpenBook).        |
| Pool     | `pool_coin_token_account`            | SPL Token           | Vault phía coin của pool.                                                                            |
| 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 được.                                                                        |
| Mô hình  | **`model_data_account`**             | Chương trình Stable | **Bảng tra cứu: 50.000 × DataElement.**                                                              |
| Di sản   | `amm_open_orders`                    | OpenBook            | Tài khoản `OpenOrders` OpenBook cũ của pool. **Không sử dụng.**                                      |
| Di sản   | `serum_market`                       | OpenBook            | Thị trường OpenBook. **Không sử dụng.**                                                              |
| Di sản   | `serum_bids`, `serum_asks`           | OpenBook            | Hàng đợi bid/ask. **Không sử dụng.**                                                                 |
| Di sản   | `serum_event_queue`                  | OpenBook            | Hàng đợi sự kiện. **Không sử dụng.**                                                                 |
| Di sản   | `serum_coin_vault`, `serum_pc_vault` | SPL Token           | Vaults cấp thị trường OpenBook. **Không sử dụng.**                                                   |
| Di sản   | `serum_vault_signer`                 | OpenBook            | Người ký vault cấp thị trường. **Không sử dụng.**                                                    |

## `AmmInfo`

Tài khoản trạng thái gốc. Bố cục gần như giống hệt AMM v4 — các tham số pool, số thập phân, phí, tham chiếu vault/mint — với một bổ sung: trường `model_data_key` trỏ đến bảng tra cứu.

```rust theme={null}
// raydium-stable/program/src/state.rs (abridged)
pub struct AmmInfo {
    pub account_type: u64,              // = 0 (AmmAccount)
    pub status: u64,                    // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce: u64,                     // bump for amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals: u64,
    pub state: u64,                     // state machine (IdleState, etc.)
    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
    pub pc_lot_size: u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,
    pub abort_trade_factor: u64,
    pub price_tick_multiplier: u64,
    pub price_tick: u64,
    
    pub fees: Fees,                     // see below
    pub out_put: OutPutData,            // PnL, swaps, punish amounts
    
    pub coin_vault: Pubkey,
    pub pc_vault: Pubkey,
    pub coin_mint: Pubkey,
    pub pc_mint: Pubkey,
    pub lp_mint: Pubkey,
    pub model_data_key: Pubkey,         // ← THE LOOKUP TABLE
    pub open_orders: Pubkey,            // legacy: OpenBook OpenOrders (unused post-decoupling)
    pub serum_market: Pubkey,           // legacy: unused post-decoupling
    pub serum_program: Pubkey,          // legacy: unused post-decoupling
    pub target_orders: Pubkey,
    pub amm_admin: Pubkey,              // admin key
    pub client_order_id: u64,
    pub lp_amount: u64,                 // LP supply
    pub lp_net: u64,                    // LP value metric
    pub padding: [u64; 61],
}

pub struct Fees {
    pub min_separate_numerator: u64,
    pub min_separate_denominator: u64,
    pub trade_fee_numerator: u64,       // 25
    pub trade_fee_denominator: u64,     // 10_000 → 0.25%
    pub pnl_numerator: u64,             // 12
    pub pnl_denominator: u64,           // 100 → 12% of fee = 0.03% of volume
    pub swap_fee_numerator: u64,        // 25
    pub swap_fee_denominator: u64,      // 10_000
}

pub struct OutPutData {
    pub need_take_pnl_coin: u64,        // accrued protocol fee (coin)
    pub need_take_pnl_pc: u64,          // accrued protocol fee (pc)
    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_pc_in_amount: u128,
    pub swap_coin_out_amount: u128,
    pub swap_pc_fee: u64,
    pub swap_coin_fee: u64,
}
```

Các trường quan trọng đối với người tích hợp:

* **`model_data_key`** — địa chỉ của bảng tra cứu. Phải được truyền cho mọi hướng dẫn.
* **`fees`** — cấu trúc giống hệt AMM v4. Mặc định là phí giao dịch 0,25%, chia tách LP 0,22% / giao thức 0,03%.
* **`coin_vault`**, **`pc_vault`** — các vault của pool.
* **`status`** — bitmask kiểm soát swap/deposit/withdraw/crank.
* **`out_put.need_take_pnl_*`** — được quét bởi `WithdrawPnl`.

## `ModelDataInfo`

Bảng tra cứu. Một mảng thưa lớn các điểm giá/số lượng.

```rust theme={null}
// raydium-stable/program/src/state.rs
pub const ELEMENT_SIZE: usize = 50000;

pub struct DataElement {
    pub x: u64,         // table X (e.g., coin amount)
    pub y: u64,         // table Y (e.g., pc amount)
    pub price: u64,     // price at (x, y)
}

pub struct ModelDataInfo {
    pub account_type: u64,              // = 2 (ModleDataAccount)
    pub status: u64,                    // Initialized or Uninitialized
    pub multiplier: u64,                // scale factor for x, y (e.g., 10^6)
    pub valid_data_count: u64,          // how many elements are populated
    pub elements: [DataElement; 50000], // the table itself
}
```

**Vòng đời:**

Các hướng dẫn thiết lập đã xây dựng các bảng này — `InitModelData` (tạo tài khoản) và `UpdateModelData` (điền các phần tử, đặt `valid_data_count`) — đã **bị xóa trong bản nâng cấp 2026-06-22**. Các bảng trên các pool hiện có hiện đã **cố định**. Tại thời chạy, các hướng dẫn có thể gọi còn lại vẫn tiêu thụ chúng:

* **Swap / deposit / withdraw** gọi các hàm tra cứu thực hiện tìm kiếm nhị phân và nội suy trong `elements[0..valid_data_count]`.

## `DataElement`

Mục nhập nguyên tử trong bảng. Phải được sắp xếp (x tăng dần, y giảm dần, giá tăng dần) để tìm kiếm nhị phân hoạt động.

```rust theme={null}
pub struct DataElement {
    pub x: u64,         // X coordinate (e.g., token_a balance, scaled by multiplier)
    pub y: u64,         // Y coordinate (e.g., token_b balance, scaled by multiplier)
    pub price: u64,     // price (x/y in scaled form, scaled by multiplier)
}
```

Khi điền bảng, quản trị viên chỉ định các giá trị này đã được chia tỷ lệ. Chương trình không xác thực thứ tự sắp xếp trên chuỗi (để tăng tốc độ), vì vậy sắp xếp sai gây ra báo giá không chính xác.

## Authority và vaults

Giống như AMM v4:

* **`amm_authority`** là một PDA duy nhất trên toàn chương trình được lấy từ seed `["amm authority"]`. Nó sở hữu tất cả các vault pool và ký các lần di chuyển của chúng.
* **Vaults** là các tài khoản SPL Token có chủ sở hữu là `amm_authority`, không phải ATA.

Token-2022 **không** được hỗ trợ.

## Bitmask trạng thái

Giống hệt AMM v4. Kiểm soát xem swap/deposit/withdraw/crank có được bật hay không.

## Theo dõi phí và PnL

Struct `out_put` theo dõi:

* **`need_take_pnl_coin`**, **`need_take_pnl_pc`** — phí giao thức tích lũy nhưng chưa được quét. `WithdrawPnl` di chuyển những phí này ra ngoài.
* **`swap_coin_in_amount`**, `swap_pc_in_amount`, v.v. — các bộ đếm phân tích.

**Tính toán tài sản pool (sau khi tách rời).** Vì không còn quỹ nào được ký quỹ dưới dạng các lệnh mở OpenBook nữa, tổng tài sản của pool hiện được tính toàn bộ từ các vault:

```
Cũ: tổng tài sản = số dư vault + quỹ lệnh mở (native_coin_total / native_pc_total) − PnL đang chờ (need_take_pnl)
Mới: tổng tài sản = số dư vault − PnL đang chờ (need_take_pnl)
```

Các indexer và mã báo giá đã tái cấu trúc giá trị pool từ số dư OpenOrders phải loại bỏ thuật ngữ đó.

## Kích thước tài khoản

**`ModelDataInfo` rất lớn** (\~1,2 MB, vì 50.000 phần tử × 24 byte trên mỗi phần tử). Đây là lý do tại sao việc tạo một pool Stable yêu cầu cấp phát rent và tài khoản rõ ràng. SDK và công cụ Raydium xử lý điều này một cách minh bạch; những người tích hợp hiếm khi cần phân bổ thủ công.

## Lấy tài khoản từ đầu

Giống như AMM v4, Stable AMM sử dụng **khóa được seed** (không phải PDA thuần). Danh tính pool chính tắc được lấy thông qua:

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

Tương tự đối với vaults, LP mint, target orders, v.v. Trong thực tế, hãy sử dụng SDK hoặc API để tìm nạp các địa chỉ được tính toán trước.

## Đọc ở đâu

* **Danh sách tài khoản hướng dẫn**: [`products/stable/instructions`](/vi/products/stable/instructions).
* **Cách nội suy sử dụng bảng**: [`products/stable/math`](/vi/products/stable/math).
* **Cấu trúc phí và WithdrawPnl**: [`products/stable/fees`](/vi/products/stable/fees).
* **Tách rời OpenBook 2026-06-22**: [`reference/changelog`](/vi/reference/changelog).

Nguồn:

* [`reference/program-addresses`](/vi/reference/program-addresses)
