Розробка MEV-бота

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

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

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

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

  • 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
    1120
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    588
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    854

Розроблення 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 та складності стратегії.