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

Коли кожна мілісекунда вирішує результат MEV-стратегії, стандартні методи збору даних з мемпула стають вузьким місцем. Ми розробляємо системи парсингу мемпула, які обходять обмеження публічних RPC і дають повну картину непідтверджених транзакцій. Наша команда реалізує проєкт під ключ — від архітектури власних нод до налаштування потокової аналітики, забезпечуючи надійну основу для ваших алгоритмів.
Часті запитання

Парсинг мемпулу — ключовий компонент сучасної 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 робочих днів. Отримайте консультацію: ми гарантуємо продуктивність та надійність.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142