mev-inspect-py

Blockchain / Web3

⚠️ Инструмент устарел (deprecated). Инструмент Flashbots для анализа MEV (Maximal Extractable Value): обнаружение arbitrage, liquidations, sandwich-атак и front-running в блоках Ethereum. Парсит транзакции, классифицирует MEV-стратегии и вычисляет прибыль. Исторические данные доступны на datasets.flashbots.net.

Добавлен 15.07.2026 · Обновлён 15.07.2026 · Blockchain / Web3
Установка
git clone https://github.com/flashbots/mev-inspect-py
cd mev-inspect-py

# Через Docker (рекомендуется — требует PostgreSQL)
cp .env.example .env  # вписать ETH_RPC_URL
docker-compose up -d

# Inspect конкретного блока
poetry run inspect-block --block-number 12965000

# Inspect диапазона блоков
poetry run inspect-many-blocks --start-block 12965000 --end-block 12965100
переведено ИИ

⚠️ Этот инструмент устарел. Вы можете посетить Flashbots Data для исторических данных mev-inspect по Ethereum и присоединиться к нам на форуме Flashbots. ⚠️

mev-inspect-py

standard-readme compliant Discord

Инспектор максимально извлекаемой стоимости (MEV) для Ethereum, призванный просветить "тёмный лес" 🌲💡

При заданном блоке mev-inspect находит: - выплаты майнеру (газ + coinbase) - переводы токенов и прибыль - обмены и арбитражи - ...и многое другое

Данные хранятся в Postgres для анализа.

Установка

mev-inspect-py создан для запуска на kubernetes локально и в продакшене.

Зависимости

  • docker
  • kind или аналогичный инструмент для запуска локальных кластеров Kubernetes
  • kubectl
  • helm
  • tilt

Настройка

Создайте новый кластер с помощью:

kind create cluster

Установите переменную окружения RPC_URL на RPC-узел для получения блоков.

В настоящее время mev-inspect-py требует узел с поддержкой трейсов и квитанций Erigon (пока не geth 😔).

Хорошим хостинг-вариантом является "Ethereum Mainnet Archival with trace calls" от pokt.network.

Пример:

export RPC_URL="http://111.111.111.111:8546"

Далее запустите все сервисы с помощью:

tilt up

Нажмите "пробел", чтобы увидеть в браузере запуск сервисов.

При первом запуске вам потребуется применить миграции базы данных:

./mev exec alembic upgrade head

И загрузить данные о ценах

./mev prices fetch-all

Инструкции по установке в монолитном варианте (без kubernetes)

Для альтернативного способа запуска mev-inspect-py для более простых конфигураций или целей отладки см. инструкции по монолитной установке.

Использование

Проверка одного блока

Проверка блока 12914944:

./mev inspect 12914944

Проверка множества блоков

Проверка блоков 12914944 по 12914954:

./mev inspect-many 12914944 12914954

Проверка всех входящих блоков

Запустите слушатель блоков с помощью:

./mev listener start

По умолчанию он возобновит работу с того места, где вы остановились. При первом запуске слушатель начинает с самого нового блока.

Просматривайте логи слушателя с помощью:

./mev listener tail

И остановите слушатель с помощью:

./mev listener stop

Дозаполнение (Backfilling)

Для крупномасштабного дозаполнения вы можете проверять множество блоков параллельно.

Чтобы проверить блоки 12914944 по 12915044, выполните

./mev backfill 12914944 12915044

Это поставит блоки в очередь Redis для последующей обработки сервисом mev-inspect-worker.

Чтобы увеличить или уменьшить степень параллелизма, обновите значение replicaCount для helm-чарта mev-inspect-workers.

Локально это можно сделать, отредактировав Tiltfile и изменив "replicaCount=1" на желаемую степень параллелизма:

k8s_yaml(helm(
    './k8s/mev-inspect-workers',
    name='mev-inspect-workers',
    set=["replicaCount=1"],
))

Вы можете наблюдать за запуском и завершением воркер-подов, отслеживая статус всех подов

