Перейти к основному содержанию

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 упаковывает многошаговые свопы в одну 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.

Что дальше