> ## 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 mint, authority — плюс аккаунты OpenBook, к которым привязан пул.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/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        | Хранилище пула на стороне coin (ATA `amm_authority`).                                                                          |
| Пул                   | `pool_pc_token_account`              | SPL Token        | Хранилище пула на стороне pc.                                                                                                  |
| Пул                   | `lp_mint`                            | SPL Token        | Fungible LP mint.                                                                                                              |
| Пул                   | `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» сохранён в IDL и названиях полей AMM v4 для обратной совместимости. Эти аккаунты больше не функциональны после удаления OpenBook.

## `AmmInfo`

Корневой аккаунт состояния пула. Большой (≈ 752 байта), так как содержит ссылки на пул и OpenBook встроенными.

```rust theme={null}
// programs/amm/src/state.rs (сокращённо; порядок полей / имена следуют IDL)
pub struct AmmInfo {
    pub status: u64,           // битовая маска: swap/deposit/withdraw/crank включены
    pub nonce:  u64,           // bump для получения amm_authority
    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,   // OpenOrders пула на OpenBook
    pub market: Pubkey,        // маркет OpenBook
    pub market_program: Pubkey, // ID программы OpenBook
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // администратор (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  → используется интеграцией 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,        // по-прежнему обновляется — накопленная комиссия протокола (сторона coin)
    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 пула. `coin` — это `token_0` по соглашению Serum/OpenBook (базовый), `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`](/ru/products/amm-v4/instructions)), которые полностью пропускают эти аккаунты.
</Note>

Когда вы вызываете устаревшую инструкцию v1 `SwapBaseIn` / `SwapBaseOut`, `Deposit` или `Withdraw`, **количество** аккаунтов должно по-прежнему соответствовать старому макету (аккаунты маркета занимают свои исторические позиции), но их **содержимое больше не проверяется** — никакой CPI не выполняется против них. Новый код должен использовать варианты V2 для свопов, которые вообще не принимают эти аккаунты.

```ts theme={null}
const market = ...;  // PublicKey маркета OpenBook

// Поля, которые 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_open_orders` пула — это принадлежащий OpenBook аккаунт, содержащий состояние лимитных ордеров пула на этом маркете: активные ордеры, урегулированные балансы, рефереры и т. д. `amm_target_orders` — со стороны AMM: он содержит *предполагаемую* сетку AMM (цена/размер для каждого слота ордера), чтобы программа могла дёшево сравнить с тем, что в настоящий момент выставлено, и разместить / отменить разницу.

## Authority PDAs

Существует ровно один PDA `amm_authority` для всей программы AMM v4. Его seed тривиален (`["amm authority"]`), а его bump хранится на каждом `AmmInfo`. Эта authority подписывает все перемещения токенов для всех пулов 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,
);
```

Существует отдельная authority, **ограниченная пулом**, полученная для каждого пула для подписания операций OpenBook (`amm_authority` выше фактически охватывает обе в дизайне этой программы; разные версии использовали разные получения, поэтому проверьте `AmmInfo.nonce` конкретного пула в коде).

## Хранилища

Хранилища SPL Token пула — это стандартные аккаунты токенов, чей `owner` — это `amm_authority`. Не ATAs — их адреса — это специфичные PDAs, полученные при `Initialize` с seeds `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]`. Адреса хранятся на `AmmInfo`; получение — это одноразовая любопытство.

Token-2022 **не поддерживается**. Программа жёстко кодирует ID программы SPL Token для всех перемещений хранилищ. Попытка привязать пул AMM v4 к минту Token-2022 не удаётся при `Initialize`.

## LP mint

Классический SPL Token mint, чья authority — это `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` | Флаг ограничения миграции, используемый операциями. |

Multisig Raydium устанавливает эти значения через `SetParams` (с `param = Status`). (`AdminCancelOrders` был удалён.)

## Наблюдение / оракул

**AMM v4 не имеет выделенного аккаунта наблюдения.** Другие протоколы, которым нужен TWAP в цепи, обычно потребляют пересечения книги OpenBook косвенно или читают вне цепи. Если вам нужен TWAP Raydium с поддержкой программы, используйте CPMM или CLMM.

## Получение аккаунтов пула с нуля

Поскольку AMM v4 не был разработан для детерминированных PDAs для каждой пары (это предшествует этому соглашению Solana), канонический `amm_id` — это **seeded keypair**, полученный с:

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

Тот же паттерн seeded-key применяется к `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`'s `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`](/ru/products/amm-v4/math).
* **Разделение комиссий и сравнение с CPMM/CLMM**: [`products/amm-v4/fees`](/ru/products/amm-v4/fees).
* **Списки аккаунтов инструкций**: [`products/amm-v4/instructions`](/ru/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`](/ru/reference/program-addresses) для канонических ID программ
* Протокол OpenBook / Serum для аккаунтов контрагента
