relayscan

command module
v1.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2025 License: AGPL-3.0 Imports: 2 Imported by: 0

README

relayscan

Goreport status Test status Docker hub

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

Running on https://relayscan.io

Additional URLs:

Bid Archive

https://bidarchive.relayscan.io

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

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

More example commands:

# 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 9590900  #  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

#
# backfill-runner: Backfill + Check Service
# - a single service to continuously run these
# - default interval: 5 minutes
#
# Test with just one relay (flashbots)
./relayscan service backfill-runner --relay fb

# Test with ultrasound relay and limited slots (last 50 slots)
./relayscan service backfill-runner --relay us --min-slot -50

# Combine flags for quick testing
./relayscan service backfill-runner --relay fb --min-slot -50 --skip-check-value

# Custom interval
./relayscan service backfill-runner --interval 10m

# Run once and exit (useful for testing)
./relayscan service backfill-runner --once

# Skip one of the steps
./relayscan service backfill-runner --skip-backfill
./relayscan service backfill-runner --skip-check-value
Test & development

Start by filling the DB with relay data (delivered payloads), and checking it:

# Copy .env.example to .env.local, update ETH_NODE_URI and source it
source .env.local

# Start Postgres Docker container
make dev-postgres-start

# Query only a single relay, and for the shortest time possible
go run . core data-api-backfill --relay us --min-slot -2000

# Now the DB has data, check it (and update in DB)
go run . core check-payload-value

# Can also check a single slot only:
go run . core check-payload-value --slot <your_slot>

# Run the website
go run . service website --dev

# Simplify working with read-only DB or large amount of data:
 DB_DONT_APPLY_SCHEMA=1 SKIP_7D_STATS=1 go run . service website --dev

# Now you can open http://localhost:9060 in your browser and see the data
open http://localhost:9060

# You can also reset the database:
make dev-postgres-wipe

# See the Makefile for more commands
make help

For linting and testing:

# Install dependencies
go install mvdan.cc/gofumpt@latest
go install honnef.co/go/tools/cmd/staticcheck@v0.4.3
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2

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

# Format the code
make fmt
Updating relayscan

Notes for updating relayscan:

  • Relay payloads are selected by inserted_at. When adding a new relay, you probably want to manually subtract a day from inserted_at so they don't show up all for today (UPDATE mainnet_data_api_payload_delivered SET inserted_at = inserted_at - INTERVAL '1 DAY' WHERE relay='newrelay.xyz';). See also https://github.com/flashbots/relayscan/issues/28

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
Package cmd contains the cobra command line setup
Package cmd contains the cobra command line setup
core
Package core contains code for the core subcommands
Package core contains code for the core subcommands
service
Package service contains code for the service subcommands
Package service contains code for the service subcommands
util
Package util contains code for the util subcommands
Package util contains code for the util subcommands
Package common includes common utilities
Package common includes common utilities
Package database exposes the postgres database
Package database exposes the postgres database
migrations
Package migrations contains all the migration files
Package migrations contains all the migration files
vars
Package vars contains the database variables such as dynamic table names
Package vars contains the database variables such as dynamic table names
services
bidcollect
Package bidcollect contains code for bid collection from various sources.
Package bidcollect contains code for bid collection from various sources.
bidcollect/types
Package types contains various types, consts and vars for bidcollect
Package types contains various types, consts and vars for bidcollect
bidcollect/webserver
Package webserver provides a SSE stream of new bids (via Redis subscription)
Package webserver provides a SSE stream of new bids (via Redis subscription)
bidcollect/website
Package website contains the service delivering the website
Package website contains the service delivering the website
website
Package website contains the service delivering the website
Package website contains the service delivering the website
Package vars contains global variables and configuration
Package vars contains global variables and configuration

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL