Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Начиная с обновления программы 2026-07, зависимость AMM v4 от OpenBook / Serum была удалена. Устаревшие инструкции v1 SwapBaseIn / SwapBaseOut, Deposit и Withdraw сохраняют свои старые макеты учётных записей для обратной совместимости: учётные записи маркета по-прежнему принимаются в своих старых позициях, но они больше не проверяются и не используются (CPI не выполняется). Новые интеграции должны использовать точки входа V2 swap, которые полностью исключают учётные записи маркета. Несколько инструкций были удалены и теперь возвращают ошибку — см. запись в журнале изменений. Списки учётных записей ниже используют имена полей из Raydium SDK; базовый IDL иногда использует префиксы serum_*.

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

SDK предоставляет построители только для инструкций, ориентированных на пользователя. Инструкции обслуживания обычно вызываются хранителем Raydium. Удалены / больше не вызываются (теперь возвращают unimplemented!, и их построители клиента были удалены): Initialize (тег 0, используйте Initialize2), MonitorStep (2), MigrateToOpenBook (5), WithdrawSrm (8), PreInitialize (10, используйте Initialize2), SimulateInfo (12), AdminCancelOrders (13).

Initialize2

Инициализировать новый пул AMM v4, привязанный к существующему маркету OpenBook. Аргументы
Учётные записи (записываемая W, подписант S) Постусловия
  • lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN, где INIT_BURN ≈ 100 LP единиц выводятся из обращения.
  • Никакие заказы OpenBook не размещаются (сетка книги заказов была удалена). market_program / market по-прежнему передаются, но только сохраняются как справочные поля; coin_lot_size / pc_lot_size / min_size инициализируются в 0.
Частые ошибкиInvalidInput (несовпадающие десятичные разряды, неотсортированные), NotAllowed.

Deposit

Добавить ликвидность. Аргументы
Учётные записи (сокращённо) Математика — стандартная пропорциональная. Используя эффективные резервы пула (хранилища + в книге), SDK вычисляет пару coin/pc, которая даёт заданное количество LP, и проверяет её против max_*. Возвращает ExceededSlippage, если одна из сторон превышает лимит.

Withdraw

Сжечь LP, получить обе стороны. Аргументы
Учётные записи — как Deposit с обратным направлением; lp_mint записываемый для сжигания, пользовательские ATA являются получателями. Макет учётных записей не изменился (учётные записи маркета по-прежнему передаются позиционно, игнорируются). Больше нет шага settle-from-OpenBook — пропорциональная математика использует балансы хранилища напрямую.

SwapBaseIn

Своп с точным входом. Всегда путь через AMM (не маршрутизируется через сопоставление OpenBook).
Используйте варианты V2 для нового кода. Поскольку зависимость AMM v4 от OpenBook была удалена, точки входа V1 (SwapBaseIn, SwapBaseOut) по-прежнему ожидают полный список из 17 учётных записей (или 18 с опциональной учётной записью target-orders), но учётные записи OpenBook/маркета теперь принимаются позиционно и игнорируются — они не проверяются и CPI не выполняется. Передача неправильного количества учётных записей по-прежнему возвращает WrongAccountsNumber, но содержимое учётных записей маркета больше не проверяется. Новые интеграции должны использовать SwapBaseInV2 / SwapBaseOutV2, которые принимают гораздо меньший список учётных записей и представляют канонический путь выполнения сегодня. Формы V1 задокументированы здесь для полноты и для чтения существующих транзакций в цепи.
Аргументы
Учётные записи (сокращённо) Математика — см. products/amm-v4/math. Предусловия
  • amm.status позволяет своп (бит 0 маски статуса не установлен).
  • amm.state_data.pool_open_time <= now.
  • amount_in > 0.
  • user_source_token_account содержит как минимум amount_in.
Постусловия
  • Пользователь теряет amount_in исходного токена, получает amount_out ≥ minimum_amount_out целевого токена.
  • need_take_pnl_* увеличивается на долю протокольного сбора.
  • Примечание: счётчики аналитики state_data.swap_*_in_amount / swap_*_out_amount больше не обновляются — их значения заморожены. Используйте логи торговли для аналитики объёма.
