> ## 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.

# Slippage и ценовой импакт

> Точные определения слиппеджа и ценового импакта, как SDK Raydium вычисляет minAmountOut и maxAmountIn, различия между типами AMM и MEV-соображения для production-маршрутизации.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/algorithms/slippage-and-price-impact)
</Info>

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

**Ценовой импакт** и **слиппедж** часто путают в UI, но это разные вещи.

* **Ценовой импакт** — детерминированное свойство сделки при конкретном состоянии пула. Зная `(Δin, reserves)`, ценовой импакт можно полностью вычислить ещё до подачи сделки.

* **Слиппедж** — фактическая разница между ценой, которую вы **ожидали** на момент котировки, и ценой, которую вы **получили** при исполнении. Это функция задержки, конкурирующих транзакций и порядка включения блока — а не математики пула.

Котировка 1% против свободного пула имеет 0% слиппеджа, если попадает в следующий блок; этот 1% — ценовой импакт. Та же котировка исполнится на 0.2% хуже, если кто-то торговал в пулу перед вами — это дополнительные 0.2% — слиппедж.

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

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

```
p_before = pool.spot_price()
p_after  = pool.spot_price_if_trade(Δin) applied
impact   = (p_before − p_after) / p_before       // может быть со знаком
```

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

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

```
quoted_out = amount_out вычислен в момент котировки
actual_out = amount_out наблюдается на цепи
slippage   = (quoted_out − actual_out) / quoted_out
```

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

## Расчёт `minAmountOut` и `maxAmountIn`

Каждый swap в Raydium имеет защиту от слиппеджа:

* `SwapBaseInput(amount_in, min_amount_out)` — точный ввод, нижняя граница выхода.
* `SwapBaseOutput(max_amount_in, amount_out)` — точный вывод, верхняя граница входа.

SDK вычисляет это так:

```ts theme={null}
const computed = raydium.<pool_type>.computeAmountOut({
  poolInfo,
  amountIn,
  mintIn,
  mintOut,
  slippage: 0.005,     // 0.5% допуска
});

// computed.amountOut         — ожидаемая котировка
// computed.minAmountOut      — amountOut × (1 − slippage), используется как граница на цепи
// computed.priceImpact       — детерминированный, только состояние пула
// computed.fee               — общая комиссия (все компоненты суммированы)
```

Толерантность слиппеджа — это **буфер вокруг ценового импакта**, не сам ценовой импакт. Толерантность 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):

| Тип пары                                     | Толерантность по умолчанию |
| -------------------------------------------- | -------------------------- |
| Stablecoin-stablecoin (USDC-USDT, USDC-USDS) | 0.1%                       |
| Stablecoin-мажор (USDC-SOL, USDC-BTC)        | 0.5%                       |
| Мажор-мажор (SOL-BTC, SOL-ETH)               | 1%                         |
| Волатильные (мем-токены, илликвидные)        | 3–5%                       |

## Различия между типами 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`](/ru/integration-guides/routing-and-mev) для шаблонов.

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

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

```ts theme={null}
// Плохо: 0.5% применён только в конце, поэтому любой промежуточный хоп разрушит второй хоп.
const finalMin = finalAmount * (1 - 0.005);

// Лучше: каждый хоп обеспечивает свою границу.
const hop1Min  = hop1Amount * (1 - 0.005);
const hop2Min  = hop2Amount * (1 - 0.005);
// Конец-в-конец это жёстче (составной), но атомарный — если какой-либо хоп ухудшается, транзакция откатывается рано.
```

Маршрутизатор SDK применяет границы за каждый хоп автоматически, когда вы вызываете `raydium.trade.swap`. Для пользовательских маршрутизаторов повторите шаблон.

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

Практические правила для хорошего UI своп:

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

## Ссылки

* [`products/cpmm/math`](/ru/products/cpmm/math), [`products/amm-v4/math`](/ru/products/amm-v4/math), [`products/clmm/math`](/ru/products/clmm/math) — вывод импакта за тип пула.
* [`integration-guides/routing-and-mev`](/ru/integration-guides/routing-and-mev) — много-хоповая маршрутизация + MEV-защиты.
* [`integration-guides/priority-fee-tuning`](/ru/integration-guides/priority-fee-tuning) — расчёт приоритетных комиссий для снижения слиппеджа.

Источники:

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