Разработка бота для DEX-арбитража
На Uniswap V3 ETH/USDC стоит $3 201.50. На SushiSwap тот же пул — $3 199.80. Разница $1.70 на ETH. Чтобы это было прибыльно, нужно учесть: gas 21 000 + 150 000 (два свапа) ≈ 170 000 gas × 30 gwei × $3 200 / 1e9 ETH = ~$16 на gas. Значит, чтобы выйти в плюс на сделке в $1 000, разница должна быть хотя бы 1.6%. А на $100 000 хватит и 0.016%. Именно поэтому DEX арбитраж работает только при достаточном размере позиции или достаточном ценовом расхождении — и flash loans делают этот бизнес доступным без собственного капитала.
Почему большинство арбитражных ботов не приносят прибыль
Mempool конкуренция и MEV
Самый сложный враг DEX-арбитражника — не конкуренты, а MEV-боты с прямым доступом к блок-билдерам. Через Flashbots eth_sendBundle транзакция попадает напрямую к билдеру, минуя public mempool. Это значит, что фронтранер не видит её до включения в блок.
Если ваш бот отправляет транзакции в public mempool — вы в проигрышной позиции. Обычный gas auction означает, что другие боты видят вашу транзакцию, оценивают прибыльность и выставляют более высокий gas. Либо ваша транзакция не включается (потеряли gas), либо включается после их транзакции, которая уже исполнила арбитраж.
Решение: отправлять все транзакции через Flashbots или MEV Blocker (агрегатор нескольких private relays). Плюс — можно включать несколько транзакций в один bundle с atomic исполнением.
Slippage и расчёт реальной цены
Проблема большинства начинающих реализаций: расчёт арбитражной возможности по spot price пула без учёта price impact. Берёте ETH/USDC на Uniswap V3 — sqrtPriceX96 даёт текущую цену, но не цену после вашего свапа на $50 000.
Реальная цена после свапа зависит от:
- Текущей ликвидности в активном диапазоне (Uniswap V3)
- Размера вашей транзакции
- Spread через несколько tick ranges (если позиция большая)
Для V3 правильный расчёт требует симуляции свапа через Quoter контракт или off-chain через @uniswap/v3-sdk. Разница между spot price и реальной ценой исполнения при $100k свапе на среднеликвидном пуле — 0.3-1.5%. Без учёта этого расчёт прибыльности будет неверным.
Gas оптимизация: разница между прибылью и убытком
На mainnet Ethereum arbitrage работает только при оптимизированном gas usage. Типичная ошибка: два отдельных ERC-20 approve + swap = +43 000 gas сверху. Решение — использовать permit (EIP-2612) для токенов с поддержкой, или заранее одобрить максимальную сумму и не переодобрять.
Ещё больше экономит atomic arbitrage через flash loan в одном контракте: нет нескольких transfer между EOA и DEX, нет отдельных транзакций. Весь арбитраж — одна транзакция: flash loan → swap A → swap B → repay loan → profit. Gas на такую транзакцию: 200 000 - 400 000 в зависимости от протоколов.
Как мы строим DEX-арбитражный бот
Архитектура: on-chain контракт + off-chain executor
Система состоит из двух частей:
On-chain контракт — исполняет сделку атомарно. Реализует flash loan callback (Aave IFlashLoanReceiver или Uniswap V3 IUniswapV3FlashCallback), выполняет свапы, проверяет profit в конце транзакции и reverts если profit < минимального порога.
function executeArbitrage(
address tokenIn,
uint256 amountIn,
SwapPath[] calldata path,
uint256 minProfit
) external {
// Flash loan from Aave
// Execute swaps along path
// Assert profit >= minProfit, else revert
// Repay flash loan
// Transfer profit to owner
}
Revert при недостаточной прибыли — ключевая защита: если рынок изменился пока транзакция шла к мемпулу, контракт откатится, потратив только base gas (~21 000), а не весь gas исполнения свапов.
Off-chain executor (Node.js/Rust) — постоянно мониторит состояние пулов, рассчитывает арбитражные возможности, формирует и отправляет транзакции через Flashbots.
Источники данных о ценах
| Метод | Латентность | Стоимость | Применение |
|---|---|---|---|
| WebSocket subscribe к node (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. Public 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 арбитраж через bridges
Арбитраж между Ethereum mainnet и Arbitrum/Optimism технически возможен, но проигрышен в большинстве случаев: bridge latency от 10 минут до 7 дней делает атомарность невозможной. К моменту завершения bridge рыночная цена выравнивается. Исключение — fast bridges (Hop, Connext) с latency 5-30 минут и возможностью hedging через perp позицию.
Мониторинг и управление рисками
Арбитражный бот в production требует мониторинга нескольких метрик:
- Win rate по транзакциям: если > 30% транзакций revert из-за price change — слишком медленный executor или слишком низкий minProfit порог
- Gas efficiency: отношение реальной прибыли к потраченному gas
- Capital utilization: если flash loan лимиты в Aave исчерпаны — снижается доступный размер позиций
- Конкурентная среда: рост среднего base fee в пиковые часы снижает прибыльность
Grafana + Prometheus для метрик, алерты через Telegram bot при падении win rate или balances.
Процесс разработки
Аналитика (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, один network, flash loan) — 1-2 недели. Multi-DEX, multi-path с Flashbots интеграцией — 2-4 недели. Cross-chain или advanced MEV стратегии — от 6 недель. Стоимость рассчитывается индивидуально.







