Running mev-inspect-py outside of kubernetes can be useful for debug purposes. In this case, the steps for installation are:
- Install dependencies (pyenv, poetry, postgres)
- Set up python virtual environment using matching python version (3.9.x) and install required python modules using poetry
- Create postgres database
- Run database migrations
The database credentials and archive node address used by mev-inspect-py need to be loaded into environment variables (both for database migrations and to run mev-inspect-py).
So, starting from a clean Ubuntu 22.04 installation, the prerequisites for pyenv, psycopg2 (python3-dev libpq-dev) can be installed with
sudo apt install -y make build-essential git libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev python3-dev libpq-dev
Install pyenv using the web installer
curl https://pyenv.run | bash
and add the following to ~/.bashrc
(if running locally) or ~/.profile
(if running over ssh).
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
Then update the current shell by running source ~/.bashrc
or source ~/.profile
as appropriate.
Install Poetry using the web installer
curl -sSL https://install.python-poetry.org | python3 -
add the following to ~/.bashrc
(if running locally) or ~/.profile
(if running over ssh)
export PATH="/home/user/.local/bin:$PATH"
If running over ssh you should also add the following to ~/.profile
to prevent Poetry errors from a lack of active keyring:
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
Again update current shell by running source ~/.bashrc
or source ~/.profile
as appropriate.
We have tested two alternatives for postgres - installing locally or as a container.
To install locally from a clean Ubuntu 22.04 installation, run:
sudo apt install postgresql postgresql-contrib
Note: You may need to reconfigure your pg-hba.conf to allow local access.
To avoid interfering with your local postgres instance, you may prefer to run postgres within a docker container. For docker installation instructions, please refer to https://docs.docker.com/engine/install/ubuntu/
With all dependencies now installed, clone the mev-inspec-py repo
git clone https://github.com/flashbots/mev-inspect-py.git
cd mev-inspect-py
We now install the required pythn version and use Poetry to install the required python modules into a virtual environment.
pyenv install 3.9.16
pyenv local 3.9.16
poetry env use 3.9.16
poetry install
mev-inspect-py outputs to a postgres database, so we need to set this up. There are various ways of doing this, two options are presented here.
sudo -u postgres psql
\password
postgres
create database mev_inspect;
\q
To avoid interfering with your local postgres instance, you may prefer to run postgres within a docker container. First ensure that postgres is not currently running to ensure port 5432
is available:
sudo systemctl stop postgresql
and then start a containerised postgres instance:
sudo docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=mev_inspect postgres
We will need to set a few environment variables to use mev-inspect-py. These will be required every time mev-inspect-py runs, so again you may wish to add these to your ~/.bashrc
and/or ~/.profile
as appropriate. Note that you need to substitute the correct URL for your archive node below if you are not running Erigon locally.
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgres
export POSTGRES_HOST=localhost
export RPC_URL="http://127.0.0.1:8545"
Finally run the database migrations and fetch price information:
poetry run alembic upgrade head
poetry run fetch-all-prices
The same functionality available through kubernetes can be run in 'monolithic mode', but the relevant functions now need to be invoked by Poetry directly. So to inspect a single block, run for example:
poetry run inspect-block 16379706
Or to inspect a range of blocks:
poetry run inspect-many-blocks 16379606 16379706
Or to run the test suite:
poetry run pytest tests