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

# Обзор маршрутизации

> Что делает программа AMM Routing, почему она существует как отдельная программа и когда её использовать вместо stitching инструкций на стороне клиента.

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

  [Открыть английскую версию →](/products/routing/overview)
</Info>

## Краткий обзор

Программа AMM Routing упаковывает многошаговые свопы в одну on-chain транзакцию, которая соединяет ликвидность через пулы. Вы предоставляете маршрут (список пулов и промежуточных mint'ов) и одну инструкцию с параметрами slippage; маршрутизатор выполняет все N шагов по порядку, перемещая вывод из одного пула на ввод следующего. Отдельная логика on-chain маршрутизатора не требуется для расчёта цены — каждый шаг обрабатывает комиссию и кривую через собственную программу пула via CPI — но маршрутизатор управляет передачей аккаунтов и движением токенов.

## Зачем нужна отдельная программа маршрутизации?

Клиенты Raydium и агрегаторы всегда могут собирать многошаговые свопы на стороне клиента без использования маршрутизатора: создать N инструкций swap (по одной на пул) и отправить их в одной транзакции. Почему же существует отдельная программа маршрутизации?

### Причины использовать маршрутизатор

1. **CPI из других программ.** Если ваша программа должна вызвать маршрут как часть более крупной транзакции (например, менеджер ликвидности, который обменивает комиссии на целевой токен), CPI в маршрутизатор чище, чем собирание N дочерних CPI и управление всеми их аккаунтами в контракте.

2. **Атомарное состояние аккаунтов.** Список аккаунтов каждого шага валидируется в одном контексте инструкции. Если состояние промежуточного пула повреждено или проверка лимитной цены не пройдёт, весь маршрут полностью отменяется без частичного исполнения.

3. **Единственная инструкция составления.** SDK и фронтенды могут представлять многошаговый маршрут как одну логическую операцию, а не как N отдельных инструкций, которые случайно идут подряд.

### Stitching на стороне клиента — всё ещё стандарт

Для большинства приложений создание отдельных инструкций `Swap` для каждого пула и их отправка по порядку проще, более комбинируема и одинаково валидна. Методы SDK Raydium вроде `Trade.makeSwapTransaction` делают именно это для большинства маршрутов.

Маршрутизатор — альтернатива, не замена. Используйте его когда:

* вы реализуете программу, которой нужна маршрутизация как часть большей атомарной операции;
* вы строите агрегатор, который хочет иметь одну операцию «отправить этот маршрут».

## Как это работает

Инструкция маршрутизатора содержит:

* **Аргументы swap**: точный ввод (`amount_in`, `minimum_amount_out`) или точный вывод (`maximum_amount_in`, `amount_out`).
* **Спецификация маршрута**: список `program_id` + дочерних аккаунтов программы для каждого шага по порядку. Маршрутизатор читает первый аккаунт в каждой группе шагов, чтобы определить, какую программу вызвать.
* **Лимитные цены** (для CLMM): `VecDeque<u128>` границ `sqrt_price_x64`. Используется только для шагов в CLMM пулы; пустой deque является ошибкой для старых вариантов инструкции.

Маршрутизатор затем:

1. **Выполняет первый шаг:** переводит `amount_in` (или вычисляет требуемый ввод для точного вывода) на входной vault первого пула, вызывает swap этого пула и собирает вывод.
2. **Соединяет последующие шаги:** для каждого шага N использует вывод из шага N−1 как ввод для шага N.
3. **Обеспечивает slippage:** на каждом CLMM шаге проверяет `sqrt_price` против соответствующего `limit_price`; на последнем шаге проверяет общий вывод против глобального `minimum_amount_out`.

Промежуточные токены могут течь либо через **контролируемые пользователем ATA** (по одному на шаг, медленнее но прозрачнее) либо через **общий PDA-производный аккаунт** (один адрес для всех шагов, быстрее, непрозрачнее).

## Делегирование расчёта цен и комиссий

Маршрутизатор **не вычисляет цены сам**. Каждый шаг делегирует кривую дочерней программе:

* **AMM v4**: использует формулу постоянного произведения с гибридным ценообразованием OpenBook.
* **CPMM**: использует формулу постоянного произведения с настроенным уровнем комиссии.
* **CLMM**: использует математику концентрированной ликвидности с ценообразованием на основе тиков.
* **Stable**: использует кривую stable-swap для однородных токенов.

Комиссии взимаются каждым пулом в соответствии со своей конфигурацией. Маршрутизатор не берёт собственную комиссию.

## Когда избегать маршрутизатора

* **Малое количество шагов (1–2 шага).** Накладные расходы на передачу аккаунтов минимальны; просто используйте две отдельные инструкции swap.
* **Пулы не от Raydium.** Маршрутизатор знает только о четырёх типах пулов Raydium. Для маршрутов, пересекающих внешние программы, собирайте инструкции на стороне клиента.
* **Условная маршрутизация.** Если вам нужно ветвиться по ценам или состояниям пулов во время маршрута, on-chain маршрутизация менее гибка чем клиентская композиция.

## Ментальная модель

Думайте о маршрутизаторе как об **утилите упаковки транзакций**. Он берёт спецификацию вашего маршрута и упаковывает её в одну инструкцию, одну транзакцию, один compute budget. Каждый шаг внутренне CPI в свою программу пула и обрабатывает математику кривой там. Работа маршрутизатора — правильно передавать аккаунты, перемещать токены между шагами и проверять slippage.

## Что дальше

* [`products/routing/accounts`](/ru/products/routing/accounts) — PDA власти маршрута и паттерн общего аккаунта.
* [`products/routing/instructions`](/ru/products/routing/instructions) — полный API инструкций (все 10 вариантов).
* [`products/routing/code-demos`](/ru/products/routing/code-demos) — примеры построения маршрутов на TypeScript и чистом Rust.
* [`integration-guides/routing-and-mev`](/ru/integration-guides/routing-and-mev) — более широкая стратегия многошаговой маршрутизации.
