relayscan icon indicating copy to clipboard operation
relayscan copied to clipboard

Ethereum MEV-Boost Relay Monitoring

relayscan

Goreport status Test status Docker hub

Monitoring, analytics & data for Ethereum MEV-Boost builders and relays

Running on https://relayscan.io

Additional URLs:

  • Builder profit:
    • Last 24h: https://www.relayscan.io/builder-profit?t=24h
    • Last 7d: https://www.relayscan.io/builder-profit?t=7d
  • Current stats in markdown:
    • https://www.relayscan.io/overview/md
    • https://www.relayscan.io/builder-profit/md
  • Daily stats:
    • https://www.relayscan.io/stats/day/2023-06-20
    • https://www.relayscan.io/stats/day/2023-06-20/json

Notes

  • Work in progress
  • At it's core, a set of tools to fill and show a postgres database
  • Multiple relays can serve a payload for the same slot (if the winning builder sent the best bid to multiple relays, and the proposer asks for a payload from all of them)
  • Comments and feature requests: @relayscan_io
  • License: AGPL
  • Maintainer: @metachris

Overview

  • Uses PostgreSQL as data store
  • Configuration:
    • Relays in /vars/relays.go
    • Builder aliases in /vars/builder_aliases.go
    • Version and common env vars in /vars/vars.go
  • Some environment variables are required, see .env.example
  • Saving and checking payloads is split into phases/commands:
    • data-api-backfill -- queries the data API of all relays and puts that data into the database
    • check-payload-value -- checks all new database entries for payment validity
    • update-builder-stats -- create daily builder stats and save to database

Getting started

Run

You can either build relayscan from the repository, or use the Docker image:

# Build & run
make build
./relayscan help
./relayscan version

# Run with Docker
docker run flashbots/relayscan
docker run flashbots/relayscan /app/relayscan version

---

# Grab delivered payloads from relays data API, and fill up database
./relayscan core data-api-backfill                     #  for all slots since the merge
./relayscan core data-api-backfill --min-slot 6658658  #  since a given slot (good for dev/testing)

# Double-check new entries for valid payments (and other)
./relayscan core check-payload-value

# Update daily builder inclusion stats
./relayscan core update-builder-stats --start 2023-06-04 --end 2023-06-06  # update daily stats for 2023-06-04 and 2023-06-05
./relayscan core update-builder-stats --start 2023-06-04                   # update daily stats for 2023-06-04 until today
./relayscan core update-builder-stats --backfill                           # update daily stats since last entry, until today

# Start the website (--dev reloads the template on every page load, for easier iteration)
./relayscan service website --dev

# Start service to query every relay for bids
./relayscan service website --dev collect-live-bids

You might want to run Postgres locally for testing:

docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres postgres

Test & dev

# Install dependencies
go install mvdan.cc/gofumpt@latest
go install honnef.co/go/tools/cmd/[email protected]
go install github.com/golangci/golangci-lint/cmd/[email protected]

# Lint, test and build
make lint
make test
make test-race
make build