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

Два различных понятия

Ценовой импакт и слиппедж часто путают в UI, но это разные вещи.
  • Ценовой импакт — детерминированное свойство сделки при конкретном состоянии пула. Зная (Δin, reserves), ценовой импакт можно полностью вычислить ещё до подачи сделки.
  • Слиппедж — фактическая разница между ценой, которую вы ожидали на момент котировки, и ценой, которую вы получили при исполнении. Это функция задержки, конкурирующих транзакций и порядка включения блока — а не математики пула.
Котировка 1% против свободного пула имеет 0% слиппеджа, если попадает в следующий блок; этот 1% — ценовой импакт. Та же котировка исполнится на 0.2% хуже, если кто-то торговал в пулу перед вами — это дополнительные 0.2% — слиппедж.

Формальные определения

Ценовой импакт

Для CPMM: impact ≈ 2 · Δin / reserve_in при маленьких сделках. Для CLMM: зависит от того, сколько тиков пересекает сделка; часто плоский внутри текущего диапазона тиков, скачкообразный при переходе.

Реализованный слиппедж

Слиппедж всегда неотрицательный (или ноль), если котировка была честной. Отрицательное значение означало бы, что вы получили больше, чем котировано — возможно, если состояние пула сдвинулось в вашу пользу между котировкой и исполнением.

Расчёт minAmountOut и maxAmountIn

Каждый swap в Raydium имеет защиту от слиппеджа:
  • SwapBaseInput(amount_in, min_amount_out) — точный ввод, нижняя граница выхода.
  • SwapBaseOutput(max_amount_in, amount_out) — точный вывод, верхняя граница входа.
SDK вычисляет это так:
Толерантность слиппеджа — это буфер вокруг ценового импакта, не сам ценовой импакт. Толерантность 0.5% означает «принять максимум 0.5% хуже, чем моя котировка» — независимо от того, был ли ценовой импакт 0.01% (крошечная сделка) или 2% (большая сделка). Для сделки с 2% ценовым импактом и 0.5% толерантностью minAmountOut будет на 2.5% ниже спот-цены до сделки — по сути сумма импакта и толерантности.

Рекомендуемые толерантности слиппеджа

Нет единого правильного числа; правильная граница зависит от:
  1. Стабильность пары. Пулы stablecoin-stablecoin могут безопасно использовать 0.1%. Волатильные мем-пулы часто требуют 3–5% просто для надёжного исполнения.
  2. Размер сделки. Более крупные сделки имеют больший ценовой импакт, поэтому толерантность должна масштабироваться с ним, чтобы избежать отката. По этой причине автоматический слиппедж SDK по умолчанию примерно max(0.5%, 2 × price_impact).
  3. Задержка включения в блок. Транзакции, ожидающие в мемпуле несколько блоков, подвержены большему количеству конкурирующих сделок. Jito bundles и приоритетные комиссии это снижают.
Практические правила (значения по умолчанию в Raydium UI):

Различия между типами AMM

CPMM

Ценовой импакт гладкий и непрерывный (закрытая форма 2 · Δin / reserve_in). Толерантность слиппеджа масштабируется линейно с размером сделки.

AMM v4

Та же кривая, что и CPMM, но «эффективные резервы» включают размещённые в OpenBook лимит-ордера пула. На практике это означает:
  • Котировка с использованием сырых балансов vault недооценивает резервы и поэтому переоценивает импакт.
  • SDK получает AmmInfo и суммирует vault + on_book.free + on_book.locked для правильного числа.
  • Устаревшее состояние OpenBook (заблокированная краник) может вызвать расхождение между котируемым импактом и цепочкой. Агрегаторы регулярно предварительно запускают краник (permissionless MonitorStep) перед большой сделкой AMM-v4.

CLMM

Ценовой импакт кусочный. В пределах текущего диапазона тиков импакт примерно линеен в Δin / L. Пересечение границы тика может дискретно изменить L, вызывая скачок маргинальной цены. Сделка, пересекающая несколько разреженных тиков, может иметь значительно больший импакт, чем предполагает правило 2 · Δin / reserve. Котировка CLMM в SDK итеративно выполняет шаги своп детерминированно, возвращая точный ожидаемый amountOut, поэтому minAmountOut = amountOut · (1 − slippage) корректен. Но значение priceImpact следует интерпретировать как «спред между спот до сделки и спот после сделки», который на CLMM может быть намного больше, чем эффективный слиппедж своп для пользователя, который волнует только amount_out.

LaunchLab curve

Похожа на CPMM, но с асимметричной кривой (квадратичной или виртуальных резервов). Импакт растёт быстрее для поздних покупателей при крутизне кривой к градации. UI для покупателей должны предупреждать, когда покупка, как ожидается, переместит кривую более чем на ~5% quote_reserve_target в одной транзакции.

MEV-соображения

На Solana извлечение MEV против своп в основном принимает форму sandwich attacks: бот размещает back-run транзакцию, которая торгует после вашей, и front-run, который торгует перед, оба в одном слоте. Ваша сделка заполняется по худшей цене, чем была бы без сэндвича; back-run захватывает разницу. Снижение рисков:
  1. Жёсткий minAmoundOut. Агрессивные границы слиппеджа заставляют жертву откатиться при сильном сэндвиче, защищая средства (но теряя газ). На Solana это стандартная практика — отказ дешёв.
  2. Jito bundles. Отправка через Jito с bundled tip исключает посредников из переупорядочения вашей транзакции. Bundles приземляются как атомарные блоки.
  3. Приоритетные комиссии. Высокая приоритетная комиссия увеличивает вероятность того, что ваша сделка попадёт в блок текущего лидера раньше, чем сэндвичер среагирует. Менее надёжно, чем bundles, более стандартно.
  4. Private RPC. Отправка через private RPC (или через endpoint валидатора) снижает окно, в течение которого mempool сэндвичер может видеть вашу транзакцию.
SDK Raydium не объединяет; интеграторы обычно слоируют Jito сверху. Смотрите integration-guides/routing-and-mev для шаблонов.

Слиппедж для много-хоповых маршрутов

Когда своп маршрутизируется через несколько пулов (например USDC → SOL → RAY), толерантность слиппеджа должна применяться за каждый хоп, не просто конец-в-конец:
Маршрутизатор SDK применяет границы за каждый хоп автоматически, когда вы вызываете raydium.trade.swap. Для пользовательских маршрутизаторов повторите шаблон.

Отчетность пользователям

Практические правила для хорошего UI своп:
  • Отображайте оба ожидаемый ценовой импакт и толерантность слиппеджа отдельно.
  • Выделяйте, когда ценовой импакт превышает ~2% — предупреждение «высокий импакт».
  • Выделяйте, когда ценовой импакт превышает толерантность — транзакция почти определённо откатится.
  • Для волатильных пар предложите «режим высокого слиппеджа», который ослабляет границу и показывает более сильное предупреждение.

Ссылки

Источники:
  • Реализация слиппеджа / импакта в SDK Raydium v2.
  • Flashbots / Jito на Solana MEV.