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

# AMM v4 帳戶

> AMM v4 流動性池的完整帳戶清單 — AmmInfo、TargetOrders、OpenOrders、金庫、LP 鑄幣、授權方 — 以及該池綁定的 OpenBook 帳戶。

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

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

<Info>
  自 2026-07 升級起，AMM v4 的 OpenBook / Serum 依賴已被 **移除** — 沒有指令再讀取或寫入 OpenBook 狀態。下列市場帳戶僅作為舊版 v1 指令佈局上的位置佔位符（被接受但忽略）以及 `AmmInfo` 上的參考欄位保留。請使用 V2 交換進入點，它們完全省略了這些帳戶。本頁仍將帳戶分組為「池擁有」和「OpenBook（舊版）」部分，以便閱讀較舊的交易。
</Info>

## 清單

AMM v4 池在建立時在 `AmmInfo` 上記錄一個綁定的市場。完整情況如下：

| 類別           | 帳戶                                  | 擁有者       | 角色                                            |
| ------------ | ----------------------------------- | --------- | --------------------------------------------- |
| 池            | `AmmInfo`                           | AMM v4 程式 | 池狀態：累積費用、狀態、金庫參考（以及作為舊版欄位的市場）。                |
| 池            | `amm_authority`                     | AMM v4 程式 | 程式擁有的 PDA，簽署金庫移動。在所有 AMM v4 池中共享。             |
| 池            | `amm_open_orders`                   | OpenBook  | 舊版 `OpenOrders` 參考。程式不再讀取/寫入；仍在 v1 佈局上按位置傳遞。  |
| 池            | `amm_target_orders`                 | AMM v4 程式 | 舊版目標訂單帳戶。仍由 `WithdrawPnl`（作為帳戶 #10）參考，但不構建網格。 |
| 池            | `pool_coin_token_account`           | SPL Token | 池的幣側金庫（`amm_authority` 的 ATA）。                |
| 池            | `pool_pc_token_account`             | SPL Token | 池的 pc 側金庫。                                    |
| 池            | `lp_mint`                           | SPL Token | 可互換的 LP 鑄幣。                                   |
| 池            | `pool_withdraw_queue`               | AMM v4 程式 | 延遲提款的舊版隊列；保持零長度。                              |
| 池            | `pool_temp_lp`                      | AMM v4 程式 | 輔助 LP 帳戶。                                     |
| 舊版（OpenBook） | `serum_market`                      | OpenBook  | 綁定的市場。在 v1 佈局上傳遞，但不再驗證或使用。                    |
| 舊版           | `serum_bids`、`serum_asks`           | OpenBook  | 買價/賣價隊列。被忽略。                                  |
| 舊版           | `serum_event_queue`                 | OpenBook  | 待處理事件。被忽略。                                    |
| 舊版           | `serum_coin_vault`、`serum_pc_vault` | SPL Token | 市場級金庫。被忽略。                                    |
| 舊版           | `serum_vault_signer`                | OpenBook  | 市場級 PDA。被忽略。                                  |

注意：為了向後相容性，「serum」前綴在 AMM v4 的 IDL 和欄位名稱中保留。OpenBook 移除後，這些帳戶不再有功能。

## `AmmInfo`

池的根狀態帳戶。大小（約 752 位元組），因為它內聯攜帶池和 OpenBook 參考。

```rust theme={null}
// programs/amm/src/state.rs (簡化版；欄位順序/名稱遵循 IDL)
pub struct AmmInfo {
    pub status: u64,           // 位掩碼：啟用交換/存入/提取/執行
    pub nonce:  u64,           // 用於衍生 amm_authority 的 bump
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // 內部狀態機
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // 舊版（OpenBook 批量大小）；現在初始化為 0
    pub pc_lot_size:   u64,    // 舊版；現在初始化為 0
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // 交易/協議/基金費率
    pub state_data: StateData,

    // 池擁有的帳戶：
    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,   // 池在 OpenBook 上的 OpenOrders
    pub market: Pubkey,        // OpenBook 市場
    pub market_program: Pubkey, // OpenBook 程式 ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // 管理員（多簽）
    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  → 由 OpenBook 整合使用
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → 協議的交換費份額
    pub pnl_denominator:          u64,     // 100 → 所以 12/100 = 12% 的費用，= 0.03% 的交易量
    pub swap_fee_numerator:       u64,     // 25  → 0.25% 總交換費
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,        // 仍在更新 — 累積協議費（幣側）
    pub need_take_pnl_pc:   u64,        // 仍在更新 — 累積協議費（pc 側）
    pub total_pnl_pc:   u64,            // 已棄用 — 不再更新
    pub total_pnl_coin: u64,            // 已棄用 — 不再更新
    pub pool_open_time: u64,            // 仍在使用 — 池開放時間戳
    pub padding: [u64; 2],              // 保留
    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,        // 已棄用
}
```

