Stable AMM — это независимая программа с собственным ID программы. Это не режим программы AMM v4, и она не вызывается «через» AMM v4 — она развёрнута, обновляется и вызывается отдельно. Она похожа на AMM v4 только в соглашениях о комиссиях и макетах учётных записей.
Обновление от 2026-06-22 — удаление мёртвого кода OpenBook (market). Stable AMM давно перестала размещать ордера на OpenBook; путь маркет-мейкинга через orderbook был неактивен годами. Это обновление удаляет оставшиеся учётные записи и код, связанные с рынком — оно не изменяет поведение живой торговли.Два следствия для интеграторов:
- Меньше учётных записей.
SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), и Withdraw (21/22 → 12) удаляют мёртвые учётные записи Serum/market. Старые макеты по-прежнему парсятся для обратной совместимости. WithdrawPnl (16 → 10) — это жёсткое критическое изменение без пути совместимости (только администратор).
- Большинство инструкций удалены. Остаются вызываемыми только
SwapBaseIn, SwapBaseOut, Deposit, Withdraw и WithdrawPnl. Все остальные инструкции больше не могут быть вызваны.
Журнал изменений: reference/changelog.
Инвентарь инструкций
Вызываемые
| Инструкция | Категория | Примечания |
|---|
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.
SwapBaseOut
Swap с точным выходом (обратный SwapBaseIn). Тот же макет из 9 учётных записей, другое направление математики.
Аргументы
max_amount_in: u64
amount_out: u64
WithdrawPnl
Только администратор. Снять накопленные комиссии протокола из need_take_pnl_* в назначенные учётные записи PnL.
Жёсткое критическое изменение — без пути совместимости. Эта инструкция не имеет парсинга для старого макета. Отправка старого макета завершается ошибками валидации, такими как InvalidTokenCoin, из-за несоответствия учётных записей (старая #3 была open_orders). Инструментарий администратора, который вызывает WithdrawPnl, должен быть обновлён на новый макет из 10 учётных записей.
Аргументы — нет (управляется состоянием).
Учётные записи — новый макет, фиксированные 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 для котировок (см. Примеры кода).
Что дальше
- Учётные записи — для макетов и размеров полей учётных записей.
- Математика — для логики интерполяции таблицы поиска.
- Примеры кода — чтобы увидеть, как вызывать эти инструкции из SDK.
Источники:
raydium-stable/program/src/instruction.rs (enum и pack/unpack)
raydium-stable/program/src/processor.rs (логика выполнения)