mev-inspect-py/README.md

151 lines
3.4 KiB
Markdown

# mev-inspect-py
> illuminating the dark forest 🌲💡
**mev-inspect-py** is an MEV inspector for Ethereum
Given a block, mev-inspect finds:
- miner payments (gas + coinbase)
- tokens transfers and profit
- swaps and [arbitrages](https://twitter.com/bertcmiller/status/142763202826305946://twitter.com/bertcmiller/status/1427632028263059462)
- ...and more
Data is stored in Postgres for analysis
## Running locally
mev-inspect-py is built to run on kubernetes locally and in production
### Install dependencies
First, setup a local kubernetes deployment - we use [kind](https://kind.sigs.k8s.io/docs/user/quick-start)
If using kind, create a new cluster with:
```
kind create cluster
```
Next, install [helm](https://helm.sh/docs/intro/install/) - helm is a package manager for kubernetes
Lastly, setup [Tilt](https://docs.tilt.dev/install.html) which manages running and updating kubernetes resources locally
### Start up
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 and RPC with support for parity traces**
Next, start all servcies with:
```
tilt up
```
Press "space" to see a browser of the services starting up
On first startup, you'll need to apply database migrations. Apply with:
```
kubectl exec deploy/mev-inspect-deployment -- alembic upgrade head
```
## Inspecting
### Inspect a single block
Inspecting block [12914944](https://twitter.com/mevalphaleak/status/1420416437575901185)
```
kubectl exec deploy/mev-inspect-deployment -- poetry run inspect-block 12914944
```
### Inspect many blocks
Inspecting blocks 12914944 to 12914954
```
kubectl exec deploy/mev-inspect-deployment -- poetry run inspect-many-blocks 12914944 12914954
```
### Inspect all incoming blocks
Start a block listener with
```
kubectl exec deploy/mev-inspect-deployment -- /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-deployment -- tail -f listener.log
```
And stop the listener with
```
kubectl exec deploy/mev-inspect-deployment -- /app/listener stop
```
## Contributing
### Guide
✨ Coming soon
### Pre-commit
We use pre-commit to maintain a consistent style, prevent errors, and ensure test coverage.
To set up, install dependencies through poetry
```
poetry install
```
Then install pre-commit hooks with
```
poetry run pre-commit install
```
### Tests
Run tests with
```
kubectl exec deploy/mev-inspect-deployment -- poetry run pytest --cov=mev_inspect tests
```
## 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-deployment -- 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](https://github.com/flashbots/mev-inspect-py/blob/ef60c097719629a7d2dc56c6e6c9a100fb706f76/docker-compose.yml)
Tear down docker-compose resources
```
docker compose down
```
Then go through the steps in the current README for kube setup