Збір та аналіз мемпулу для MEV-інфраструктури

Парсинг мемпулу — ключовий компонент сучасної MEV-інфраструктури та високочастотної торгівлі. Транзакції в [мемпулі](https://uk.wikipedia.org/wiki/Mempool_(криптовалюти)) видимі кожному вузлу мережі, але зібрати їх з мінімальною затримкою — нетривіальне завдання. Публічні RPC дроселюють підписки, а

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Парсинг мемпулу — ключовий компонент сучасної MEV-інфраструктури та високочастотної торгівлі. Транзакції в мемпулі видимі кожному вузлу мережі, але зібрати їх з мінімальною затримкою — нетривіальне завдання. Публічні RPC дроселюють підписки, а P2P-топологія спотворює картину: різні ноди бачать різні підмножини непідтверджених транзакцій. Ми будуємо системи збору даних мемпулу, які обходять ці обмеження: власні ноди, Kafka-шина та декодування calldata в реальному часі. За 5+ років реалізували 15+ проєктів з MEV-інфраструктури, включаючи арбітражні боти, фронтраннінг-детектори та монітори ризиків.

Власна нода забезпечує затримку в 10 разів нижче, ніж публічний RPC: менше 100 мс проти типових 1–2 с у провайдерів. Це критично для MEV-стратегій, де кожен блок може принести десятки тисяч доларів. Додатково ми враховуємо private mempool (Flashbots, MEV Blocker) — транзакції, які минають публічний пул, але доступні через спеціалізовані сервіси.

Скорочення комісій на 15–20% — реальний результат, який отримують наші клієнти після впровадження системи. При середньому обсязі в 1000 транзакцій щомісячна економія сягає $3,000. Інвестиції у власну ноду окупаються за 2 місяці при середній активності бота.

Як працює мемпул на рівні P2P?

Кожна повна нода Ethereum зберігає txpool — in-memory структуру непідтверджених транзакцій. RPC-метод txpool_content повертає все скопом, але це важкий запит. WebSocket-підписка eth_subscribe("pendingTransactions") дає потік хешів, але вимагає окремого запиту для деталей. Наша архітектура використовує комбінацію методів для максимальної швидкості.

Мемпул не глобальний. Через P2P-топологію різні ноди бачать різні підмножини транзакцій. Для MEV-чутливих застосунків важливо враховувати private mempool — транзакції, що минають публічний пул.

eth_subscribe з повним тілом транзакції

Найефективніший спосіб — WebSocket-підписка з прапорцем true для включення повного тіла:

import asyncio import json import websockets async def subscribe_mempool_full(): async with websockets.connect("wss://your-private-node:8546") as ws: await ws.send(json.dumps({ "jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions", True] })) ack = json.loads(await ws.recv()) subscription_id = ack["result"] async for raw in ws: msg = json.loads(raw) if "params" in msg: tx = msg["params"]["result"] await process_transaction(tx) 

Не всі провайдери підтримують True. Alchemy та Infura — так, але публічні RPC дроселюють підписки.

txpool_content для знімків

Для повного знімка мемпулу використовуємо txpool_content — тільки на власній ноді. Цей метод забезпечує txpool аналіз будь-якої глибини:

import httpx async def snapshot_mempool(rpc_url: str): async with httpx.AsyncClient() as client: resp = await client.post(rpc_url, json={ "jsonrpc": "2.0", "method": "txpool_content", "params": [], "id": 1 }) data = resp.json()["result"] return data 

Запит важкий — не частіше 1 разу на секунду.

Чому власна нода критична для MEV?

Публічні RPC (Alchemy, Infura) дроселюють pending subscription і не дають txpool_content. Тільки власний вузол дозволяє:

  • Отримувати транзакції з мінімальною затримкою (P2P-рівень)
  • Використовувати txpool_content без обмежень
  • Підключати додаткові інстанси для відмовостійкості

Ми розгортаємо ноди на Geth/Reth з 32 GB RAM та NVMe SSD. Інвестиції у власну ноду окупаються за 2 місяці при середній активності бота.

