MENU
Настройки
Бортовой журнал
Technical6 апреля 2026 г.

Внутри самого быстрого свопа Stellar: мульти-маршрутная оценка

Как Shadow Pocket оценивает маршруты ордербука и AMM-пулов параллельно, чтобы найти лучший курс обмена на Stellar, обновляя его каждый леджер.

Большинство DEX-интерфейсов на Stellar выбирают один маршрут для вашего свопа. Они проверяют ордербук, может быть, смотрят на пул ликвидности и выдают число. Shadow Pocket делает принципиально другое — оценивает все возможные маршруты параллельно и отправляет 100% вашей сделки через тот, который возвращает максимальный выход.

Проблема одномаршрутных свопов

Когда вы обмениваете Актив A на Актив B в Stellar, существует несколько возможных площадок исполнения:

  • Ордербук SDEX — лимитные ордера, размещённые трейдерами и маркет-мейкерами.
  • AMM-пулы ликвидности — пулы с постоянным произведением, где цена определяется алгоритмически.
  • Кросс-пейр пути — маршруты A → C → B, использующие промежуточные активы как мосты.

Одномаршрутный подход выбирает один и надеется на лучшее. Но ликвидность смещается с каждым закрытием леджера (примерно каждые 5 секунд). Ордербук может иметь отличную цену на малой глубине, но разваливаться на больших объёмах. Пул может предлагать лучшие курсы для крупных свопов благодаря непрерывной кривой ликвидности. А иногда кросс-пейр путь через XLM или USDC бьёт оба прямых варианта.

Ошибка в выборе стоит пользователю реальных денег.

Как работает параллельная оценка

Бэкенд Shadow Pocket оценивает все доступные маршруты независимо для каждого запроса котировки. Вот процесс:

  1. Обнаружение — система определяет все жизнеспособные маршруты: прямой ордербук, каждый релевантный AMM-пул и кросс-пейр пути через основные мостовые активы.
  2. Параллельная симуляция — каждый маршрут симулируется независимо с точной суммой ввода. Симуляция ордербука проходит по книге, заполняя ордера на каждом ценовом уровне. Симуляция пулов использует формулу постоянного произведения. Симуляция путей цепочкой связывает множественные операции.
  3. Сравнение выхода — каждый маршрут возвращает симулированную сумму выхода с учётом проскальзывания при конкретном размере ввода.
  4. Выбор победителя — маршрут с наибольшим выходом выбирается. Без разделения, без частичного заполнения — 100% сделки идёт через лучший путь.

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

Почему 100% в один маршрут (а не разделение)

Разделение маршрутов звучит умно в теории — отправить часть сделки через ордербук и часть через пул, чтобы минимизировать ценовое воздействие. На практике, в Stellar, это вносит сложность, которая редко окупается:

  • Комиссии транзакций пренебрежимо малы — нет причин оптимизации газа для батчинга.
  • Атомарное исполнение — транзакции Stellar либо полностью выполняются, либо полностью откатываются. Разделение добавляет операции, увеличивая шанс частичного сбоя.
  • Тайминг леджера — цены меняются каждые 5 секунд. К моменту исполнения разделённого ордера оптимальное соотношение разделения может сместиться.

Для подавляющего большинства объёмов сделок на Stellar отправка 100% через единственный лучший маршрут превосходит любую стратегию разделения. Математика проста: симулируй все варианты, выбери победителя.

Обновление по леджеру через SSE

Котировки свопов быстро устаревают. Shadow Pocket поддерживает их актуальность с помощью Server-Sent Events (SSE), подключённых к потоку леджеров Stellar:

  1. Фронтенд открывает SSE-соединение к эндпоинту /ledgers?cursor=now.
  2. Каждый раз, когда закрывается новый леджер (~5 секунд), срабатывает событие.
  3. Фронтенд применяет debounce и запускает новый запрос котировки.
  4. Бэкенд заново оценивает все маршруты с текущим состоянием ордербука и пулов.
  5. UI обновляет отображаемый курс, сумму выхода и разбивку по маршрутам.

Это означает, что пользователь всегда видит котировку, отражающую текущее состояние леджера — а не что-то 30-секундной давности, что могло значительно измениться.

Детали реализации

Несколько инженерных решений, обеспечивающих надёжную работу:

Управление debounce-таймером — таймер debounce обновления котировки должен корректно обнуляться в callback setTimeout. Если ссылка на таймер устарела, UI может застрять в состоянии загрузки навсегда.

Независимость состояния загрузки — индикатор загрузки котировки свопа сбрасывается вне проверки abort signal. Это предотвращает дедлок, при котором отменённый запрос навсегда оставляет UI в состоянии загрузки.

Обход Service Worker — content type text/event-stream для SSE исключён из логики precache Service Worker. Без этого обхода Service Worker перехватывал бы потоковое соединение и ломал обновления в реальном времени.

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

Результат

Пользователь видит интерфейс обмена, обновляющийся в реальном времени, показывающий точно, по какому маршруту пойдёт его сделка, и гарантирующий лучший доступный курс по всем площадкам исполнения на Stellar. Без ручного выбора маршрута, без устаревших котировок, без угадывания с разделением.

Быстрые свопы — это не о сырой скорости. Это о том, чтобы всегда иметь самую свежую, самую точную информацию, когда нажимаешь «Обменять».

© 2024-2026 StellarHub™. Все права защищены.

Please Rotate Your Device

For the best viewing experience, please rotate your phone to portrait mode.

Screen Too Narrow

Your device screen width does not support this application. Please use a device with a wider screen.