Частые ошибкиExceededSlippage, InvalidInput, InvalidStatus, NotAllowed (идентичные монеты coin/pc).

SwapBaseOut

Своп с точным выходом, обратный SwapBaseIn. Те же учётные записи. Аргументы

SwapBaseInV2 / SwapBaseOutV2

Варианты точек входа swap (теги 16 / 17), которые полностью пропускают учётные записи OpenBook. Математика идентична пути V1, но список учётных записей сокращается до только AMM и пользователя — 8 учётных записей, и amm_open_orders не передаётся: Резервы пула теперь являются балансами хранилища (минус ожидающий PnL), поэтому математика котировки прямолинейна и идентична пути v1. Используйте V2 для экономии вычислений и избежания передачи (теперь игнорируемых) учётных записей маркета. Маршрутизатор Raydium всегда использует форму V2 при маршрутизации через AMM v4. Аргументы те же, что и в формах V1 (amount_in / minimum_amount_out для SwapBaseInV2; max_amount_in / amount_out для SwapBaseOutV2).

MonitorStep и другие удалённые инструкции

Удалены — больше не вызываются. Начиная с обновления 2026-07, MonitorStep (тег 2) был удалён из программы и теперь возвращает ошибку (unimplemented!) при вызове. Его построитель клиента также был удалён. То же самое относится к MigrateToOpenBook (5), WithdrawSrm (8), SimulateInfo (12), AdminCancelOrders (13) и устаревшим точкам входа создания пула Initialize (0) / PreInitialize (10) — используйте вместо этого Initialize2.
Исторически MonitorStep управлял взаимодействием пула с OpenBook: он урегулировал заполненные заказы (перемещая выручку из хранилищ маркета в хранилища пула через CPI OpenBook), отменял устаревшие заказы и размещал новые заказы для закрытия разрыва между target_orders и amm_open_orders. С удалением зависимости OpenBook нечего управлять и инструкция удалена. Любой хранитель или интеграция, которые по-прежнему её вызывают, должны удалить вызов.

WithdrawPnl / TakePnl

Администраторский сбор накопленных протокольных сборов. Аргументы
  • WithdrawPnl не принимает аргументы; он читает need_take_pnl_* и перемещает эти точные суммы.
Критическое изменение (только администратор). Список учётных записей сократился с 17 (+1 опциональная) до 10amm_open_orders и все шесть учётных записей маркета были удалены — без совместимого разбора. Старый макет не совпадает (старый #5 был amm_open_orders, теперь pool_coin_token_account) и не работает с ошибками типа InvalidCoinVault. Инструментарий администратора должен быть обновлён.
Учётные записи (новый макет из 10 учётных записей) Эффект
  • Передаёт need_take_pnl_coin из pool_coin_token_account в pnl_coin_token_account.
  • То же самое для pc.
  • Обнуляет need_take_pnl_coin и need_take_pnl_pc.
  • Изменение логики: если баланс хранилища недостаточен для покрытия накопленного PnL, инструкция возвращает TakePnlError напрямую (она больше не манипулирует состоянием книги заказов).
Никакого изменения резервов, поскольку накопленный PnL уже был исключён из инварианта.

SetParams

Изменения параметров администратором, вызываемые мультиподписью Raydium. Аргументы — это тег param: u8 + полезная нагрузка.
Критическое изменение (только администратор). Список учётных записей был сокращен до просто [amm (W), admin (S)] (полномочия, open-orders, target-orders, хранилища и все учётные записи маркета были удалены). Перечисление param было перенумеровано и сокращено: Status = 0, State = 1, Fees = 2 (было 9), SetOpenTime = 3 (было 11). Все параметры сетки книги заказов и AmmOwner, LastOrderDistance, UpdateOpenOrder были удалены, и структура SetParamsInstruction потеряла new_pubkey и last_order_distance. Инструментарий администратора должен быть обновлён.

Матрица изменения состояния

Столбец OpenBook исчез — ни одна инструкция больше не трогает книгу заказов.

Что дальше

Источники: