bin/reth-bb/README.md
A modified reth node for benchmarking big block execution — payloads that merge transactions from multiple consecutive blocks into a single block to simulate high-gas workloads.
Not for production use. reth-bb disables some consensus-related validations to allow artificially large blocks. It is intended solely for performance benchmarking.
reth-bb extends the standard Ethereum node with:
Multi-segment execution — a custom reth_newPayload handler that accepts optional BigBlockData alongside the payload. When present, the block is executed in multiple segments, each with its own EVM environment (matching the original blocks that were merged).
Relaxed consensus — the gas-limit bound-divisor check and blob gas validation are skipped, since merged blocks exceed single-block limits.
The full workflow has five steps: build reth-bb, install txgen tools, extract big-block payloads, start reth-bb, and replay the payloads.
debug_getRawBlockcargo build --profile profiling -p reth-bb
Install txgen-ethereum for big-block extraction and bench for Engine API replay from tempoxyz/txgen:
cargo install --git https://github.com/tempoxyz/txgen txgen-ethereum --locked
cargo install --git https://github.com/tempoxyz/txgen bench-cli --locked
Merge source blocks into synthetic big-block payloads, starting at the block following the one the node is currently synced to (i.e. the next block the node would process):
txgen-ethereum extract-big-blocks \
--rpc https://rpc.hoodi.ethpandaops.io \
--from 910020 \
--count 5 \
--target-gas 2G \
--output /tmp/big-blocks.ndjson
This produces an NDJSON file containing one reth-bb-compatible big-block payload per line. --target-gas accepts bare units or K, M, G suffixes.
reth-bb node \
--datadir /data/reth/hoodi \
--chain hoodi \
--http --http.api debug,eth \
--authrpc.jwtsecret /tmp/jwt.hex \
-d
bench send-blocks \
--engine http://localhost:8551 \
--jwt-secret /tmp/jwt.hex \
--input /tmp/big-blocks.ndjson \
--wait-for-persistence every:2 \
--report json:/tmp/reth-bb-report.json
bench send-blocks submits each payload through reth's custom reth_newPayload and reth_forkchoiceUpdated Engine API methods.