Перейти к основному содержанию
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Stable AMM — это независимая программа с собственным ID программы. Это не режим программы AMM v4, и она не вызывается «через» AMM v4 — она развёрнута, обновляется и вызывается отдельно. Она похожа на AMM v4 только в соглашениях о комиссиях и макетах учётных записей.
Обновление от 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.

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

Вызываемые

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

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

Они были удалены в обновлении от 2026-06-22 и больше не могут быть вызваны. См. Удалённые инструкции.
ИнструкцияБывшая категорияБывшее назначение
InitializeЖизненный циклСоздать пул.
PreInitializeЖизненный циклВспомогательная функция предварительного выделения.
InitModelDataНастройка моделиСоздать и инициализировать таблицу поиска.
UpdateModelDataНастройка моделиЗаполнить до 5 элементов таблицы за вызов.
MonitorStepCrankУрегулировать заполнения 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)
#ИмяWSПримечания
0token_programSPL Token.
1ammWAmmInfo пула.
2amm_authorityPDA уровня программы.
3amm_target_ordersW
4amm_lp_mintWМинт LP.
5amm_coin_vaultWХранилище coin пула.
6amm_pc_vaultWХранилище pc пула.
7model_data_accountТаблица поиска только для чтения.
8user_source_coinWВвод coin пользователя.
9user_source_pcWВвод pc пользователя.
10user_dest_lpWATA LP пользователя.
11user_source_ownerSПодписант транзакции.
Совместимость: amm_open_orders (старая #3) и serum_market (старая #9) удалены. Когда передаётся 14 учётных записей, инструкция парсится со старым макетом из 14 учётных записей; учётные записи Serum игнорируются. Математика — стандартная пропорциональная с использованием таблицы поиска для вычисления соотношения. SDK вычисляет пару coin/pc для желаемого количества LP и проверяет против максимальных лимитов.

Withdraw

Сжечь LP, получить обе стороны пропорционально. Аргументы
amount: u64            // Токены LP для сжигания
Учётные записи — новый макет, 12 учётных записей (записываемая W, подписант S)
#ИмяWSПримечания
0token_programSPL Token.
1ammWAmmInfo пула.
2amm_authorityPDA уровня программы.
3amm_target_ordersW
4amm_lp_mintWМинт LP.
5amm_coin_vaultWХранилище coin пула.
6amm_pc_vaultWХранилище pc пула.
7model_data_accountТаблица поиска только для чтения.
8user_source_lpWИсточник LP пользователя.
9user_dest_coinWВывод coin пользователя.
10user_dest_pcWВывод pc пользователя.
11user_lp_ownerSПодписант транзакции.
Совместимость: девять учётных записей 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)
#ИмяWSПримечания
0spl_token programSPL Token.
1ammWAmmInfo пула.
2amm_authorityPDA уровня программы.
3amm_coin_vaultWХранилище coin пула.
4amm_pc_vaultWХранилище pc пула.
5model_data_accountТаблица поиска только для чтения.
6user_source_tokenWУчётная запись входного токена пользователя.
7user_destination_tokenWУчётная запись выходного токена пользователя.
8user_source_ownerSПользователь (подписант транзакции).
Совместимость: девять учётных записей 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)
#ИмяWSПримечания
0spl_token programSPL Token.
1ammWAmmInfo пула.
2amm_authorityPDA уровня программы.
3amm_coin_vaultWХранилище coin пула.
4amm_pc_vaultWХранилище pc пула.
5amm_target_ordersW
6model_dataТаблица поиска.
7user_coinWУчётная запись coin администратора (получает комиссию).
8user_pcWУчётная запись pc администратора (получает комиссию).
9amm_adminSАдминистратор пула (подписант).
Изменение логики: когда доступные средства пула недостаточны для вывода накопленного 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 для котировок (см. Примеры кода).

Что дальше

Источники:
  • raydium-stable/program/src/instruction.rs (enum и pack/unpack)
  • raydium-stable/program/src/processor.rs (логика выполнения)