Base Benchmark is a performance testing framework for Ethereum execution clients. Compare client performance, identify bottlenecks, and ensure reliability before deployment.
Base Benchmark provides comprehensive testing capabilities:
- Performance Evaluation - Test both block building and validation performance across execution clients
- Comparative Analysis - Measure client behavior across various inputs and workloads
- Metric Collection - Track critical metrics including submission times, latency, and throughput
- Flexible Workloads - Configure transaction patterns to match your specific needs
- Visual Reports - Generate interactive HTML dashboards of benchmark results
# Build the application
make build
# Run the basic benchmark
./bin/base-bench run \
--config ./configs/basic.yml \
--root-dir ./data-dir \
--reth-bin path_to_reth_bin \
--geth-bin path_to_geth_bin \
--output-dir ./output
# View the interactive dashboard
cd report/
npm i
npm run dev
Each benchmark consists of configurable tests with various input parameters:
- name: Test Performance
description: Execution Speed
variables:
- type: transaction_workload
values:
- transfer-only
- type: node_type
values:
- reth
- geth
- type: num_blocks
value: 20
This configuration runs a transfer-only
transaction workload against both Geth and Reth clients for 20 blocks.
Each test executes a standardized workflow:
- Initialize a sequencer/block builder with specified gas limits
- Generate transactions and submit to the sequencer mempool
- Record all payloads via
engine_forkChoiceUpdated
andengine_getPayload
- Set up the validator node
- Process payloads through
engine_newPayload
This approach allows precise measurement of performance characteristics for both block production and validation.
make build
ls ./bin/base-bench
NAME:
base-bench run - run benchmark
USAGE:
base-bench run [command options]
OPTIONS:
--config value Config Path ($BASE_BENCH_CONFIG)
--root-dir value Root Directory ($BASE_BENCH_ROOT_DIR)
--output-dir value Output Directory ($BASE_BENCH_OUTPUT_DIR)
--tx-fuzz-bin value Transaction Fuzzer path (default: "../tx-fuzz/cmd/livefuzzer/livefuzzer")
# Reth Configuration
--reth-bin value Reth binary path (default: "reth")
--reth-http-port value HTTP port (default: 9545)
--reth-auth-rpc-port value Auth RPC port (default: 9551)
--reth-metrics-port value Metrics port (default: 9080)
# Geth Configuration
--geth-bin value Geth binary path (default: "geth")
--geth-http-port value HTTP port (default: 8545)
--geth-auth-rpc-port value Auth RPC port (default: 8551)
--geth-metrics-port value Metrics port (default: 8080)
# General Options
--proxy-port value Proxy port (default: 8546)
--help, -h Show help (default: false)
Performance comparison between Geth and Reth clients
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.