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

> Текущий набор вызываемых инструкций — Deposit, Withdraw, SwapBaseIn, SwapBaseOut, WithdrawPnl — плюс инструкции, удалённые в обновлении от 2026-06-22.

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

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

<Info>
  Stable AMM — это **независимая программа** с собственным ID программы. Это **не** режим программы AMM v4, и она не вызывается «через» AMM v4 — она развёрнута, обновляется и вызывается отдельно. Она похожа на AMM v4 только в соглашениях о комиссиях и макетах учётных записей.
</Info>

<Warning>
  **Обновление от 2026-06-22 — удаление мёртвого кода OpenBook (market).** Stable AMM **давно перестала размещать ордера на OpenBook**; путь маркет-мейкинга через orderbook был неактивен годами. Это обновление удаляет оставшиеся учётные записи и код, связанные с рынком — оно **не** изменяет поведение живой торговли.

  Два следствия для интеграторов:

  1. **Меньше учётных записей.** `SwapBaseIn` / `SwapBaseOut` (**18 → 9**), `Deposit` (**14 → 12**), и `Withdraw` (**21/22 → 12**) удаляют мёртвые учётные записи Serum/market. Старые макеты по-прежнему парсятся для обратной совместимости. `WithdrawPnl` (**16 → 10**) — это **жёсткое критическое изменение без пути совместимости** (только администратор).
  2. **Большинство инструкций удалены.** Остаются вызываемыми только `SwapBaseIn`, `SwapBaseOut`, `Deposit`, `Withdraw` и `WithdrawPnl`. Все остальные инструкции больше не могут быть вызваны.

  Журнал изменений: [`reference/changelog`](/ru/reference/changelog).
</Warning>

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

### Вызываемые

| Инструкция    | Категория     | Примечания                                                                                                                                         |
| ------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Deposit`     | Ликвидность   | Добавить ликвидность, получить LP. Новый макет из 12 учётных записей; старый макет из 14 учётных записей по-прежнему совместим.                    |
| `Withdraw`    | Ликвидность   | Сжечь LP, получить обе стороны. Новый макет из 12 учётных записей; старый макет из 21/22 учётных записей по-прежнему совместим.                    |
| `SwapBaseIn`  | Swap          | Swap с точным входом. Новый макет из 9 учётных записей; старый макет из 18 учётных записей по-прежнему совместим.                                  |
| `SwapBaseOut` | Swap          | Swap с точным выходом. Новый макет из 9 учётных записей; старый макет из 18 учётных записей по-прежнему совместим.                                 |
| `WithdrawPnl` | Администратор | Снять накопленные комиссии протокола. Новый макет из 10 учётных записей (**жёсткое критическое изменение — без совместимости со старым макетом**). |

### Удалённые (больше не вызываемые)

Они были удалены в обновлении от 2026-06-22 и больше не могут быть вызваны. См. [Удалённые инструкции](#удалённые-инструкции).

| Инструкция        | Бывшая категория | Бывшее назначение                                         |
| ----------------- | ---------------- | --------------------------------------------------------- |
| `Initialize`      | Жизненный цикл   | Создать пул.                                              |
| `PreInitialize`   | Жизненный цикл   | Вспомогательная функция предварительного выделения.       |
| `InitModelData`   | Настройка модели | Создать и инициализировать таблицу поиска.                |
| `UpdateModelData` | Настройка модели | Заполнить до 5 элементов таблицы за вызов.                |
| `MonitorStep`     | Crank            | Урегулировать заполнения OpenBook, переразместить ордера. |
| `SetParams`       | Администратор    | Изменить параметры пула.                                  |
| `WithdrawSrm`     | Устаревшее       | Снять возвраты скидок на комиссии SRM.                    |
| `SimulateInfo`    | Диагностика      | Вспомогательная функция котировки только для чтения.      |

## `Deposit`

Добавить ликвидность, получить токены LP.

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

```
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base on coin, 1 = base on pc
```

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

| #  | Имя                  | W | S | Примечания                            |
| -- | -------------------- | - | - | ------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                            |
| 1  | `amm`                | W |   | `AmmInfo` пула.                       |
| 2  | `amm_authority`      |   |   | PDA уровня программы.                 |
| 3  | `amm_target_orders`  | W |   |                                       |
| 4  | `amm_lp_mint`        | W |   | Минт LP.                              |
| 5  | `amm_coin_vault`     | W |   | Хранилище coin пула.                  |
| 6  | `amm_pc_vault`       | W |   | Хранилище pc пула.                    |
| 7  | `model_data_account` |   |   | **Таблица поиска только для чтения.** |
| 8  | `user_source_coin`   | W |   | Ввод coin пользователя.               |
| 9  | `user_source_pc`     | W |   | Ввод pc пользователя.                 |
| 10 | `user_dest_lp`       | W |   | ATA LP пользователя.                  |
| 11 | `user_source_owner`  |   | S | Подписант транзакции.                 |

**Совместимость**: `amm_open_orders` (старая #3) и `serum_market` (старая #9) удалены. Когда передаётся **14** учётных записей, инструкция парсится со старым макетом из 14 учётных записей; учётные записи Serum игнорируются.

**Математика** — стандартная пропорциональная с использованием таблицы поиска для вычисления соотношения. SDK вычисляет пару coin/pc для желаемого количества LP и проверяет против максимальных лимитов.

## `Withdraw`

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

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

```
amount: u64            // Токены LP для сжигания
```

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

| #  | Имя                  | W | S | Примечания                            |
| -- | -------------------- | - | - | ------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                            |
| 1  | `amm`                | W |   | `AmmInfo` пула.                       |
| 2  | `amm_authority`      |   |   | PDA уровня программы.                 |
| 3  | `amm_target_orders`  | W |   |                                       |
| 4  | `amm_lp_mint`        | W |   | Минт LP.                              |
| 5  | `amm_coin_vault`     | W |   | Хранилище coin пула.                  |
| 6  | `amm_pc_vault`       | W |   | Хранилище pc пула.                    |
| 7  | `model_data_account` |   |   | **Таблица поиска только для чтения.** |
| 8  | `user_source_lp`     | W |   | Источник LP пользователя.             |
| 9  | `user_dest_coin`     | W |   | Вывод coin пользователя.              |
| 10 | `user_dest_pc`       | W |   | Вывод pc пользователя.                |
| 11 | `user_lp_owner`      |   | S | Подписант транзакции.                 |

**Совместимость**: девять учётных записей Serum (`amm_open_orders`, `serum_program`, `serum_market`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`, `serum_event_q`, `serum_bids`, `serum_asks`) удалены. Старые макеты из **21** или **22** учётных записей по-прежнему принимаются. Однако обратите внимание, что **логика реферальной комиссии для 22-й опциональной учётной записи `referrer_pc_wallet` была удалена** — она по-прежнему может быть передана, но больше не действует.

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