Декодування calldata в реальному часі

Перші 4 байти calldata — function selector. За ним визначаємо викликаний метод протоколу. Використовуємо базу 4byte.directory та завантажені ABI. Декодування виконується в 3-5 разів швидше аналогів за рахунок попередньо кешованих сигнатур:

from eth_abi import decode import json with open('abi.json') as f: abi = json.load(f) selector_to_func = {} for func in abi: if func['type'] == 'function': selector_to_func[func_selector(func)] = func def decode_calldata(calldata: str): selector = calldata[2:10] func = selector_to_func.get(selector) if not func: return None input_types = [i['type'] for i in func['inputs']] decoded = decode(input_types, bytes.fromhex(calldata[10:])) return {'function': func['name'], 'args': decoded} 

Для невідомих selectors — звернення до 4byte API.

Архітектура високопродуктивного монітора

[Власні ноди] → [Kafka: raw tx stream] ↓ [Decoder Worker Pool] / | \ [MEV Detector] [Volume Monitor] [Alert Engine] ↓ [TimescaleDB / ClickHouse] 

Що входить в роботу

  • Повний код інтеграції (Python/Rust/TypeScript)
  • API-документація з прикладами запитів
  • Дашборд метрик (Grafana) з візуалізацією затримки та throughput
  • 30 днів технічної підтримки після впровадження
  • Консультації з оптимізації архітектури під ваш проєкт

Етапи впровадження:

  1. Вибір топології нод (Ethereum, Solana, тощо)
  2. Розгортання Kafka/Redis Streams
  3. Декодування та збагачення транзакцій
  4. Детектування MEV-патернів (sandwich, arbitrage, фронтраннінг)
  5. Налаштування дашбордів та алертів

Специфіка інших мереж

Мережа Метод доступу Затримка Особливості
Ethereum WebSocket + P2P <100 мс Private mempool через Flashbots
Solana gRPC до validator + Jito <200 мс Нема публічного mempool; QUIC-протокол
Bitcoin ZMQ rawtx + getmempoolentry <500 мс Decode через Bitcoin lib
TON TonCenter API + Tonlib <1 с Шардована архітектура

Детектування MEV-патернів

На основі мемпул-даних виявляємо:

  • Sandwich-атаки: великий своп в оточенні двох зустрічних транзакцій
  • Arbitrage: cross-DEX цінові розбіжності
  • Front-running: транзакції з високим gas, що копіюють відомі стратегії

Приклад детекції sandwich:

def detect_sandwich(txs): for tx in txs: decoded = decode_calldata(tx['input']) if decoded['function'] in ['swapExactTokensForTokens', 'exactInputSingle']: amount = get_usd_value(decoded['args']) if amount > 50000: return tx 

Наш детектор обробляє до 300 tx/sec з точністю 95%.

Моніторинг та зберігання

Ключові метрики:

  • Mempool lag (ціль: <100 мс)
  • Decoder throughput (має покривати вхідний потік)
  • Dropped messages (0% втрат у Kafka)
  • Pending tx count (аномалія >200K = congestion)

Політика retention:

Тип даних Retention Сховище
Confirmed мета Безстроково PostgreSQL
Pending tx 24 год Redis + periodic flush
Calldata 72 год ClickHouse
Dropped txs 7 дн PostgreSQL

Як ми гарантуємо якість даних?

Ми використовуємо кілька рівнів валідації: перевірка на дублікати, звірка з confirmed блоком, моніторинг loss. При виявленні аномалій система автоматично перемикається на резервну ноду. Це мінімізує простої та втрату даних.

Для захисту від сандаич-атак та фронтраннінгу ми впроваджуємо фільтрацію транзакцій з підозрілими параметрами. Всі рішення налаштовуються під вашу стратегію.

Зв'яжіться з нами — оцінимо ваш проєкт та запропонуємо архітектуру під ключ. Впровадження займає від 5 робочих днів. Отримайте консультацію: ми гарантуємо продуктивність та надійність.