Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Инвариант
Пул поддерживаетcoin_reserve × pc_reserve = k, где:
- Резервы включают суммы, зафиксированные на OpenBook. Лимит-ордера AMM остаются частью его ликвидности — они не «теряются» в ордербуке, а просто там хранятся. Вычисление
kтолько по остаткам на цепи недооценивает резервы. - Начисление PnL (
need_take_pnl_*) вычитается, чтобы сохранить кривую, когда администратор снимает комиссии. То же самое в CPMM — исключениеprotocol_fees_*.
Swap* гарантирует k' ≥ k после добавления доли комиссии LP обратно в резервы.
Соглашение о комиссиях
AMM v4 использует пропорциональные комиссии (пары числитель/знаменатель) вместо соглашения1/1_000_000 CPMM/CLMM. Структура Fees на цепи (см. Fees::initialize в исходниках программы) по умолчанию имеет значения:
- Общая комиссия своп:
swap_fee = amount_in × 25 / 10_000 = 0.25%от валового входа. - Доля протокола:
pnl_numerator / pnl_denominator = 12 / 100 = 12%от комиссии своп, что составляет0.25% × 12% = 0.03%от объёма. Эта доля накапливается в счётчиках PnL и выводитсяWithdrawPnl. - Доля LP: остальные
88%комиссии своп, что составляет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; по умолчанию равно swap_fee, но читается из другого пути кода.
Отклонения от этих стандартов редки, но существуют на нескольких старых пулах; всегда читайте комиссии из AmmInfo.fees перед цитированием.
Математика прямого своп (AMM путь)
Самый простой случай: пользователь свопит против хранилищ пула без взаимодействия с OpenBook. Внутренние резервы пула (включая выделения на ордербуке) — это знаменатель. SwapBaseIn (точный вход):coin_vault_balance + coin_posted_on_openbook + ... (хранилище AMM плюс токены, заблокированные в ордерах OpenBook). После деактивации OpenBook баланс на ордербуке равен нулю, поэтому эффективные резервы равны сырым остаткам хранилища. Путь MonitorStep / неявного расчёта, который раньше обновлял сторону OpenBook, больше не требуется на практике.
SwapBaseOut (точный выход):
Взаимодействие с ордербуком (историческое)
Больше не активно. Конструкция сетки, описанная в этом разделе, отражает, как AMM v4 первоначально отражала кривую на рынок OpenBook. Интеграция OpenBook деактивирована; пулы больше не выставляют и не поддерживают ордера на OpenBook. Математика ниже сохранена для контекста — она объясняет, для чего имели размер учётные записи
target_orders / amm_open_orders и почему программа всё ещё проверяет параметры, связанные с MonitorStep, хотя киппер больше их не обновляет.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).
2_200_000) не выделяется отдельно — это просто остаток, который повышает k'.
Правила точности
- Умножение резервов использует
u128; финальные деления округляют к нулю. swap_feeокругляется вверх (чтобы пул не недополучил).amount_inдляSwapBaseOutокругляется вверх (чтобы пользователь не заплатил меньше).- Пулы с экстремальными соотношениями резервов могут получить
ZeroTradingTokensна очень малых входах; то же соглашение, что и в CPMM.
Ограничения vs CPMM
- Резервы AMM v4 включают выделение на OpenBook, поэтому интегратор не может котировать правильно только от
getTokenAccountBalance. Всегда получайте полное состояние (хранилища +open_orders.free+open_orders.locked), или используйте квотировку SDK / API. - AMM v4 не предоставляет структурированный TWAP на цепи. Внешние потребители, которые хотят цену, поддерживаемую AMM v4, должны вычислить её сами из логов торговли.
- Token-2022 не поддерживается.
Что дальше
products/amm-v4/instructions— где включаютсяSwapBaseIn,Depositи т. д.products/amm-v4/fees— полная механика комиссий, деталиTakePnl.algorithms/constant-product— общий вывод.
- Исходники программы Raydium AMM —
raydium-io/raydium-amm - Модуль
LiquiditySDK Raydium v2