* `user_source_lp` содержит как минимум `amount`.

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

* `amount` токенов LP сжигаются.
* Пользователь получает количества coin и pc в соответствии с текущей пропорцией, скорректированной на накопленные комиссии.

## `SwapBaseIn`

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

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

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

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

| # | Имя                      | W | S | Примечания                                    |
| - | ------------------------ | - | - | --------------------------------------------- |
| 0 | `spl_token program`      |   |   | SPL Token.                                    |
| 1 | `amm`                    | W |   | `AmmInfo` пула.                               |
| 2 | `amm_authority`          |   |   | PDA уровня программы.                         |
| 3 | `amm_coin_vault`         | W |   | Хранилище coin пула.                          |
| 4 | `amm_pc_vault`           | W |   | Хранилище pc пула.                            |
| 5 | `model_data_account`     |   |   | **Таблица поиска только для чтения.**         |
| 6 | `user_source_token`      | W |   | Учётная запись входного токена пользователя.  |
| 7 | `user_destination_token` | W |   | Учётная запись выходного токена пользователя. |
| 8 | `user_source_owner`      |   | S | Пользователь (подписант транзакции).          |

**Совместимость**: девять учётных записей OpenBook (`amm_open_orders`, `serum_program`, `serum_market`, `serum_bids`, `serum_asks`, `serum_event_queue`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`) удалены. Если количество переданных учётных записей **не равно 9**, инструкция парсится со старым макетом из **18 учётных записей**; учётные записи Serum должны по-прежнему занимать свои позиции, но их содержимое больше не проверяется и не используется.

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

* `amm.status` разрешает swap.
* `user_source_token` содержит ≥ `amount_in`.

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

* Пользователь теряет `amount_in`, получает `amount_out ≥ minimum_amount_out`.
* Комиссии пула увеличивают счётчики `need_take_pnl_*`.

**Математика** — интерполяция таблицы поиска, как описано в [`products/stable/math`](/ru/products/stable/math).

## `SwapBaseOut`

Swap с точным выходом (обратный `SwapBaseIn`). Тот же макет из 9 учётных записей, другое направление математики.

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

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

## `WithdrawPnl`

Только администратор. Снять накопленные комиссии протокола из `need_take_pnl_*` в назначенные учётные записи PnL.

<Warning>
  **Жёсткое критическое изменение — без пути совместимости.** Эта инструкция **не имеет** парсинга для старого макета. Отправка старого макета завершается ошибками валидации, такими как `InvalidTokenCoin`, из-за несоответствия учётных записей (старая #3 была `open_orders`). Инструментарий администратора, который вызывает `WithdrawPnl`, **должен** быть обновлён на новый макет из 10 учётных записей.
</Warning>

**Аргументы** — нет (управляется состоянием).

**Учётные записи** — новый макет, фиксированные 10 учётных записей, только администратор (записываемая `W`, подписант `S`)

| # | Имя                 | W | S | Примечания                                              |
| - | ------------------- | - | - | ------------------------------------------------------- |
| 0 | `spl_token program` |   |   | SPL Token.                                              |
| 1 | `amm`               | W |   | `AmmInfo` пула.                                         |
| 2 | `amm_authority`     |   |   | PDA уровня программы.                                   |
| 3 | `amm_coin_vault`    | W |   | Хранилище coin пула.                                    |
| 4 | `amm_pc_vault`      | W |   | Хранилище pc пула.                                      |
| 5 | `amm_target_orders` | W |   |                                                         |
| 6 | `model_data`        |   |   | Таблица поиска.                                         |
| 7 | `user_coin`         | W |   | Учётная запись coin администратора (получает комиссию). |
| 8 | `user_pc`           | W |   | Учётная запись pc администратора (получает комиссию).   |
| 9 | `amm_admin`         |   | S | Администратор пула (подписант).                         |

**Изменение логики**: когда доступные средства пула недостаточны для вывода накопленного PnL, пул **больше не** переводится в `CancelAllOrdersState` / `Disabled`; инструкция возвращает `TakePnlError` напрямую. Опциональная `referrer_pc_wallet` также была удалена.

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

* `amm_admin` должен быть авторизован.

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

* `need_take_pnl_coin` и `need_take_pnl_pc` передаются на учётные записи администратора.
* Счётчики обнуляются.

## Удалённые инструкции

Следующие инструкции были удалены в обновлении от 2026-06-22 и **больше не могут быть вызваны**. Они документированы здесь только для того, чтобы интеграторы узнавали их в исторических транзакциях и SDK.

* **`Initialize`** — ранее инициализировала новый пул Stable AMM. Удалена.
* **`PreInitialize`** — вспомогательная функция предварительного выделения. Удалена.
* **`InitModelData`** — ранее создавала и инициализировала таблицу поиска `ModelDataInfo`. Удалена.
* **`UpdateModelData`** — ранее заполняла до 5 элементов таблицы поиска за вызов. Удалена.
* **`MonitorStep`** — crank OpenBook, который урегулировал заполнения и переразмещал сетку ордеров. Уже давно неактивна после того, как пул перестал размещать на OpenBook; теперь удалена.
* **`SetParams`** — изменения параметров администратором (статус, комиссии, владелец, ключ данных модели и т. д.). Удалена.
* **`WithdrawSrm`** — снимала возвраты скидок на комиссии SRM из пулов эпохи Serum. Удалена.
* **`SimulateInfo`** — вспомогательная функция котировки только для чтения. Удалена; используйте вспомогательные функции стабильной кривой SDK для котировок (см. [Примеры кода](/ru/products/stable/code-demos)).

## Что дальше

* [Учётные записи](/ru/products/stable/accounts) — для макетов и размеров полей учётных записей.
* [Математика](/ru/products/stable/math) — для логики интерполяции таблицы поиска.
* [Примеры кода](/ru/products/stable/code-demos) — чтобы увидеть, как вызывать эти инструкции из SDK.

Источники:

* `raydium-stable/program/src/instruction.rs` (enum и pack/unpack)
* `raydium-stable/program/src/processor.rs` (логика выполнения)
