> ## 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 с её аргументами, учётными записями пула и OpenBook, которые она ожидает, и предусловиями/постусловиями для каждой.

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

  [Открыть английскую версию →](/products/amm-v4/instructions)
</Info>

<Info>
  Начиная с обновления программы 2026-07, зависимость AMM v4 от OpenBook / Serum была **удалена**. Устаревшие инструкции v1 `SwapBaseIn` / `SwapBaseOut`, `Deposit` и `Withdraw` **сохраняют свои старые макеты учётных записей** для обратной совместимости: учётные записи маркета по-прежнему принимаются в своих старых позициях, но они **больше не проверяются и не используются** (CPI не выполняется). Новые интеграции должны использовать точки входа V2 swap, которые полностью исключают учётные записи маркета. Несколько инструкций были удалены и теперь возвращают ошибку — см. [запись в журнале изменений](/ru/reference/changelog/2026-07-22-amm-v4-openbook-removal). Списки учётных записей ниже используют имена полей из Raydium SDK; базовый IDL иногда использует префиксы `serum_*`.
</Info>

## Инвентарь инструкций

| Группа              | Инструкция            | тег | Примечания                                                                                                |
| ------------------- | --------------------- | --- | --------------------------------------------------------------------------------------------------------- |
| Жизненный цикл пула | `Initialize2`         | 1   | Единственная инструкция создания пула (UI по умолчанию использует CPMM для новых пулов).                  |
| Ликвидность         | `Deposit`             | 3   | Добавить ликвидность, получить LP. Макет не изменился (учётные записи маркета игнорируются).              |
| Ликвидность         | `Withdraw`            | 4   | Сжечь LP, получить обе стороны пропорционально. Макет не изменился (учётные записи маркета игнорируются). |
| Своп                | `SwapBaseIn`          | 9   | Своп с точным входом. Макет v1 не изменился; учётные записи маркета принимаются, но игнорируются.         |
| Своп                | `SwapBaseOut`         | 11  | Своп с точным выходом. То же самое.                                                                       |
| Своп                | `SwapBaseInV2`        | 16  | **Рекомендуется.** Своп с точным входом без учётных записей маркета.                                      |
| Своп                | `SwapBaseOutV2`       | 17  | **Рекомендуется.** Своп с точным выходом без учётных записей маркета.                                     |
| Обслуживание        | `SetParams`           | 6   | Администратор: изменить параметры пула. **Макет + значения `param` изменены** (критическое изменение).    |
| Обслуживание        | `WithdrawPnl`         | 7   | Снять накопленный протокольный PnL. **Макет учётных записей изменён** (критическое изменение).            |
| Обслуживание        | `CreateConfigAccount` | 14  | Администратор: инициализировать PDA `AmmConfig` уровня программы.                                         |
| Обслуживание        | `UpdateConfigAccount` | 15  | Администратор: изменить параметры конфигурации уровня программы.                                          |

SDK предоставляет построители только для инструкций, ориентированных на пользователя. Инструкции обслуживания обычно вызываются хранителем Raydium.

**Удалены / больше не вызываются** (теперь возвращают `unimplemented!`, и их построители клиента были удалены): `Initialize` (тег 0, используйте `Initialize2`), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, используйте `Initialize2`), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

Инициализировать новый пул AMM v4, привязанный к существующему маркету OpenBook.

**Аргументы**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Учётные записи** (записываемая `W`, подписант `S`)

| #  | Имя                          | W | S | Примечания                                                  |
| -- | ---------------------------- | - | - | ----------------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                                  |
| 2  | `system_program`             |   |   |                                                             |
| 3  | `rent`                       |   |   |                                                             |
| 4  | `amm`                        | W |   | Учётная запись `AmmInfo` (ключ с seed).                     |
| 5  | `amm_authority`              |   |   | PDA программы.                                              |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (с seed).                             |
| 7  | `lp_mint`                    | W |   |                                                             |
| 8  | `coin_mint`                  |   |   |                                                             |
| 9  | `pc_mint`                    |   |   |                                                             |
| 10 | `pool_coin_token_account`    | W |   |                                                             |
| 11 | `pool_pc_token_account`      | W |   |                                                             |
| 12 | `pool_withdraw_queue`        | W |   |                                                             |
| 13 | `pool_target_orders_account` | W |   |                                                             |
| 14 | `pool_lp_token_account`      | W |   | ATA LP создателя.                                           |
| 15 | `pool_temp_lp_token_account` | W |   | Временная учётная запись.                                   |
| 16 | `market_program`             |   |   | Программа OpenBook.                                         |
| 17 | `market`                     |   |   | Маркет OpenBook.                                            |
| 18 | `user_wallet`                | W | S | Создатель. Оплачивает rent и финансирует начальный депозит. |
| 19 | `user_token_coin`            | W |   |                                                             |
| 20 | `user_token_pc`              | W |   |                                                             |

**Постусловия**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, где `INIT_BURN` ≈ 100 LP единиц выводятся из обращения.
* Никакие заказы OpenBook не размещаются (сетка книги заказов была удалена). `market_program` / `market` по-прежнему передаются, но только сохраняются как справочные поля; `coin_lot_size` / `pc_lot_size` / `min_size` инициализируются в `0`.

**Частые ошибки** — `InvalidInput` (несовпадающие десятичные разряды, неотсортированные), `NotAllowed`.

## `Deposit`

Добавить ликвидность.

**Аргументы**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base на coin, 1 = base на pc
// (некоторые варианты SDK также принимают other_amount_min)
```

**Учётные записи** (сокращённо)

| #  | Имя                       | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**Математика** — стандартная пропорциональная. Используя *эффективные* резервы пула (хранилища + в книге), SDK вычисляет пару coin/pc, которая даёт заданное количество LP, и проверяет её против `max_*`. Возвращает `ExceededSlippage`, если одна из сторон превышает лимит.

## `Withdraw`

Сжечь LP, получить обе стороны.

**Аргументы**

```
amount: u64    // LP для сжигания
```

**Учётные записи** — как `Deposit` с обратным направлением; `lp_mint` записываемый для сжигания, пользовательские ATA являются получателями. Макет учётных записей не изменился (учётные записи маркета по-прежнему передаются позиционно, игнорируются). Больше нет шага settle-from-OpenBook — пропорциональная математика использует балансы хранилища напрямую.

## `SwapBaseIn`

Своп с точным входом. Всегда **путь через AMM** (не маршрутизируется через сопоставление OpenBook).

<Note>
  **Используйте варианты V2 для нового кода.** Поскольку зависимость AMM v4 от OpenBook была удалена, точки входа V1 (`SwapBaseIn`, `SwapBaseOut`) по-прежнему ожидают полный список из 17 учётных записей (или 18 с опциональной учётной записью target-orders), но учётные записи OpenBook/маркета теперь **принимаются позиционно и игнорируются** — они не проверяются и CPI не выполняется. Передача неправильного *количества* учётных записей по-прежнему возвращает `WrongAccountsNumber`, но *содержимое* учётных записей маркета больше не проверяется. Новые интеграции должны использовать [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), которые принимают гораздо меньший список учётных записей и представляют канонический путь выполнения сегодня. Формы V1 задокументированы здесь для полноты и для чтения существующих транзакций в цепи.
</Note>

**Аргументы**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Учётные записи** (сокращённо)

| #  | Имя                         | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Математика** — см. [`products/amm-v4/math`](/ru/products/amm-v4/math).

**Предусловия**

* `amm.status` позволяет своп (бит 0 маски статуса не установлен).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` содержит как минимум `amount_in`.

**Постусловия**

* Пользователь теряет `amount_in` исходного токена, получает `amount_out ≥ minimum_amount_out` целевого токена.
* `need_take_pnl_*` увеличивается на долю протокольного сбора.
* Примечание: счётчики аналитики `state_data.swap_*_in_amount` / `swap_*_out_amount` **больше не обновляются** — их значения заморожены. Используйте логи торговли для аналитики объёма.

**Частые ошибки** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (идентичные монеты coin/pc).

## `SwapBaseOut`

Своп с точным выходом, обратный `SwapBaseIn`. Те же учётные записи.

**Аргументы**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

Варианты точек входа swap (теги **16** / **17**), которые **полностью пропускают учётные записи OpenBook**. Математика идентична пути V1, но список учётных записей сокращается до только AMM и пользователя — **8 учётных записей, и `amm_open_orders` не передаётся**:

| # | Имя                         | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

Резервы пула теперь являются балансами хранилища (минус ожидающий PnL), поэтому математика котировки прямолинейна и идентична пути v1. Используйте V2 для экономии вычислений и избежания передачи (теперь игнорируемых) учётных записей маркета. Маршрутизатор Raydium всегда использует форму V2 при маршрутизации через AMM v4.

Аргументы те же, что и в формах V1 (`amount_in / minimum_amount_out` для `SwapBaseInV2`; `max_amount_in / amount_out` для `SwapBaseOutV2`).

## `MonitorStep` и другие удалённые инструкции

