2021-10-27 15:47:59 +01:00
2021-10-11 15:48:36 -07:00
2021-10-18 10:47:41 -04:00
2021-10-22 14:01:08 -07:00
2021-10-05 12:43:43 -04:00
2021-10-18 12:58:57 -04:00
2021-07-15 14:31:39 -04:00
2021-07-27 17:28:04 -04:00
2021-10-14 17:41:57 -04:00
2021-10-14 17:41:57 -04:00
2021-10-27 15:47:59 +01:00
2021-10-19 16:32:39 +00:00
2021-10-18 12:01:26 -04:00
mev
2021-10-27 15:47:59 +01:00
2021-10-18 10:47:41 -04:00
2021-10-27 15:47:59 +01:00
2021-10-19 16:47:53 +00:00

mev-inspect-py

standard-readme compliant Discord

Maximal extractable value inspector for Ethereum, to illuminate the dark forest 🌲💡

Given a block, mev-inspect finds:

  • miner payments (gas + coinbase)
  • tokens transfers and profit
  • swaps and arbitrages
  • ...and more

Data is stored in Postgres for analysis.

Install

mev-inspect-py is built to run on kubernetes locally and in production.

Dependencies

Set up

Create a new cluster with:

kind create cluster

Set an environment variable RPC_URL to an RPC for fetching blocks.

Example:

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

Note: mev-inspect-py currently requires an RPC of a full archive node with support for Erigon traces and receipts (not geth 😔).

Next, start all services with:

tilt up

Press "space" to see a browser of the services starting up.

On first startup, you'll need to apply database migrations with:

kubectl exec deploy/mev-inspect -- alembic upgrade head

Usage

Inspect a single block

Inspecting block 12914944:

kubectl exec deploy/mev-inspect -- poetry run inspect-block 12914944

Inspect many blocks

Inspecting blocks 12914944 to 12914954:

kubectl exec deploy/mev-inspect -- poetry run inspect-many-blocks 12914944 12914954

Inspect all incoming blocks

Start a block listener with:

kubectl exec deploy/mev-inspect -- /app/listener start

By default, it will pick up wherever you left off. If running for the first time, listener starts at the latest block.

See logs for the listener with:

kubectl exec deploy/mev-inspect -- tail -f listener.log

And stop the listener with:

kubectl exec deploy/mev-inspect -- /app/listener stop

Exploring

All inspect output data is stored in Postgres.

To connect to the local Postgres database for querying, launch a client container with:

kubectl run -i --rm --tty postgres-client --env="PGPASSWORD=password" --image=jbergknoff/postgresql-client -- mev_inspect --host=postgresql --user=postgres

When you see the prompt:

mev_inspect=#

You're ready to query!

Try finding the total number of swaps decoded with UniswapV3Pool:

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

or top 10 arbs by gross profit that took profit in WETH:

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

Postgres tip: Enter \x to enter "Explanded display" mode which looks nicer for results with many columns.

FAQ

How do I delete / reset my local postgres data?

Stop the system if running:

tilt down

Delete it with:

kubectl delete pvc data-postgresql-postgresql-0

Start back up again:

tilt up

And rerun migrations to create the tables again:

kubectl exec deploy/mev-inspect -- alembic upgrade head

I was using the docker-compose setup and want to switch to kube, now what?

Re-add the old docker-compose.yml file to your mev-inspect-py directory.

A copy can be found here

Tear down docker-compose resources:

docker compose down

Then go through the steps in the current README for kube setup.

Error from server (AlreadyExists): pods "postgres-client" already exists

This means the postgres client container didn't shut down correctly.

Delete this one with:

kubectl delete pod/postgres-client

Then start it back up again.

Maintainers

Contributing

Flashbots is a research and development collective working on mitigating the negative externalities of decentralized economies. We contribute with the larger free software community to illuminate the dark forest.

You are welcome here <3.

  • If you want to join us, come and say hi in our Discord chat.
  • If you have a question, feedback or a bug report for this project, please open a new Issue.
  • If you would like to contribute with code, check the CONTRIBUTING file.
  • We just ask you to be nice.

Security

If you find a security vulnerability on this project or any other initiative related to Flashbots, please let us know sending an email to security@flashbots.net.


Made with ☀️ by the 🤖 collective.

Description
🔎 an MEV inspector for Ethereum 🔎
Readme MIT 8.5 MiB
Languages
Python 86.5%
Starlark 8.4%
Shell 2%
Smarty 1.7%
Go 0.9%
Other 0.5%