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

# Stable AMM 帳戶

> AmmInfo、ModelDataInfo、DataElement、Fees 和金庫配置。Stable AMM 池的完整帳戶清單（獨立的純 AMM Raydium 程式）。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/products/stable/accounts)
</Info>

<Info>
  Stable AMM 是獨立的程式；其池端帳戶結構類似於 AMM v4（AmmInfo、金庫、授權者），並額外包含一個儲存查詢表的 `ModelDataInfo` 帳戶。本頁涵蓋兩者。
</Info>

## 清單

<Note>
  **純 AMM。** Stable AMM 在自己的金庫中持有所有流動性，不依賴 OpenBook。它在早期曾有 OpenBook 做市路徑，但該路徑已多年未使用，[2026-06-22 升級](/zh-Hant/reference/changelog)移除了遺留程式碼。因此下方的 `serum_*` 市場帳戶和 `amm_open_orders` 是**遺留項目**：它們可能仍出現在舊版配置交易中以保持向後相容性，但程式不驗證或讀取它們，新版指令完全省略它們。
</Note>

現在的活躍清單完全是池端的：

| 類別 | 帳戶                                  | 擁有者       | 角色                                    |
| -- | ----------------------------------- | --------- | ------------------------------------- |
| 池  | `AmmInfo`                           | Stable 程式 | 池狀態、金庫和模型資料帳戶的參考。                     |
| 池  | `amm_authority`                     | Stable 程式 | 程式擁有的 PDA，簽署金庫操作。在所有 Stable AMM 池中共享。 |
| 池  | `amm_target_orders`                 | Stable 程式 | 池端網格帳戶（保留在配置中；不再驅動 OpenBook 訂單）。      |
| 池  | `pool_coin_token_account`           | SPL Token | 池的幣端金庫。                               |
| 池  | `pool_pc_token_account`             | SPL Token | 池的 pc 端金庫。                            |
| 池  | `lp_mint`                           | SPL Token | 可互換的 LP 鑄幣。                           |
| 模型 | **`model_data_account`**            | Stable 程式 | **查詢表：50,000 × DataElement。**         |
| 遺留 | `amm_open_orders`                   | OpenBook  | 池的舊 OpenBook `OpenOrders` 帳戶。**未使用。** |
| 遺留 | `serum_market`                      | OpenBook  | OpenBook 市場。**未使用。**                  |
| 遺留 | `serum_bids`、`serum_asks`           | OpenBook  | 買價/賣價隊列。**未使用。**                      |
| 遺留 | `serum_event_queue`                 | OpenBook  | 事件隊列。**未使用。**                         |
| 遺留 | `serum_coin_vault`、`serum_pc_vault` | SPL Token | OpenBook 市場級金庫。**未使用。**               |
| 遺留 | `serum_vault_signer`                | OpenBook  | 市場級金庫簽署者。**未使用。**                     |

## `AmmInfo`

根狀態帳戶。配置幾乎與 AMM v4 相同——池參數、小數位、費用、金庫/鑄幣參考——加上一個新增項：指向查詢表的 `model_data_key` 欄位。

```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,
}
```

關鍵的整合者面向欄位：

* **`model_data_key`** — 查詢表的地址。必須傳遞給每個指令。
* **`fees`** — 與 AMM v4 相同的結構。預設為 0.25% 交易費、0.22% LP / 0.03% 協議分割。
* **`coin_vault`**、**`pc_vault`** — 池的金庫。
* **`status`** — 位元遮罩，控制 swap/deposit/withdraw/crank 是否啟用。
* **`out_put.need_take_pnl_*`** — 由 `WithdrawPnl` 掃除。

## `ModelDataInfo`

查詢表。價格/數量點的大型稀疏陣列。

```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
}
```

**生命週期：**

建立這些表的設定指令——`InitModelData`（建立帳戶）和 `UpdateModelData`（填充元素，設定 `valid_data_count`）——在 2026-06-22 升級中**被移除**。現有池上的表現在是**固定的**。在執行時，其餘可呼叫的指令仍然使用它們：

* **Swap / deposit / withdraw** 呼叫查詢函數，在 `elements[0..valid_data_count]` 內進行二分搜尋和插值。

## `DataElement`

表中的原子項目。必須排序（x 遞增、y 遞減、price 遞增）以便二分搜尋正常工作。

```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)
}
```

填充表時，管理員指定這些預先縮放的值。程式不在鏈上驗證排序順序（為了速度），所以排序錯誤會導致報價不正確。

## 授權者和金庫

與 AMM v4 相同：

* **`amm_authority`** 是使用種子 `["amm authority"]` 衍生的單一程式級 PDA。它擁有所有池金庫並簽署它們的操作。
* **金庫**是 SPL Token 帳戶，其擁有者是 `amm_authority`，不是 ATA。

**不支援** Token-2022。

## 狀態位元遮罩

與 AMM v4 相同。控制 swap/deposit/withdraw/crank 是否啟用。

## 費用和 PnL 追蹤

`out_put` 結構追蹤：

* **`need_take_pnl_coin`**、**`need_take_pnl_pc`** — 已累積但尚未掃除的協議費用。`WithdrawPnl` 將這些移出。
* **`swap_coin_in_amount`**、`swap_pc_in_amount` 等 — 分析計數器。

**池資產計算（解耦後）。** 因為不再有資金作為 OpenBook 未平倉訂單進行託管，池的總資產現在完全從金庫計算：

```
舊：總資產 = 金庫餘額 + 未平倉訂單資金（native_coin_total / native_pc_total）− 待處理 PnL（need_take_pnl）
新：總資產 = 金庫餘額 − 待處理 PnL（need_take_pnl）
```

從 OpenOrders 餘額重建池價值的索引器和報價程式碼必須刪除該項。

## 帳戶大小

**`ModelDataInfo` 很大**（約 1.2 MB，因為 50,000 個元素 × 每個元素 24 位元組）。這就是為什麼建立 Stable 池需要明確的租金和帳戶預先分配。Raydium SDK 和工具透明地處理這個問題；整合者很少需要手動分配。

## 從頭衍生帳戶

與 AMM v4 一樣，Stable AMM 使用**有種子的金鑰**（不是純 PDA）。規範池身份通過以下方式衍生：

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

金庫、LP 鑄幣、目標訂單等也類似。實際上，使用 SDK 或 API 來取得預先計算的地址。

## 在哪裡閱讀什麼

* **指令帳戶列表**：[`products/stable/instructions`](/zh-Hant/products/stable/instructions)。
* **插值如何使用表**：[`products/stable/math`](/zh-Hant/products/stable/math)。
* **費用結構和 WithdrawPnl**：[`products/stable/fees`](/zh-Hant/products/stable/fees)。
* **2026-06-22 OpenBook 解耦**：[`reference/changelog`](/zh-Hant/reference/changelog)。

來源：

* [`reference/program-addresses`](/zh-Hant/reference/program-addresses)
