Розробка DEX-агрегатора під ключ з маршрутизацією свопів
Розробник інтегрує swap у dApp, напряму в один пул Uniswap v3 — і користувачі скаржаться на погані курси. Причина: для великих свопів ($50K+) ліквідність одного пулу не оптимальна. Розбиття на кілька джерел (split routing) може дати 0.3-0.8% покращення ціни. На $100K свопі це $300-800 різниці. Саме це робить DEX-агрегатор — знаходить оптимальний маршрут через кілька DEX одночасно.
Ми розробляємо DEX-агрегатор з нуля: від проектування routing engine до deployment смарт-контрактів (Aggregator Router, SwapStep). Наші інженери мають досвід роботи з 10+ протоколами та тисячами пулів. Агрегатор дає користувачам найкращі ціни, знижує slippage та економить газ порівняно з ручним пошуком пулів. Маємо 5+ років досвіду в DeFi, реалізували 10+ DEX-агрегаторів та 15+ DeFi-проєктів. Отримайте консультацію — оцінимо ваш проєкт. У портфоліо — 10+ DeFi-проєктів, гарантія прозорості коду та своєчасної здачі. Таким чином, агрегатор дає до 0.8% кращу ціну, що в 1.5–2 рази краще за використання одного пулу.
Покрокова інструкція використання агрегатора
- Вибір токенів: Користувач обирає токен, який хоче обміняти, та бажаний токен отримання.
- Отримання quote: Запит до routing engine, який аналізує граф ліквідності та повертає найкращий маршрут (або кілька маршрутів з частками).
-
Виконання свопу: Підписання транзакції, яка викликає
AggregatorRouter.swap()з передачею маршруту та мінімальної суми output. - Отримання токенів: Після підтвердження транзакції токени зараховуються на гаманець користувача.
Як працює routing algorithm?
Граф DEX ліквідності та пошук шляху
Routing задача — це знаходження оптимального шляху в орієнтованому графі, де:
- Вузли = токени
- Ребра = пули (кожен пул генерує два орієнтовані ребра: token0→token1 і зворотне)
- Вага ребра = output amount для заданого input
Для простого свопу A→B потрібен найкоротший шлях (за максимізацією output). Для split routing — потрібно розбити input на K частин і знайти K шляхів, які в сумі дають максимальний output.
Тривіальний підхід — перебір усіх шляхів довжиною 1-3 hop, порівняння outputs. Працює при невеликій кількості пулів. При 10,000+ пулів (Uniswap v3 на mainnet має >8,000 активних пулів) — потрібна оптимізація на базі графових алгоритмів.
Практичний підхід:
- Попередня фільтрація: тільки пули з TVL > $100K та об'ємом > $10K за 24h (евристика відсіювання неліквідних пулів)
- Bellman-Ford для знаходження всіх шляхів до 3 hop (з урахуванням мемоізації проміжних результатів)
- Для split routing: симуляція кількох пропорцій (100/0, 80/20, 60/40, 50/50) через кожен маршрут, вибір максимуму
Для EVM чейнів з high gas (Ethereum mainnet) 3-way split вже недоцільний: економія від кращої ціни може перекриватися додатковим газом. На Arbitrum/Optimism (gas ~$0.01-0.05) split routing вигідний навіть для маленьких свопів.
Джерело: Офіційна документація Uniswap V2 та V3
Як split routing покращує ціну свопу?
Ключова вимога: розрахувати amountOut для кожного маршруту швидко та точно без on-chain викликів (вони дорогі та повільні).
Uniswap v2 (x*y=k): аналітична формула:
amountOut = (amountIn * 997 * reserveOut) / (reserveIn * 1000 + amountIn * 997)
Дані резервів через getReserves() — один RPC виклик на пул.
Uniswap v3 (концентрована ліквідність): немає аналітичної формули для довільних сум. Потрібно симулювати тик-за-тиком. QuoterV2.quoteExactInputSingle робить це on-chain, але це RPC виклик з gas симуляцією. Для швидкого routing — використовувати off-chain реалізацію tick math (@uniswap/v3-sdk) з кешованими даними тиків із subgraph.
Curve: get_dy(i, j, dx) — view функція, статик-колл. Для кожного пула Curve потрібен окремий RPC виклик, але вони батчаться через Multicall3.
Staleness даних та рішення
Дані резервів і тиків застарівають з кожним блоком. При volatile ринку за 1-2 блоки ціна може зсунутися значно. Стратегії оновлення:
- Підписка на події:
Sync(Uniswap v2),Swap(Uniswap v3/Curve) через WebSocket. При кожній події оновлюємо кеш для конкретного пула - Періодичний polling: кожні 5-10 секунд для менш ліквідних пулів
- On-demand refresh: при запиті quote — оновити дані для топ-10 пулів маршруту через Multicall
Наш підхід: WebSocket events для топ-100 пулів за TVL, polling кожні 15 секунд для решти.
Яка архітектура агрегатора?
On-chain vs Off-chain routing
Повністю off-chain: routing Engine розраховує маршрут, повертає готовий calldata для swap router. Smart contract — просто executor, жодної логіки вибору шляху. Це підхід 1inch v5 Aggregation Router. Мінімальний on-chain gas, але довіра до backend.
Hybrid: routing off-chain, on-chain верифікація мінімального output. Контракт отримує path + amountOutMinimum, виконує через Uniswap/Curve routers, перевіряє require(amountOut >= amountOutMinimum). При невідповідності — revert. Це наш рекомендований підхід.
| Критерій | Off-chain | Hybrid |
|---|---|---|
| Gas on-chain | Мінімальний | Трохи вищий (перевірка) |
| Довіра | Повна до backend | Часткова (верифікація) |
| Гнучкість | Висока | Висока |
| Безпека | Середня | Висока |
Aggregator Router контракт
contract AggregatorRouter {
function swap(
SwapParams calldata params
) external payable returns (uint256 amountOut) {
// Для кожного кроку маршруту
for (uint i = 0; i < params.steps.length; i++) {
amountOut = _executeStep(params.steps[i], amountOut);
}
require(amountOut >= params.minAmountOut, "Insufficient output");
// Transfer output tokens to recipient
IERC20(params.tokenOut).safeTransfer(params.recipient, amountOut);
}
}
SwapStep містить: protocol (uniswap_v2/v3/curve/balancer), poolAddress, tokenIn, tokenOut, portion (для split routing — яка частка йде через цей крок).
Комісія агрегатора
Агрегатори беруть fee двома способами:
- Spread: показують користувачу quote трохи гірше реального, різницю залишають. Непрозоро.
- Explicit fee: беруть N bps (basis points) від output. Прозоро, краще для репутації.
Типово: 5-30 bps (0.05-0.30%) залежно від swap size. Реалізується в контракті як feeAmount = amountOut * feeBps / 10000.
Мультичейн та бриджинг
Розширення агрегатора до cross-chain swap: користувач відправляє USDC на Ethereum, отримує MATIC на Polygon. Під капотом: swap USDC→bridgeToken на Ethereum, bridge через Across/Stargate, swap bridgeToken→MATIC на Polygon.
Інтеграція з Across Protocol v3: SpokePool.deposit() з destination calldata для фінального swap. Latency bridge: 1-5 хвилин. Газ: суттєво вищий за одиночний swap, доцільно від $1000+ суми.
Стек розробки
Backend routing engine: TypeScript, viem для RPC викликів, Redis для кешування даних пулів, WebSocket для event subscriptions. Smart contracts: Solidity 0.8.x + Foundry. Frontend: React + wagmi + токен імпорт через Uniswap Token Lists стандарт.
Для subgraph даних (TVL, volume, тики Uniswap v3): The Graph hosted service або власний subgraph на Graph Node.
Що входить у роботу
- Документація архітектури routing engine та смарт-контрактів
- Вихідний код з повною історією комітів (Git)
- Інтеграція з DEX пулами: Uniswap v2/v3, Curve, Balancer, Sushiswap
- Розгортання smart-контрактів у mainnet/testnet
- API для отримання quote та виконання swap
- Frontend-інтерфейс з відображенням маршрутів та деталей комісій
- Доступ до моніторингу (Tenderly, Grafana)
- Навчання команди замовника (2 години воркшопу)
- Підтримка протягом 1 місяця після запуску
Як відбувається процес роботи?
Routing engine (1-2 тижні). Граф пулів, алгоритм пошуку маршруту, симуляція outputs, кешування.
Smart contract (1 тиждень). Aggregator router + тести fork mainnet.
API та frontend (1-2 тижні). Quote API, swap UI з відображенням маршруту.
Тестування. Порівняння quotes з еталоном (1inch, Paraswap) у тис. транзакцій.
Орієнтири за термінами
| Елемент | Термін |
|---|---|
| Routing engine (1-2 DEX) | 1-2 тижні |
| Смарт-контракти + тести | 1 тиждень |
| API та frontend | 1-2 тижні |
| Інтеграція Curve/Balancer | +1 тиждень |
| Мультичейн (2-3 чейни) | +2-4 тижні |
| Cross-chain swap (Across) | +1-2 тижні |
Приклад розрахунку split routing
Для свопу 10 ETH на USDC: Uniswap v3 8.2 ETH → 24600 USDC, Curve 1.8 ETH → 5430 USDC, сума 30030 USDC. Через один пул Uniswap v3: 10 ETH → 29800 USDC. Виграш 230 USDC (0.77%).Підсумковий термін: від 2–3 тижнів для MVP до 2–3 місяців для повноцінного продукту. Зв'яжіться з нами — отримайте детальну оцінку під ваш проєкт. Досвід нашої команди — 5+ років у DeFi, 10+ реалізованих агрегаторів. Замовте консультацію інженерів.