<Note>
  結構 **佈局未變**（位元組相容），所以現有的反序列化器繼續工作，但在 OpenBook 移除後，上面標記為 `已棄用` 的欄位 **不再被寫入** — `swap_*` 交易量計數器在其最後值處凍結。對於交易量分析，請使用交易日誌而不是這些欄位。只有 `need_take_pnl_*` 和 `pool_open_time` 被主動維護。
</Note>

面向整合者的欄位：

* **`coin_vault`**、**`pc_vault`** — 池的 SPL Token 金庫。根據 Serum/OpenBook 慣例，`coin` 是 `token_0`（基礎），`pc` 是 `token_1`（報價）。
* **`coin_decimals`**、**`pc_decimals`** — 與鑄幣相匹配。
* **`open_orders`**、**`target_orders`**、**`market`** — 舊版參考欄位。仍在 `AmmInfo` 上，仍在 v1 指令佈局上按位置傳遞，但程式不再讀取或驗證它們。V2 交換進入點省略了它們。
* **`fees.swap_fee_numerator / swap_fee_denominator`** — 合併的交易費。預設 `25 / 10_000 = 0.25%`。
* **`status`** — 位掩碼控制操作。可通過 `AdminSetStatus` 由管理員設定。
* **`state_data.need_take_pnl_*`** — 累積總費用與已清掃費用之間的差值。`TakePnl` 將這些清零。

## OpenBook 接線

<Note>
  **已移除。** OpenBook / Serum 依賴已從程式中刪除（2026-07 升級）。本部分描述的帳戶不再被驗證或使用。它們作為 `AmmInfo` 上的參考欄位和舊版 v1 指令佈局上的位置佔位符保留。使用 **V2 交換進入點**（[`SwapBaseInV2` / `SwapBaseOutV2`](/zh-Hant/products/amm-v4/instructions)），它們完全跳過這些帳戶。
</Note>

當你呼叫舊版 **v1** `SwapBaseIn` / `SwapBaseOut`、`Deposit` 或 `Withdraw` 指令時，帳戶 **計數** 必須仍然符合舊佈局（市場帳戶佔據其歷史位置），但它們的 **內容不再被檢查** — 不會針對它們發出 CPI。新程式碼應使用 V2 交換變體，它們根本不接受這些帳戶。

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

// OpenBook 在其市場帳戶上公開的欄位：
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 的 `amm_open_orders` 是一個 OpenBook 擁有的帳戶，在此市場上持有池的限價訂單狀態：活躍訂單、已結算餘額、推薦人等。`amm_target_orders` 是 AMM 側：它持有 AMM 的 *預期* 網格（每個訂單槽的價格/大小），以便程式可以廉價地與當前發佈的內容進行比較，並放置/取消差值。

## 授權 PDA

