Перейти к основному содержанию
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Запись в журнале изменений документации. Индекс всех обновлений см. в reference/changelog. Историческую хронологию протокола см. в introduction/history-and-milestones.
AMM v4 давно прекратил обмен ликвидностью с OpenBook (ранее Serum); гибридный путь маркет-мейкинга на основе order-book был неактивен годами. Это обновление — очистка: оно удаляет зависимость Serum, все order-book CPI и неработающие инструкции маркет-мейкинга из программы, оставляя AMM v4 как чистый constant-product (x·y=k) AMM. Оно не изменяет поведение торговли в реальном времени — не было оставшихся OpenBook ордеров для размещения.

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

  • Swap / Deposit / Withdraw продолжают работать без изменений. Транзакции, построенные со старыми макетами аккаунтов, по-прежнему выполняются — удаленные аккаунты Serum/market просто игнорируются (без валидации, без CPI). SwapBaseIn / SwapBaseOut по-прежнему требуют 17 (+1 опциональный) аккаунтов; макеты Deposit и Withdraw не изменились. Вам не нужно выпускать обновление клиента, чтобы сохранить существующие потоки.
  • Перейдите на V2 swap entrypoints. SwapBaseInV2 / SwapBaseOutV2 не содержат market аккаунтов и amm_open_orders (всего 8 аккаунтов), поэтому транзакции меньше и дешевле. Роутеры/агрегаторы должны маршрутизировать через V2.
  • WithdrawPnl — критическое изменение (только администратор). Переходит с 17 (+1 опциональный) → 10 аккаунтов без парсинга совместимости; старый макет не совпадает (старый #5 был amm_open_orders) и не проходит валидацию. Инструменты администратора должны быть обновлены.
  • SetParams — критическое изменение (только администратор). Аккаунты сокращаются до [amm, admin], и enum param перенумерован (Fees 9 → 2, SetOpenTime 11 → 3); AmmOwner, LastOrderDistance, UpdateOpenOrder и параметры сетки удалены.
  • Несколько инструкций больше не вызываются. Initialize, PreInitialize, MonitorStep, MigrateToOpenBook, WithdrawSrm, SimulateInfo и AdminCancelOrders теперь возвращают ошибку. Используйте Initialize2 для создания пулов.
  • Макеты on-chain аккаунтов стабильны по байтам, коды ошибок не изменились. AmmInfo / StateData сохраняют свой макет (старые поля OpenBook сохранены, но устарели/заморожены); нумерация AmmError сохранена, добавлен только новый NotAllowed.

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

  • Трейдеры не видят изменений в поведении swap или ценообразовании — constant-product кривая не изменилась. V2-layout свопы дешевле в размещении, потому что содержат ~8 меньше аккаунтов.
  • LP сохраняют ту же экономику депозита/вывода. Ликвидность давно находилась полностью в хранилищах пула, поэтому стоимость пула полностью on-pool; это обновление только удаляет устаревшую сантехнику market.
  • Интеграторы получают меньшие, более простые транзакции и модель котирования, которая читает прямо из хранилищ. Существующие интеграции не ломаются (кроме администратора WithdrawPnl / SetParams), но совместимость v1-swap — временная — переходите на V2 в удобное время.

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

По-прежнему вызываемые, макет не изменился (обратно совместимые)

Initialize2, Deposit, Withdraw, SwapBaseIn, SwapBaseOut, CreateConfigAccount и UpdateConfigAccount сохраняют свои существующие списки аккаунтов. На SwapBaseIn / SwapBaseOut, Deposit и Withdraw аккаунты OpenBook/market по-прежнему принимаются позиционно, но больше не валидируются и не используются — CPI не выдается и резервы пула вычисляются только из хранилищ. Количество аккаунтов должно совпадать, поэтому существующие транзакции продолжают выполняться без изменений.

SwapBaseInV2 / SwapBaseOutV2 — рекомендуемый путь

Полностью опустите market аккаунты и amm_open_orders (8 аккаунтов; теги 16 / 17). Математика котирования идентична v1. Новые интеграции и роутеры должны использовать V2.

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

amm_open_orders и все шесть market аккаунтов удалены. Новый фиксированный 10-аккаунтный, только для администратора макет не имеет парсинга совместимости; старый макет не совпадает и не проходит с ошибками типа InvalidCoinVault.

SetParams — сокращено до [amm, admin] (⚠️ критическое изменение) + перенумерованные параметры

Аккаунты authority, open-orders, target-orders, vault и все market аккаунты удалены. Enum param перенумерован и сокращен:
ПараметрСтарое значениеНовое значение
Status00
State11
Fees92
SetOpenTime113
Все параметры order-book-grid (OrderNum, Depth, AmountWave, MinPriceMultiplier, MaxPriceMultiplier, MinSize, VolMaxCutRatio, InitOrderDepth, SetSwitchTime, ClearOpenTime, Seperate) плюс AmmOwner, LastOrderDistance и UpdateOpenOrder удалены. Структура SetParamsInstruction теряет new_pubkey и last_order_distance.

Больше не вызываются (возвращают ошибку во время выполнения; builders удалены)

ИнструкциятегЗамена
Initialize0Initialize2
MonitorStep2нет (order-book crank, снято с производства)
MigrateToOpenBook5нет
WithdrawSrm8нет (скидка на комиссию SRM, снято с производства)
PreInitialize10Initialize2
SimulateInfo12off-chain / SDK котирование
AdminCancelOrders13нет

Изменения резервов / состояния

  • Формула активов пула. Общие активы пула теперь балансы хранилищ − ожидающий PnL (need_take_pnl); term open-order OpenBook — уже нулевой на практике — удален. Код котирования может читать прямо из балансов хранилищ.
  • Устаревшие поля состояния. StateData.total_pnl_pc, total_pnl_coin, orderbook_to_init_time, swap_coin_in_amount, swap_pc_out_amount, swap_acc_pc_fee, swap_pc_in_amount, swap_coin_out_amount и swap_acc_coin_fee сохранены для совместимости макета, но больше не обновляются. Потребители, полагающиеся на счетчики объема swap_*, должны переключиться на логи торговли.
  • Инициализация AmmInfo. coin_lot_size, pc_lot_size и min_size теперь инициализируются как 0.
  • Удаленная зависимость и CPI. Крейт serum_dex удален из Cargo.toml; все Serum DEX CPI (invoke_dex_new_order_v3, invoke_dex_cancel_order_v2, invoke_dex_settle_funds, invoke_dex_init_open_orders, …) удалены из invokers.rs. Удаленные структуры данных: LastOrderDistance, SimulateParams, RunCrankData, GetPoolData, GetSwapBaseInData, GetSwapBaseOutData.