Два вида агрегаторов, одна форма
«Агрегатор» покрывает два разных продукта с общей архитектурой:
- Ончейн DEX-агрегаторы (1inch, Odos, Jupiter в Solana) маршрутизируют сделку токен-в-токен через AMM-пулы одной сети и исполняют её одной транзакцией, которую подписывает пользователь.
- Кросс-чейн агрегаторы / мгновенные обмены (модель, которую использует SyntheticSwap) маршрутизируют конвертацию монета-в-монету между несвязанными сетями к источникам ликвидности, исполняя вне сети и рассчитываясь двумя ончейн-переводами.
У обоих одни и те же пять слоёв: адаптеры источников, нормализация котировок, выбор маршрута, исполнение и мониторинг. Вот что делает каждый слой и где две модели расходятся.
Слой 1 — Адаптеры источников
Каждый источник говорит на своём языке. Пул DEX выставляет резервы и функцию swap; провайдер ликвидности — API с эндпоинтом котировки, лимитами и эндпоинтом заявки. Задача адаптера — превратить каждое из этого в один интерфейс: при данных входном активе, выходном активе и сумме — что доставит этот источник и может ли он вообще доставить прямо сейчас?
Практические заботы, доминирующие в этом слое в продакшене:
- Доступность. Источники падают или приостанавливают пары. Адаптер должен быстро отказывать и позволять маршрутизации продолжать без него.
- Лимиты. У каждого источника есть минимум и максимум по паре; адаптер должен их отдавать, чтобы роутер не выбрал источник, который отклонит заявку.
- Семантика комиссий. Котируемый выход уже за вычетом комиссии выплаты? Комиссия во входном активе или в выходном? Ошибка здесь — самая частая причина «оценка не совпала».
- Идентичность актива. «USDT» — не один актив. Адаптер должен отображать именование каждого источника на канонический ключ (актив, сеть) — USDT в TRON и USDT в Ethereum — разные вещи с разными комиссиями и подтверждениями. Страницы пар SyntheticSwap несут сеть в URL (/swap/usdt-erc20/usdt-trc20) именно по этой причине.
Слой 2 — Нормализация
Роутер не может сравнивать курс с курсом. Он сравнивает чистый выход: количество выходного актива, которое пользователь реально получит после всех комиссий источника. Нормализация приводит ответ каждого адаптера к этой единственной цифре плюс метаданные: лимиты источника, требуемые подтверждения, ожидаемая комиссия выплаты и окно валидности.
Ончейн-агрегаторы добавляют здесь газ — стоимость транзакции исполнения маршрута, зависящую от длины маршрута и текущего уровня комиссий сети. Кросс-чейн агрегаторы добавляют сетевую комиссию выплаты, фиксированную для каждой выходной сети и наиболее значимую для малых сумм.
Слой 3 — Выбор маршрута
Со сравнимыми котировками на руках выбор — то, чем продукт отличается от наивного «взять лучший курс»:
- С учётом размера. Котировки запрашиваются на реальную сумму. Источник, лучший при $100, может быть худшим при $50 000 из-за глубины. Ончейн-роутеры моделируют это через резервы пулов (кривые constant-product или stable-swap); кросс-чейн роутеры запрашивают у каждого источника котировку на размер.
- Разделённые маршруты. Ончейн-агрегаторы могут разбить одну сделку по нескольким пулам в одной транзакции, чтобы снизить ценовое воздействие. Кросс-чейн роутеры обычно выбирают один источник на заявку, потому что каждому источнику нужен свой депозитный адрес; разбиение предлагается пользователю как два обмена.
- Мультихоп. Ончейн A → B может быть дешевле как A → USDC → B; роутер ищет пути. Кросс-чейн источники обычно маршрутизируют внутри себя, а агрегатор сравнивает итоговые выходы.
- Ограничения. Отсечь источники, чьи лимиты исключают сумму, чья пара приостановлена или чья котировка устарела.
Выход этого слоя — один маршрут (или план разбиения) и одна цифра чистого выхода — число, которое видит пользователь.
Слой 4 — Исполнение
Здесь две модели расходятся сильнее всего.
Ончейн: агрегатор строит транзакцию, вызывающую его роутер-контракт с выбранным путём; пользователь подписывает; контракт исполняет атомарно — либо весь маршрут проходит и пользователь получает не меньше принятого минимума, либо транзакция откатывается. Допуск проскальзывания обеспечивается в контракте. Защита от MEV — отправка через приватный релей вместо публичного мемпула.
Кросс-чейн: атомарной транзакции между Bitcoin и Monero нет. Исполнение — конечный автомат:
- Создать заявку у выбранного источника; получить депозитный адрес, уникальный для заявки.
- Наблюдать за сетью депозита в ожидании транзакции на этот адрес; считать подтверждения против требования сети (2 для Bitcoin, 15 для Ethereum, 1 для USDT в TRON).
- При нужном числе исполнить сделку с источником по текущему курсу для пришедшей суммы (плавающий) или по зафиксированному (фиксированный).
- Отправить выплату; записать хэш транзакции; показать на странице статуса.
- Обработать исключения: сумма ниже минимума → возврат за вычетом комиссии; сумма отличается от заявки → пересчёт; отправлен не тот актив → эскалация.
Число подтверждений не настраивается ради скорости — это то, что делает шаг 3 безопасным против реорганизаций и заменённых транзакций.
Слой 5 — Мониторинг и прозрачность
Агрегатор, который не может показать свою работу, — чёрный ящик. Минимальная продакшен-телеметрия:
- Задержка котировок, доля ошибок и доля побед по каждому источнику (как часто его выбирают).
- Оценка против фактического выхода по каждой заявке — чтобы ловить ошибки семантики комиссий в слое адаптеров.
- Распределение времени от депозита до выплаты по сетям — чтобы замечать перегрузку сети и зависшие заявки.
Показанные пользователям, те же данные становятся фичей. Страницы пар SyntheticSwap показывают полный выход для пробной суммы относительно среднего курса CoinGecko — прямое чтение результата слоя 3 — и оценку времени по подтверждениям из слоя 4.
Где разработчики ошибаются
- Доверие полю «rate» источника. Всегда считайте чистый выход сами по правилам комиссий источника и сверяйте с исполненными заявками.
- Тикер как идентичность. Сеть должна быть частью ключа актива с первого дня.
- Оптимизация под демо-сумму. Выбор маршрута, протестированный только на $100, ломается на $10 000.
- Игнорирование пути возврата. Депозиты ниже минимума и суммы с вычтенной комиссией — ежедневные события; поток для них — часть продукта, а не краевой случай.
- Охват раньше качества маршрутизации. Сто пар с одним источником у каждой хуже двадцати пар с тремя источниками.
Частые вопросы
Мгновенный обмен — «просто фронтенд для одного провайдера»? Может быть — это тот сценарий отказа, который описывает статья. Настоящий агрегатор имеет адаптеры слоя 1 для нескольких источников и слой 3, который выбирает между ними на каждый запрос.
Почему кросс-чейн обмены не могут быть атомарными? Потому что Bitcoin, Monero и TRON не разделяют виртуальную машину. Атомарные обмены через HTLC существуют для некоторых пар, но непрактичны для Monero и для большинства пользователей; модель конечного автомата — работающее решение.
Как агрегаторы зарабатывают? Спред на чистом выходе, иногда доля комиссии источника. Честные показывают чистый выход и дают пользователям сравнивать.
Какой слой самый сложный? Адаптеры. Маршрутизация — хорошо изученная оптимизация; поддерживать корректными семантику комиссий, лимиты и простои двадцати источников — ежедневная работа.
ETH → USDT (TRC-20)
USDC (ERC-20) → USDT (TRC-20)
BTC → ETH
SOL → USDT (TRC-20)