Розроблення MEV-бота
MEV — це не експлойт і не сіра зона. Це конкурентна інфраструктура: searcher помічає можливість у мемпулі раніше за інших, оформляє bundle та відправляє через Flashbots/MEV-Boost. Ринок MEV на Ethereum — $600M+ витягнуто за 2023 рік за даними mevboost.pics. Більшість — arbitrage та liquidation, не sandwich. Розроблення MEV-бота — це розроблення високонаванного фінансової системи з latency в мілісекундах.
Архітектура MEV-бота: де насправді все складно
Симуляція транзакцій до відправлення
Головний інструмент MEV-розробника — не сам контракт, а рухавик симуляції. Перед тим, як відправити bundle через eth_sendBundle у Flashbots relay, потрібно точно знати: принесе ли транзакція прибуток після газу та bribe.
Стандартний підхід: eth_call на архівній ноді з stateOverride — підміняємо баланс своєї адреси та симулюємо виконання. Але eth_call не враховує зміни стану всередину bundle. Для точної симуляції — debug_traceCall або власний EVM (revm на Rust).
Ми використовуємо revm (Rust EVM implementation) для локальної симуляції з станом форкнутого mainnet. Latency симуляції: 1-3ms проти 20-50ms через RPC eth_call. При конкуренції за арбітраж різниця критична.
Виявлення можливостей: три основних вектори
Arbitrage між DEX. Ціна токена A/B на Uniswap v3 відрізняється від Curve. Бот розраховує оптимальний розмір swap через Newton-Raphson на кривій x*y=k (Uniswap v2) або get_dy (Curve StableSwap). Flash loan з Aave v3 покриває вимогу капіталу — fee 0.05%.
Ключова складність: оптимальний розмір swap, який максимізує profit. Для Uniswap v2 це аналітично:
optimal_amount_in = sqrt(reserve0 * reserve1 * 997 / 1000) - reserve0
Для v3 з концентрованою ліквідністю — потрібен tick-by-tick розрахунок через QuoterV2.
Liquidation. Моніторинг health factor позицій у Aave v2/v3, Compound v3, Euler. Коли health factor падає нижче 1.0 (Aave) або collateral ratio порушується (Compound) — виклик liquidationCall / liquidate. Прибуток = liquidation bonus (5-15% залежно від asset).
Проблема: кілька ботів бачать одну позицію одночасно. Перемагає той, хто запропонував більший bribe MEV-Boost builder-у або потрапив у більш ранній приватний mempool.
Sandwich — ми не робимо. Sandwich атаки шкодять звичайним користувачам. Арбітраж та ліквідації — це корисна ринкова функція.
Інфраструктура: нода, latency, builder connection
MEV без власної ноди — це handicap. Публічний RPC додає 50-200ms. Потрібен geth/reth у режимі --txpool.globalslots 10000 з включеним txpool subscription через WebSocket. Для ліквідацій достатньо Alchemy/QuickNode з WebSocket — latency допустима (позиції не закриваються мгновенно).
Для арбітраже — власна нода або dedicated нода у провайдера (Alchemy Growth план, latency ~15ms). Flashbots eth_sendBundle відправляється напрямку до builder-ів (beaverbuild, rsync, titan), мінуючи публічний mempool.
Контракт виконання
Сам on-chain контракт — простий executor: приймає параметри swap, виконує через Uniswap/Curve router, перевіряє profit через require(profit > minProfit), повертає кошти. Ніякого зберігання коштів на контракті — тільки транзитні потоки через flash loan.
Захист від копіювання: функція виконання перевіряє msg.sender == owner та опціонально block.coinbase == expectedBuilder (для захисту від front-run у публічному мемпулі).
Стек розроблення
Python (швидкий прототип) → Rust (production). web3.py для прототипування логіки, ethers-rs + revm для production бота. Solidity контракт executor — Foundry. Моніторинг через Prometheus + Grafana: tracks per second, газ споживання, profit/loss за сесіями.
Процес роботи
Аналіз стратегії (2-5 днів). Визначаємо вектор: арбітраж між конкретними парами, ліквідації в конкретних протоколах. Розраховуємо історичну можливість за on-chain даними через Dune Analytics або The Graph.
Прототип на Python (3-5 днів). Логіка виявлення + симуляція через RPC. Тест на історичних даних (backtest через архівну ноду).
Production на Rust (1-2 тижні). Переписуємо hot path. WebSocket subscriptions, локальна симуляція через revm, async executor через tokio.
Контракт + деплой (3-5 днів). Executor у Solidity, тесты у Foundry, деплой на mainnet.
Налаштування інфраструктури. Нода, Flashbots relay connection, моніторинг. Це часто займає стільки ж, скільки сама розроблення бота.
Орієнтири за часом
Простий arbitrage бот (2 DEX, одна пара): 1-2 тижні. Multi-DEX arbitrage з оптимізацією маршруту: 3-4 тижні. Система з ліквідаціями + арбітражем + Rust інфраструктурою: 6-8 тижнів. Терміни сильно залежать від вимог до latency та складності стратегії.







