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

# 2026-06-22 — Stable AMM: удаление неиспользуемого кода OpenBook

> Stable AMM удаляет неиспользуемые счета и код для маркет-мейкинга OpenBook: меньше аккаунтов в Swap/Deposit/Withdraw, критическое изменение WithdrawPnl и упрощённая формула расчёта активов пула.

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

  [Открыть английскую версию →](/reference/changelog/2026-06-22-stable-amm-openbook-cleanup)
</Info>

Stable AMM — это **независимая программа** (собственный program ID, не торгуется через AMM v4). Она **давно перестала размещать ордера в OpenBook**; путь маркет-мейкинга через OpenBook неактивен уже много лет. Это обновление — очистка: **удаляет теперь мёртвые счета и код, связанные с маркетом**, из макетов инструкций. Оно **не меняет** поведение живой торговли — ордеров OpenBook давно не осталось.

## TL;DR для интеграторов

* **Swap / Deposit / Withdraw продолжают работать без изменений.** Транзакции, собранные со старыми макетами аккаунтов, всё ещё выполняются — удалённые счета Serum/маркета просто игнорируются. Вам **не нужно** обновлять клиент, чтобы сохранить существующие потоки.
* **Но вам стоит перейти на новые, более компактные макеты в ближайшее время.** Новые макеты убирают мёртвые счета маркета, сокращая размер транзакции: `SwapBaseIn` / `SwapBaseOut` идут **18 → 9** аккаунтов, `Deposit` **14 → 12**, `Withdraw` **21 (+1 опциональный) → 12**. Путь совместимости будет удалён в будущем релизе.
* **`WithdrawPnl` — критическое изменение (только для администраторов).** Идёт **16 (+1 опциональный) → 10** аккаунтов **без парсинга совместимости**. Отправка старого макета приводит к ошибкам валидации, таким как `InvalidTokenCoin`, из-за смещения аккаунтов (старый #3 был `open_orders`). Любой инструмент администратора, вызывающий `WithdrawPnl`, должен быть обновлён.
* **Реферальный сбор удалён из `Withdraw` и `WithdrawPnl`.** Опциональный аккаунт `referrer_pc_wallet` всё ещё можно передать для обратной совместимости в старом макете `Withdraw`, но он больше не действует.
* **Учёт активов пула упрощён.** Общие активы пула теперь — это `остатки в хранилище − ожидающий PnL`; термин OpenBook open-order — уже нулевой на практике — удалён из формулы. Индексеры и код котировок, которые всё ещё добавляли термин OpenOrders, должны его удалить.
* **Большинство инструкций удалены.** Остаются вызываемыми только `SwapBaseIn`, `SwapBaseOut`, `Deposit`, `Withdraw` и `WithdrawPnl`. `Initialize`, `PreInitialize`, `InitModelData`, `UpdateModelData`, `MonitorStep`, `SetParams`, `WithdrawSrm` и `SimulateInfo` больше не вызываются.

## Почему это важно (для трейдеров, LP и интеграторов)

* **Трейдеры** не видят изменений в поведении свопа или форме цены — таблица поиска кривой не изменилась. Свопы с новым макетом дешевле размещать, потому что транзакция содержит на девять аккаунтов меньше.
* **LP** сохраняют ту же экономику депозита/вывода. Ликвидность давно полностью находится в хранилищах пула, поэтому стоимость пула полностью на пуле; это обновление только удаляет устаревшую сантехнику маркета.
* **Интеграторы** получают меньше, проще транзакции и модель котировок с одним термином меньше (уже рудиментарным). Существующие интеграции не ломаются (кроме администраторского `WithdrawPnl`), но прослойка совместимости временна — мигрируйте в удобное время, прежде чем она будет удалена.

## Изменения на уровне инструкций

### `SwapBaseIn` / `SwapBaseOut` — 18 → 9 аккаунтов (старый макет всё ещё совместим)

Девять аккаунтов 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 должны всё ещё занимать свои позиции, но их содержимое больше не валидируется и не используется.

### `Deposit` — 14 → 12 аккаунтов (старый макет всё ещё совместим)

`amm_open_orders` (старый #3) и `serum_market` (старый #9) удалены. Когда передаются 14 аккаунтов, старый макет парсится для совместимости.

### `Withdraw` — 21 (+1 опциональный) → 12 аккаунтов (старый макет всё ещё совместим)

Девять аккаунтов Serum удалены. Старые макеты из 21 или 22 аккаунтов всё ещё принимаются, **но логика реферального сбора для 22-го опционального `referrer_pc_wallet` удалена** — аккаунт всё ещё можно передать, но он больше не действует.

### `WithdrawPnl` — 16 (+1 опциональный) → 10 аккаунтов (⚠️ без пути совместимости, критическое изменение)

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

## Изменение расчёта активов пула

Исторически формула добавляла средства, которые пул держал как открытые ордера в своём аккаунте OpenOrders в OpenBook. Этот термин был нулевым на практике с тех пор, как пул перестал размещать ордера; это обновление полностью удаляет его из формулы, оставляя только расчёт на основе хранилища:

|        | Формула                                                                                                                   |
| ------ | ------------------------------------------------------------------------------------------------------------------------- |
| Старая | `остатки в хранилище + средства в открытых ордерах (native_coin_total / native_pc_total) − ожидающий PnL (need_take_pnl)` |
| Новая  | `остатки в хранилище − ожидающий PnL (need_take_pnl)`                                                                     |

## Обновлённые страницы

* `products/stable/overview` — модель чистого AMM, удалена зависимость от OpenBook, обновлены таблицы сравнения и количества аккаунтов.
* `products/stable/index` — "Что это такое" и таблица ключевых фактов больше не упоминают зависимость от OpenBook.
* `products/stable/accounts` — аккаунты OpenBook удалены из инвентаря; поля Serum/open-orders в `AmmInfo` отмечены как устаревшие/неиспользуемые; добавлена заметка об активах пула.
* `products/stable/instructions` — новые таблицы аккаунтов для Swap / Deposit / Withdraw / WithdrawPnl с примечаниями о совместимости; все остальные инструкции (`Initialize`, `PreInitialize`, `InitModelData`, `UpdateModelData`, `MonitorStep`, `SetParams`, `WithdrawSrm`, `SimulateInfo`) отмечены как удалённые / больше не вызываются.
* `products/stable/math` — обновление формулы активов пула; раздел `MonitorStep` / OpenBook переформулирован как давно устаревший.
* `products/stable/fees` — раздел "PnL из OpenBook" удалён; поток сбора больше не урегулирует заполнения OpenBook.
* `products/stable/code-demos` — обновлено руководство по количеству аккаунтов; SDK всё ещё абстрагирует выбор макета.

**Проверено на**:

* исходном коде программы `raydium-stable` (post-upgrade `instruction.rs` / `processor.rs`).
* развёрнутой программе Stable AMM на Solana mainnet-beta.