整個 AMM v4 程式恰好有一個 `amm_authority` PDA。其種子很簡單（`["amm authority"]`），其 bump 存儲在每個 `AmmInfo` 上。此授權簽署所有 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,
);
```

有一個單獨的 **池範圍** 授權，每個池衍生一個，以簽署 OpenBook 操作（上面的 `amm_authority` 實際上在此程式的設計中涵蓋兩者；不同版本使用不同的衍生，所以在程式碼中檢查特定池的 `AmmInfo.nonce`）。

## 金庫

池的 SPL Token 金庫是標準代幣帳戶，其 `owner` 是 `amm_authority`。不是 ATA — 它們的地址是在 `Initialize` 時衍生的特定 PDA，使用 `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]` 種子。地址存儲在 `AmmInfo` 上；衍生是一次性的好奇心。

**不支援** Token-2022。程式為所有金庫移動硬編碼 SPL Token 的程式 ID。嘗試將 AMM v4 池綁定到 Token-2022 鑄幣在 `Initialize` 時失敗。

## LP 鑄幣

一個經典的 SPL Token 鑄幣，其授權是 `amm_authority`。總供應量追蹤 LP 對池的所有權；燃燒 LP 按比例從兩個金庫返回代幣。因為 AMM v4 早於 CPMM，池狀態中沒有 `lp_supply` 鏡像 — 直接讀取鑄幣的鏈上供應量。

## 狀態位掩碼

`AmmInfo.status` 控制操作。位（位置可能因程式版本而異 — 通過源確認）：

| 位 | 標誌                  | 效果             |
| - | ------------------- | -------------- |
| 0 | `SWAP_DISABLED`     | `Swap*` 拒絕。    |
| 1 | `DEPOSIT_DISABLED`  | `Deposit` 拒絕。  |
| 2 | `WITHDRAW_DISABLED` | `Withdraw` 拒絕。 |
| 3 | `CLMM_LIKE_MIGRATE` | 操作使用的遷移門控標誌。   |

Raydium 多簽通過 `SetParams`（使用 `param = Status`）設定這些。（`AdminCancelOrders` 已被移除。）

## 觀察 / 預言機

**AMM v4 沒有專用的觀察帳戶。** 需要鏈上 TWAP 的其他協議通常間接消費 OpenBook 的簿交叉或讀取鏈下數據。如果你需要具有程式支援的 Raydium TWAP，請使用 CPMM 或 CLMM。

## 從頭衍生池的帳戶

因為 AMM v4 不是為確定性的每對 PDA 設計的（它早於該 Solana 慣例），規範的 `amm_id` 是一個 **有種子的密鑰對**，衍生方式如下：

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

相同的有種子密鑰模式適用於 `amm_open_orders`、`amm_target_orders`、`amm_withdraw_queue`、`pool_temp_lp`、`pool_coin_token_account`、`pool_pc_token_account` 和 `lp_mint`。SDK 和 API 為你預先計算這些；請參閱 `raydium-sdk-v2` 的 `Liquidity.getAssociatedPoolKeys`。

實際上，整合者從 `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` 或 SDK 讀取池的完整帳戶集。手動衍生很少需要。

## 生命週期快速參考

| 事件                                    | 建立的帳戶                                                                                              | 銷毀的帳戶 |
| ------------------------------------- | -------------------------------------------------------------------------------------------------- | ----- |
| `Initialize2`                         | `amm_info`、`amm_open_orders`、`amm_target_orders`、金庫、`lp_mint`、`pool_withdraw_queue`、`pool_temp_lp` | —     |
| `Deposit`                             | —（可能建立使用者 LP ATA）                                                                                  | —     |
| `Withdraw`                            | —                                                                                                  | —     |
| `SwapBaseIn` / `SwapBaseOut`（v1 / V2） | —（可能建立使用者 ATA）                                                                                     | —     |
| `WithdrawPnl`                         | —                                                                                                  | —     |

池及其帳戶無限期地持續。即使流動性完全提取，`AmmInfo` 仍然存在。

## 在哪裡讀取什麼

* **數學和費用算術**：[`products/amm-v4/math`](/zh-Hant/products/amm-v4/math)。
* **費用分割以及它與 CPMM/CLMM 的比較**：[`products/amm-v4/fees`](/zh-Hant/products/amm-v4/fees)。
* **指令帳戶列表**：[`products/amm-v4/instructions`](/zh-Hant/products/amm-v4/instructions)。
* **OpenBook 帳戶衍生**：OpenBook 程式文件（[`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)）。

來源：

* [Raydium AMM 程式 — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/zh-Hant/reference/program-addresses) 用於規範程式 ID
* OpenBook / Serum 協議用於對方帳戶
