Разработка бота для мониторинга мемпула
В публичном мемпуле Ethereum через eth_subscribe("newPendingTransactions") видна лишь малая часть транзакций. Приватные транзакции Flashbots и MEV Blocker остаются невидимыми. Для DeFi-протокола, зависящего от ликвидаций или аналитики газа, это слепая зона. Собственный mempool-бот с доступом к txpool API даёт полную картину: видит 90–100% pending-транзакций, включая те, что идут по приватным каналам. Мы проектируем таких ботов под ключ — от выбора ноды до деплоя с дашбордом метрик.
Сравнение собственной ноды и публичного RPC
Публичный RPC через eth_subscribe("newPendingTransactions") показывает только broadcast-транзакции — приватные (Flashbots, MEV Blocker) не видны. Запуск собственного Geth с txpool API даёт полный снапшот: txpool_content показывает все pending и queued транзакции, которые проходят через вашу ноду. Для latency-critical задач — colocation с крупными валидаторами (Equinix, Amsterdam) снижает задержку до 10–50 мс против 200 мс на публичном RPC.
| Уровень доступа | Видимость транзакций | Типичная latency | Сложность |
|---|---|---|---|
| Публичный RPC | 30–60% (только broadcast) | 150–400 мс | Низкая |
| Собственная нода (txpool) | 90–100% (p2p) | 50–150 мс | Средняя |
| Colocation + peering | 100% (включая Flashbots при партнёрстве) | 10–50 мс | Высокая |
Собственная нода видит в 3 раза больше транзакций, чем публичный RPC. Для бота, следящего за ликвидациями, это разница между прибыльной сделкой и пропущенным шансом.
Как декодировать транзакции в реальном времени?
Raw транзакция — байты. Чтобы понять, что она делает, декодируем calldata через ABI. Для известных протоколов (Uniswap, Aave, Curve) используем заранее загруженные интерфейсы. Для неизвестных — 4byte.directory: отправляем селектор (первые 4 байта) и получаем сигнатуру функции. Типовой код декодинга Uniswap V3 exactInputSingle:
const uniV3Iface = new Interface(UNISWAP_V3_ABI); function decodeUniswapTx(tx: ethers.TransactionResponse): DecodedSwap | null { if (!tx.data || tx.data === '0x') return null; const selector = tx.data.slice(0, 10); if (selector === '0x414bf389') { const decoded = uniV3Iface.decodeFunctionData('exactInputSingle', tx.data); return { tokenIn: decoded.params.tokenIn, tokenOut: decoded.params.tokenOut, amountIn: decoded.params.amountIn }; } return null; } Какие сценарии приносят наибольшую выгоду?
Разные задачи требуют разного уровня доступа к мемпулу. Сравним их по latency и сложности:
| Сценарий | Требуемый уровень доступа | Ожидаемая latency | Экономия газа |
|---|---|---|---|
| Liquidation bot (Aave) | Собственная нода + txpool | <100 мс | 20–30% на приоритете |
| Sandwich detection | Публичный RPC или собственная нода | <500 мс | — (защита) |
| Gas price forecasting | Собственная нода + снапшоты | <50 мс (периодически) | 10–15% средняя |
Liquidation bot. Мониторим позиции на Aave/Compound, в мемпуле ловим транзакции обновления цены Chainlink. Декодируем новую цену, симулируем ликвидацию через local eth_call. Если found — отправляем liquidation с увеличенным maxFeePerGas, чтобы обогнать оракула. Средняя экономия на газе — 30% за счёт приоритетной очереди.
Sandwich detection. Парсим pending транзакции на DEX-свапы. Если на тот же пул идёт две транзакции: первая с высоким gas (фронтраннит), вторая — жертва. Система алертит оператора или автоматически блокирует протокол от такого бата. Реализовано через map pending hash -> swap details.
Gas price forecasting. Снимаем снапшот txpool_content, анализируем распределение maxFeePerGas. Вычисляем p50, p75, p95 — это позволяет предсказать next base fee с точностью до 15%. Используем для отправки негорящих транзакций с оптимальной ценой.
Что входит в работу?
- Архитектура: проектирование высоконагруженной системы (Redis Streams + Worker Pool + Execution Engine).
- Разработка: модули декодирования, фильтры (по адресу, сигнатуре, газа), система оповещений.
- Деплой: настройка собственной ноды (Geth/Reth) с оптимальным peering, мониторинг latency.
- Документация: описание API, инструкции по запуску, дашборд метрик.
- Поддержка: 14 дней post-launch для коррекции.
Развёрнутый план работ
- Аналитика (2 дня): обсуждаем задачу — ликвидации, аналитика, anti-sandwich, MEV. Определяем SLA по latency, объём транзакций.
- Проектирование (3 дня): выбираем стек (Geth/Reth, Foundry, ethers.js, Redis), рисуем архитектуру очередями.
- Реализация (5–15 дней): пишем модули декодинга, фильтры, execution engine. Сквозное тестирование на теневой ноде.
- Тест (3 дня): симулируем нагрузку 300+ tx/s, замеряем latency, отлавливаем regressions.
- Деплой (2 дня): настройка ноды, мониторинг, документация.
Опыт наших инженеров — 6+ лет в блокчейн-разработке. За плечами 27+ проектов по MEV, амниотизации и децентрализованным протоколам. Гарантируем прозрачность: весь код проходит внутренний audit и формальную верификацию (Slither, Mythril).
Процесс и сроки
Итоговый срок — от 2 до 8 недель в зависимости от complexity. Стоимость рассчитывается индивидуально после аудита задачи. Закажите консультацию — оценим объём работ бесплатно.
Источники
- Ethereum Mempool — официальная документация.
- Flashbots MEV-Boost — спецификация MEV-Boost.
Получите развёрнутый proposal по вашему сценарию — свяжитесь с нами.







