Розробка системи порівняння цін на DEX

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи порівняння цін на DEX
Середній
~3-5 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1121
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    858

Розробка системи порівняння цін на DEX

Приходить задача: знайти кращий курс для свапу 50 ETH в USDC. Uniswap v3 дає одну ціну, Curve — іншу, Balancer — третю. Різниця в 0.3% на 50 ETH — це вже $150 тільки на одній транзакції. При торгівлі об'ємами від 100k USD розрив між DEX досягає 1-2%, і кожен своп без агрегації — прямі втрати.

Завдання системи порівняння цін — дати користувачеві або алгоритму актуальну картину по всім релевантним DEX за одне звернення, враховуючи slippage, вартість газу та split routing.

Де зазвичай ломається наївна реалізація

On-chain вызови в реальному часі — повільно і дорого

Перший підхід, який приходить в голову: викликати quoteExactInputSingle на Uniswap v3 Quoter, get_dy на Curve, queryBatchSwap на Balancer — і порівнювати. Проблема в тому, що це симуляція on-chain виконання через eth_call. На mainnet з 8-12 DEX та 3-4 варіантами маршрутів отримуємо 30+ RPC-запитів на кожен запит користувача. При 200ms на запит — 6 секунд очікування. За це время цена вже змінилася.

Конкретний кейс з практики: агрегатор з наївним last-write-wins кешем терпів втрату актуальності котировок за 3-5 блоків. Користувач бачив ціну X, натискав своп, отримував revert через slippage, платив газ впустую. Конверсія падала на 40%.

Stale data та блочний drift

Ціна в пулу Uniswap v3 змінюється з кожним свапом. Якщо кеш оновлюється раз в 12 секунд (1 блок на Ethereum), між оновленнями може пройти кілька крупних угод. Особливо критично для пулів з низькою ліквідністю — там зсув ціни на 1-2% за блок не рідкість.

Curve використовує іншу модель ценообразования — StableSwap invariant. Формула A * n^n * sum(x_i) + D = A * D * n^n + D^(n+1) / (n^n * prod(x_i)) чутлива до балансів пулу, які змінюються по-своєму. Не можна застосовувати одну і ту ж логіку розрахунку slippage для Uniswap v3 concentrated liquidity та Curve stable pools.

Архітектура системи

Два шари даних: off-chain індексація + on-chain верифікація

Робоча схема: The Graph субграфи для індексації стану пулів — ліквідність, поточні ціни, об'єми. Дані оновлюються по-блочно та доступні через GraphQL без RPC-навантаження. Для Uniswap v3 — офіційний subgraph з pools, ticks, positions. Для Curve — власний субграф або парсинг подій TokenExchange.

On-chain верифікація потрібна тільки в момент безпосереднього виконання: фінальний quoteExactInput перед транзакцією користувача з актуальним block state.

Джерело Latency Точність RPC-навантаження
The Graph subgraph 2-5 сек (1 блок) Висока Мінімальна
Multicall + Quoter 200-500 мс Точна Висока
DEX SDK (off-chain math) <10 мс Розрахункова Немає
WebSocket подій Real-time Подієвна Середня

Off-chain math для швидкості

Uniswap v3 надає @uniswap/v3-sdk та @uniswap/smart-order-router — повний розрахунок маршруту з split routing відбувається локально, без RPC, на основі завантаженого стану пулів. Аналогічно для Curve — Python SDK або TypeScript-порт формули StableSwap дозволяє обчислити get_dy локально.

Такий підхід знижує latency до 10-50 мс та усуває залежність від RPC-провайдера на гарячому шляху.

WebSocket для стрімінга

Для інтерфейсів з realtime-оновленням цін — WebSocket підписка через ethers.js provider.on('block', ...) або viem watchBlocks. При кожному новому блоці перерахувати котировки тільки для активних торгових пар у UI, а не всього маркетплейсу.

Процес роботи

Аналітика (1-2 дні). Визначаємо список DEX під конкретний чейн, потрібні торгові пари, необхідну latency. Ethereum mainnet, Polygon, Arbitrum, Base — у кожного свої активні DEX та своя структура ліквідності.

Розробка backend (3-5 днів). Сервіс індексації з The Graph + Multicall, кеш стану пулів, REST/WebSocket API. Стек: Node.js + TypeScript, viem для on-chain взаємодій, Redis для кешу.

Розробка розрахункового модулю (2-3 дні). Off-chain math для кожного підключеного DEX, split routing алгоритм, облік gas cost при порівнянні.

Frontend інтеграція (1-2 дні). wagmi хуки для отримання котировок, відображення порівняння, інтеграція з трансакційним флоу.

Тестування. Fork-тесты на Hardhat/Foundry з реальним mainnet-станом — перевіряємо точність розрахунків проти реальних on-chain результатів.

Орієнтири за строками

Базова система порівняння для 3-5 DEX на одному чейні — 3-5 днів. Повноцінний агрегатор з multi-chain, split routing та realtime UI — від 2 тижнів. Строки залежать від кількості підключаємих DEX та вимог до latency.

Вартість рассчитується після уточнення чейнів, DEX та вимог до продуктивності.