Compare commits

...

2 Commits

Author SHA1 Message Date
Luke Van Seters
32dd9cff3a Write setup 2021-09-14 13:03:45 -04:00
Luke Van Seters
15af8269e3 Require DB to run mev-deployment 2021-09-14 12:33:09 -04:00
2 changed files with 60 additions and 101 deletions

144
README.md
View File

@ -1,104 +1,62 @@
# mev-inspect
A [WIP] Ethereum MEV Inspector in Python managed by Poetry
## Containers
mev-inspect's local setup is built on [Docker Compose](https://docs.docker.com/compose/)
By default it starts up:
- `mev-inspect` - a container with the code in this repo used for running scripts
- `db` - a postgres database instance
- `pgadmin` - a postgres DB UI for querying and more (avaiable at localhost:5050)
An MEV inspector for Ethereum
## Running locally
Setup [Docker](https://www.docker.com/products/docker-desktop)
Setup [Poetry](https://python-poetry.org/docs/#osx--linux--bashonwindows-install-instructions)
mev-inspect-py is built to run on kubernetes locally and in production
Install dependencies through poetry
### Install dependencies
Setup a local kubernetes deployment (we use [kind](https://kind.sigs.k8s.io/docs/user/quick-start))
Setup [Tilt](https://docs.tilt.dev/install.html) which manages the local deployment
### 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
### Inspect many blocks
### Inspect all incoming blocks
## Database migrations
### Creating a new database migration
## 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
```
Start the services (optionally as daemon)
```
poetry run start [-d]
```
Apply the latest migrations against the local DB:
```
poetry run exec alembic upgrade head
```
Run inspect on a block
```
poetry run inspect -b/--block-number 11931270 -r/--rpc 'http://111.11.11.111:8545/'
```
To stop the services (if running in the background, otherwise just ctrl+c)
```
poetry run stop
```
MEV container can be attached via
```
poetry run attach
```
Running additional compose commands are possible through standard `docker
compose ...` calls. Check `docker compose help` for more tools available
## Executing scripts
Any script can be run from the mev-inspect container like
```
poetry run exec <your command here>
```
For example
```
poetry run exec python examples/uniswap_inspect.py -block_number=123 -rpc='111.111.111'
```
### Poetry Scripts
```bash
# code check
poetry run lint # linting via Pylint
poetry run test # testing and code coverage with Pytest
poetry run isort # fixing imports
poetry run mypy # type checking
poetry run black # style guide
poetry run pre-commit run --all-files # runs Black, PyLint and MyPy
# docker management
poetry run start [-d] # starts all services, optionally as a daemon
poetry run stop # shutsdown all services or just ctrl + c if foreground
poetry run build # rebuilds containers
poetry run attach # enters the mev-inspect container in interactive mode
# launches inspection script
poetry run inspect -b/--block-number 11931270 -r/--rpc 'http://111.11.11.111:8545/'
```
## Rebuilding containers
After changes to the app's Dockerfile, rebuild with
```
poetry run build
```
## Using PGAdmin
1. Go to [localhost:5050](localhost:5050)
2. Login with the PGAdmin username and password in `.env`
3. Add a new engine for mev_inspect with
- host: db
- user / password: see `.env`
## Contributing
Pre-commit is used to maintain a consistent style, prevent errors and ensure test coverage.
Install pre-commit with:
Then install pre-commit hooks with
```
poetry run pre-commit install
```
Update README if needed

View File

@ -1,22 +1,23 @@
load('ext://helm_remote', 'helm_remote')
load("ext://helm_remote", "helm_remote")
helm_remote("postgresql",
repo_name='bitnami',
repo_url='https://charts.bitnami.com/bitnami',
repo_name="bitnami",
repo_url="https://charts.bitnami.com/bitnami",
set=["postgresqlPassword=password", "postgresqlDatabase=mev_inspect"],
)
load('ext://secret', 'secret_from_dict')
load("ext://secret", "secret_from_dict")
k8s_yaml(secret_from_dict("mev-inspect-db-credentials", inputs = {
"username" : "postgres",
"password": "password",
}))
docker_build('mev-inspect', '.',
docker_build("mev-inspect", ".",
live_update=[
sync('.', '/app'),
run('cd /app && poetry install',
trigger='./pyproject.toml'),
sync(".", "/app"),
run("cd /app && poetry install",
trigger="./pyproject.toml"),
],
)
k8s_yaml("k8s/app.yaml")
k8s_resource(workload="mev-inspect-deployment", resource_deps=["postgresql-postgresql"])