<Warning>
  **Удалены — больше не вызываются.** Начиная с обновления 2026-07, `MonitorStep` (тег 2) был удалён из программы и теперь **возвращает ошибку** (`unimplemented!`) при вызове. Его построитель клиента также был удалён. То же самое относится к `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13) и устаревшим точкам входа создания пула `Initialize` (0) / `PreInitialize` (10) — используйте вместо этого `Initialize2`.
</Warning>

Исторически `MonitorStep` управлял взаимодействием пула с OpenBook: он урегулировал заполненные заказы (перемещая выручку из хранилищ маркета в хранилища пула через CPI OpenBook), отменял устаревшие заказы и размещал новые заказы для закрытия разрыва между `target_orders` и `amm_open_orders`. С удалением зависимости OpenBook нечего управлять и инструкция удалена. Любой хранитель или интеграция, которые по-прежнему её вызывают, должны удалить вызов.

## `WithdrawPnl` / `TakePnl`

Администраторский сбор накопленных протокольных сборов.

**Аргументы**

* `WithdrawPnl` не принимает аргументы; он читает `need_take_pnl_*` и перемещает эти точные суммы.

<Warning>
  **Критическое изменение (только администратор).** Список учётных записей сократился с 17 (+1 опциональная) до **10** — `amm_open_orders` и все шесть учётных записей маркета были удалены — **без совместимого разбора**. Старый макет не совпадает (старый #5 был `amm_open_orders`, теперь `pool_coin_token_account`) и не работает с ошибками типа `InvalidCoinVault`. Инструментарий администратора должен быть обновлён.
</Warning>

**Учётные записи** (новый макет из 10 учётных записей)

| #  | Имя                       | W | S |                                 |
| -- | ------------------------- | - | - | ------------------------------- |
| 1  | `token_program`           |   |   |                                 |
| 2  | `amm`                     | W |   |                                 |
| 3  | `amm_config`              |   |   |                                 |
| 4  | `amm_authority`           |   |   |                                 |
| 5  | `pool_coin_token_account` | W |   |                                 |
| 6  | `pool_pc_token_account`   | W |   |                                 |
| 7  | `pnl_coin_token_account`  | W |   | Получатель.                     |
| 8  | `pnl_pc_token_account`    | W |   |                                 |
| 9  | `pnl_owner`               |   | S | Администраторский мультиподпис. |
| 10 | `amm_target_orders`       | W |   |                                 |

**Эффект**

* Передаёт `need_take_pnl_coin` из `pool_coin_token_account` в `pnl_coin_token_account`.
* То же самое для pc.
* Обнуляет `need_take_pnl_coin` и `need_take_pnl_pc`.
* **Изменение логики**: если баланс хранилища недостаточен для покрытия накопленного PnL, инструкция возвращает `TakePnlError` напрямую (она больше не манипулирует состоянием книги заказов).

Никакого изменения резервов, поскольку накопленный PnL уже был исключён из инварианта.

## `SetParams`

Изменения параметров администратором, вызываемые мультиподписью Raydium. Аргументы — это тег `param: u8` + полезная нагрузка.

<Warning>
  **Критическое изменение (только администратор).** Список учётных записей был сокращен до просто `[amm (W), admin (S)]` (полномочия, open-orders, target-orders, хранилища и все учётные записи маркета были удалены). Перечисление `param` было **перенумеровано и сокращено**: `Status` = 0, `State` = 1, `Fees` = **2** (было 9), `SetOpenTime` = **3** (было 11). Все параметры сетки книги заказов и `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` были удалены, и структура `SetParamsInstruction` потеряла `new_pubkey` и `last_order_distance`. Инструментарий администратора должен быть обновлён.
</Warning>

## Матрица изменения состояния

Столбец OpenBook исчез — ни одна инструкция больше не трогает книгу заказов.

| Инструкция                      | Предложение `lp_mint`                      | Хранилища                                | Счётчики PnL |
| ------------------------------- | ------------------------------------------ | ---------------------------------------- | ------------ |
| `Initialize2`                   | начальное предложение отчеканено создателю | `+ init_coin_amount`, `+ init_pc_amount` | 0            |
| `Deposit`                       | +                                          | + обе стороны                            | —            |
| `Withdraw`                      | −                                          | − обе стороны                            | —            |
| `SwapBaseIn` / `SwapBaseInV2`   | —                                          | + in, − out                              | + доля pnl   |
| `SwapBaseOut` / `SwapBaseOutV2` | —                                          | + in, − out                              | + доля pnl   |
| `WithdrawPnl`                   | —                                          | − (pnl снято)                            | 0            |
| `SetParams`                     | —                                          | —                                        | —            |

## Что дальше

* [`products/amm-v4/code-demos`](/ru/products/amm-v4/code-demos) — примеры TypeScript для потоков swap и LP.
* [`products/amm-v4/fees`](/ru/products/amm-v4/fees) — детали `WithdrawPnl` и разделение сборов.
* [`reference/error-codes`](/ru/reference/error-codes) — таблица прямых ссылок (ошибки AMM v4 указаны на этой странице).

Источники:

* [Программа Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Модуль Raydium SDK v2 `Liquidity`
* Программа OpenBook — проверки учётных записей на стороне маркета