watch kubectl get pods

Чтобы видеть прогресс и неудачные партии, подключитесь к Redis с помощью

./mev redis

Для общего количества сообщений выполните запрос:

HLEN dramatiq:default.msgs

Для сообщений, которые не удалось обработать и которые ожидают повторной попытки в очереди задержки (DQ), выполните запрос:

HGETALL dramatiq:default.DQ.msgs

Для сообщений, окончательно не обработанных в очереди мертвых писем (XQ), выполните запрос:

HGETALL dramatiq:default.XQ.msgs

Чтобы очистить очередь, удалите ключи основной очереди и очереди задержки

DEL dramatiq:default.msgs
DEL dramatiq:default.DQ.msgs

Для получения дополнительной информации о очередях см. спецификацию, опубликованную dramatiq

Дозаполнение списка блоков

Создайте файл, содержащий по одному блоку в строке, например, blocks.txt с содержимым:

12500000
12500001
12500002

Затем поставьте блоки в очередь с помощью

cat blocks.txt | ./mev block-list

Чтобы просматривать логи для конкретного воркер-под, возьмите его имя пода, используя приведенный выше метод, а затем выполните:

kubectl logs -f pod/mev-inspect-worker-abcdefg

(где mev-inspect-worker-abcdefg — это ваше фактическое имя пода)

Исследование данных

Все результаты проверки хранятся в Postgres.

Чтобы подключиться к локальной базе данных Postgres для запросов, запустите клиентский контейнер с помощью:

./mev db

Когда вы увидите приглашение:

mev_inspect=#

Вы готовы выполнять запросы!

Попробуйте найти общее количество обменов, декодированных с помощью UniswapV3Pool:

SELECT COUNT(*) FROM swaps WHERE abi_name='UniswapV3Pool';

или топ-10 арбитражей по валовой прибыли, полученными в WETH:

SELECT *
FROM arbitrages
WHERE profit_token_address = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
ORDER BY profit_amount DESC
LIMIT 10;

Совет по Postgres: введите \x, чтобы перейти в "Расширенный режим отображения", который выглядит лучше для результатов со множеством столбцов.

Часто задаваемые вопросы

Как удалить / сбросить мои локальные данные postgres?

Остановите систему, если она запущена:

tilt down

Удалите их с помощью:

kubectl delete pvc data-postgresql-postgresql-0

Запустите снова:

tilt up

И повторно запустите миграции, чтобы снова создать таблицы:

./mev exec alembic upgrade head

Я использовал настройку docker-compose и хочу перейти на kube, что теперь?

Снова добавьте старый файл docker-compose.yml в каталог mev-inspect-py.

Копию можно найти здесь

Уничтожьте ресурсы docker-compose:

docker compose down

Затем выполните шаги из текущей инструкции по установке для kubernetes.

Ошибка от сервера (AlreadyExists): pods "postgres-client" already exists

Это означает, что контейнер клиент postgres не завершился корректно.

Удалите его с помощью:

kubectl delete pod/postgres-client

Затем запустите его снова.

Кураторы

Участие в разработке

Flashbots — это исследовательско-разработческий коллектив, работающий над смягчением негативных внешних эффектов децентрализованных экономик. Мы вносим свой вклад вместе с более широким сообществом свободного ПО, чтобы просветить тёмный лес.

Вы приветствуетесь здесь <3.

  • Если вы хотите к нам присоединиться, приходите и поздоровайтесь в нашем Discord чате.
  • Если у вас есть вопрос, отзыв или от об ошибке для этого проекта, пожалуйста, создайте новый Issue.
  • Если вы хотите внести вклад кодом, ознакомьтесь с файлом CONTRIBUTING.
  • Мы просто просим вас быть добрыми.

Безопасность

Если вы обнаружите уязвимость в безопасности в этом проекте или в любой другой инициативе, связанной с Flashbots, дайте нам знать, отправив электронное письмо на security@flashbots.net.


Сделано с ☀️ коллективом ⚡🤖.

Комментарии
Войдите, чтобы оставить комментарий