Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Инвариант

Пул поддерживает coin_reserve × pc_reserve = k, где (после удаления OpenBook в июле 2026 г.):
Обратите внимание на два момента:
  1. Резервы теперь только из хранилищ. Исторический термин открытого ордера (токены, которые пул держал в залоге как лимит-ордера OpenBook) был удалён — на практике он был нулевым задолго до удаления. Вы можете вычислить k прямо из балансов хранилищ в блокчейне.
  2. Начисление PnL (need_take_pnl_*) вычитается, чтобы кривая сохранялась, когда администратор снимает комиссии. Тот же принцип, что и исключение protocol_fees_* в CPMM.
Программа вычисляет это через calc_total_without_take_pnl_no_orderbook (старый вариант с поддержкой ордербука удалён). Каждая операция Swap* обеспечивает k' ≥ k после добавления доли комиссии LP обратно в резервы.

Соглашение о комиссиях

AMM v4 использует комиссии в виде отношений (пара числитель/знаменатель) вместо соглашения 1/1_000_000 в CPMM / CLMM. Структура Fees в блокчейне (см. Fees::initialize в исходном коде программы) по умолчанию имеет:
Интерпретация (опубликованные значения по умолчанию на mainnet):
  • Общая комиссия swap: swap_fee = amount_in × 25 / 10_000 = 0.25% от валового входа.
  • Доля протокола: pnl_numerator / pnl_denominator = 12 / 100 = 12% от комиссии swap, что составляет 0.25% × 12% = 0.03% от объёма. Эта доля начисляется на счётчики PnL и снимается через WithdrawPnl.
  • Доля LP: оставшиеся 88% комиссии swap, что составляет 0.25% × 88% = 0.22% от объёма. Остаётся в пуле и увеличивает k.
  • Нет доли фонда. AMM v4 не имеет разделения комиссии фонда, как в CPMM/CLMM.
Обратите внимание, что pnl_numerator / pnl_denominator — это доля от комиссии, а не от объёма торговли — частая ошибка при чтении этих имён полей. trade_fee_numerator / trade_fee_denominator (также 25 / 10_000) исторически использовалась интеграцией OpenBook при вычислении цен с учётом комиссии для сетки лимит-ордеров AMM. После удаления кода OpenBook это поле остаточное; активная комиссия swap — это swap_fee_*. Отклонения от этих значений по умолчанию редки, но существуют на нескольких устаревших пулах; всегда читайте комиссии из AmmInfo.fees перед котировкой.

Прямая математика swap (путь AMM)

Простейший случай: пользователь делает swap против хранилищ пула без взаимодействия с OpenBook. Внутренние резервы пула (включая размещения в книге) — это знаменатель. SwapBaseIn (точный вход):
Резервы, используемые здесь, — это балансы хранилищ (минус начисленный PnL). Исторически формула также добавляла токены, которые AMM заблокировал в ордерах OpenBook; этот термин был удалён — эффективные резервы теперь равны сырым балансам хранилищ минус ожидающий PnL. Путь MonitorStep / неявного расчёта, который раньше обновлял сторону OpenBook, был удалён. SwapBaseOut (точный выход):

Взаимодействие с ордербуком (историческое)

Удалено. Построение сетки, описанное в этом разделе, отражает, как AMM v4 первоначально отражала кривую на рынке OpenBook. Интеграция OpenBook — включая кран MonitorStep и логику сетки build_orders — была удалена из программы (обновление июля 2026 г.). Математика ниже сохранена исключительно как исторический контекст для того, на что когда-то были рассчитаны счета target_orders / amm_open_orders в блокчейне.
Отдельно от пользовательских swap-ов AMM v4 исторически размещала сетку лимит-ордеров на рынке OpenBook. Сетка вычислялась из параметров AmmInfo:
  • depth — количество уровней цены с каждой стороны.
  • amount_wave — базовая единица размера на уровень.
  • min_size, coin_lot_size, pc_lot_size — ограничения рынка OpenBook.
  • state_data.swap_acc_coin_fee, swap_acc_pc_fee — кумулятивные счётчики комиссий с момента последнего TakePnl.
Программа выводит цены на уровень, проходя от текущей цены кривой в шагах с постоянным отношением:
Точные цены и размеры определяются target_orders, вычисленными в build_orders и сравниваемыми с amm_open_orders на каждом MonitorStep. Любое расхождение приводит к отмене + новым размещениям. Недавно заполненные ордера на OpenBook расчитываются в хранилища пула при следующей операции, которая обновляет сторону OpenBook. Интеграторам редко нужно вычислять сетку — хранитель Raydium её поддерживает — но полезно знать, что:
  • Пул со значительной ликвидностью в книге имеет эту ликвидность, способствующую k, а не простаивающей.
  • Устаревший рынок OpenBook (очередь событий полна, краны заблокированы) предотвращает обновления сетки; AMM может затем котировать цены, которые отличаются от видимого ордербука, пока не произойдёт следующий кран.

Этап расчёта (PnL)

Доля протокола 0.03% начисляется в state_data.need_take_pnl_coin и state_data.need_take_pnl_pc. TakePnl перемещает эти суммы из хранилищ в указанное администратором место назначения, затем обнуляет счётчики. Критическое свойство: резервы в инварианте всегда вычисляются минус начисленный PnL, поэтому TakePnl не перемещает кривую. Это соответствует соглашению CPMM.

Проработанный пример

Состояние пула:
  • coin_reserve = 1_000_000_000_000 (1 000 000 на стороне coin; 6 десятичных)
  • pc_reserve = 2_000_000_000_000 (2 000 000 на стороне pc; 6 десятичных)
  • Комиссии: по умолчанию swap = 25/10_000, pnl = 3/10_000.
Пользователь: SwapBaseIn точный вход 1_000_000_000 coin (1 000 coin).
Доля LP (2_200_000) не выделяется отдельно — это просто остаток, который увеличивает k'.

Правила точности

  • Умножения резервов используют u128; финальные деления округляют к нулю.
  • swap_fee округляется вверх (чтобы пул не недозарядил).
  • amount_in для SwapBaseOut округляется вверх (чтобы пользователь не недоплатил).
  • Пулы с экстремальными соотношениями резервов могут получить ZeroTradingTokens на очень малых входах; то же соглашение, что и в CPMM.

Ограничения по сравнению с CPMM

  • Резервы AMM v4 теперь только из хранилищ, поэтому вы можете котировать прямо из балансов хранилищ (минус need_take_pnl_*) — предыдущее требование добавлять суммы open_orders.free / open_orders.locked больше не применяется. Котировка SDK / API остаётся самым простым вариантом.
  • AMM v4 не предоставляет структурированный TWAP в блокчейне. Внешние потребители, которые хотят цену, поддерживаемую AMM v4, должны вычислить её сами из логов торговли.
  • Token-2022 не поддерживается.

Что дальше

Источники: