Розроблення бота для DEX-арбітражу
На Uniswap V3 ETH/USDC коштує $3,201.50. На SushiSwap той же пул — $3,199.80. Різниця $1.70 на ETH. Щоб це було прибутковим, потрібно враховувати: газ 21,000 + 150,000 (два свопи) ≈ 170,000 газу × 30 gwei × $3,200 / 1e9 ETH = ~$16 на газ. Отже, щоб вийти в плюс на $1,000 угоді, різниця повинна бути щонайменше 1.6%. На $100,000 вистачить 0.016%. Саме тому DEX арбітраж працює лише при достатньому розмірі позиції або достатньому спреді ціни — і flash loans роблять цей бізнес доступним без власного капіталу.
Чому більшість арбітражних ботів не приносять прибуток
Конкуренція mempool та MEV
Найскладніший ворог DEX-арбітражника — не конкуренти, а MEV-боти з прямим доступом до block builder. Через Flashbots eth_sendBundle ваша транзакція йде прямо до builder, минаючи публічний mempool. Це означає, що фронтранер не бачить її до включення в блок.
Якщо ваш бот відправляє транзакції в публічний mempool — ви в програшній позиції. Звичайний gas auction означає, що інші боти бачать вашу транзакцію, оцінюють прибутковість і виставляють вищий газ. Або ваша транзакція не включається (потрачений газ), або включається після їхньої транзакції, яка вже виконала арбітраж.
Рішення: відправляти всі транзакції через Flashbots або MEV Blocker (агрегатор кількох приватних relay). Плюс — можна включати кілька транзакцій в один bundle з atomic виконанням.
Slippage та розрахунок реальної ціни
Проблема більшості початківців реалізацій: розрахунок арбітражної можливості за spot price пулу без урахування price impact. Беруть ETH/USDC на Uniswap V3 — sqrtPriceX96 дає поточну ціну, але не ціну після вашого $50,000 свопу.
Реальна ціна після свопу залежить від:
- Поточної ліквідності в активному діапазоні (Uniswap V3)
- Розміру вашої транзакції
- Спреду через кілька діапазонів тиків (якщо позиція велика)
Для V3 правильний розрахунок вимагає моделювання свопу через контракт Quoter або off-chain через @uniswap/v3-sdk. Різниця між spot price та реальною ціною виконання при $100k своп на середньо-ліквідному пулі — 0.3-1.5%. Без урахування цього розрахунок прибутковості буде неправильним.
Оптимізація газу: різниця між прибутком та збитком
На mainnet Ethereum арбітраж працює лише при оптимізованому використанні газу. Типова помилка: два окремих ERC-20 approve + swap = +43,000 газу надлишків. Рішення — використовувати permit (EIP-2612) для токенів з підтримкою, або попередньо схвалити максимальну суму та не переодобряти.
Ще більше економії від atomic арбітражу через flash loan в одному контракті: немає кількох transfer між EOA та DEX, немає окремих транзакцій. Весь арбітраж — одна транзакція: flash loan → swap A → swap B → repay loan → profit. Газ для такої транзакції: 200,000 - 400,000 залежно від протоколів.
Як ми будуємо DEX-арбітражний бот
Архітектура: on-chain контракт + off-chain executor
Система складається з двох частин:
On-chain контракт — виконує угоду атомарно. Реалізує flash loan callback (Aave IFlashLoanReceiver або Uniswap V3 IUniswapV3FlashCallback), виконує своп, перевіряє прибуток в кінці транзакції та reverts якщо profit < мінімального порогу.
function executeArbitrage(
address tokenIn,
uint256 amountIn,
SwapPath[] calldata path,
uint256 minProfit
) external {
// Flash loan від Aave
// Виконати своп по маршруту
// Assert profit >= minProfit, інакше revert
// Repay flash loan
// Трансфер прибутку власнику
}
Revert при недостатньому прибутку — ключова захист: якщо ринок змінився поки транзакція йшла до mempool, контракт откатується, витративши лише base газ (~21,000), а не весь газ виконання свопів.
Off-chain executor (Node.js/Rust) — постійно моніторить стан пулів, розраховує арбітражні можливості, формує та відправляє транзакції через Flashbots.
Джерела даних про ціни
| Метод | Latency | Вартість | Застосування |
|---|---|---|---|
| WebSocket підписка на ноду (eth_subscribe) | ~10-50ms | Висока (власна нода) | Mainnet production |
| Alchemy/Infura WebSocket | ~100-300ms | Середня | Розроблення, тестування |
| The Graph (GraphQL) | ~500ms-2s | Низька | Не підходить для арбітражу |
| Uniswap V3 Subgraph | ~1-5s | Безплатно | Не підходить |
Для production арбітражу — власна Ethereum нода або dedicated endpoint. Публічний RPC на Alchemy free tier з rate limiting убить будь-який серйозний бот.
Альтернатива власній ноді: Fiber (bloXroute), Eden Network — платні сервіси з прямим доступом до mempool та прискореною пропагацією транзакцій.
Пошук оптимального шляху: Bellman-Ford
Для multi-hop арбітражу (A→B→C→A) завдання пошуку прибуткового шляху — це завдання пошуку негативного циклу в графі цін. Класичний алгоритм — Bellman-Ford на графі, де вузли = токени, ребра = пулі, ваги = log(exchange_rate).
На практиці для 5-10 DEX та 50-100 токенів граф невеликий, Bellman-Ford розраховується за мілісекунди. При більшій кількості пар переходять на евристики або обмежують глибину пошуку до 3-hop.
Cross-chain арбітраж через мости
Арбітраж між Ethereum mainnet та Arbitrum/Optimism технічно можливий, але програється у більшості випадків: bridge latency від 10 хвилин до 7 днів робить атомарність неможливою. До завершення bridge рыночна ціна вирівнюється. Виключення — fast bridges (Hop, Connext) з latency 5-30 хвилин та можливістю хеджування через perp позицію.
Моніторинг та управління рисками
Арбітражний бот в production вимагає моніторингу кількох метрик:
- Win rate по транзакціях: якщо > 30% транзакцій reverts через зміну ціни — занадто повільний executor або занадто низький minProfit поріг
- Gas efficiency: відношення реального прибутку до витраченого газу
- Capital utilization: якщо flash loan ліміти в Aave вичерпані — доступний розмір позиції зменшується
- Конкурентне середовище: зростання середнього base fee в пікові години зменшує прибутковість
Grafana + Prometheus для метрик, алерти через Telegram bot при падінні win rate або змін балансів.
Процес розроблення
Аналітика (2-3 дні). Визначення цільових DEX, мереж, пар токенів. Аналіз конкурентного середовища — скільки ботів вже працює у обраному сегменті.
Розроблення контракту (1 тиждень). Flash loan інтеграція, multi-hop swap логіка, profit assertion. Тести на mainnet fork через Foundry.
Розроблення executor (1-2 тижні). WebSocket моніторинг пулів, Bellman-Ford / path finding, відправка Flashbots bundle.
Оптимізація та деплой (3-5 днів). Gas профілювання, fine-tuning minProfit порогів, production деплой.
Орієнтири по строкам
Базовий бот (2 DEX, один мережа, flash loan) — 1-2 тижні. Multi-DEX, multi-path з Flashbots інтеграцією — 2-4 тижні. Cross-chain або advanced MEV стратегії — від 6 тижнів. Вартість розраховується індивідуально.







