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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка MEV-бота
Сложная
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Разработка 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 покрывает capital requirement — 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 (продакшн). web3.py для прототипирования логики, ethers-rs + revm для продакшн бота. Solidity контракт executor — Foundry. Мониторинг через Prometheus + Grafana: tracks per second, gas потребление, profit/loss по сессиям.

Процесс работы

Анализ стратегии (2-5 дней). Определяем вектор: арбитраж между конкретными парами, ликвидации в конкретных протоколах. Считаем историческую возможность по on-chain данным через Dune Analytics или The Graph.

Прототип на Python (3-5 дней). Логика обнаружения + симуляция через RPC. Тест на исторических данных (backtest через архивную ноду).

Продакшн на 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 и сложности стратегии.