Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
3574eca
chore(bench): add cli flag to fetch bal by default (#23655)
Soubhik-10 Apr 20, 2026
408ef46
feat(engine): suppress persistence during payload building (#23618)
joshieDo Apr 20, 2026
e92af36
refactor: encapsulate state fetching in db provider (#23656)
klkvr Apr 20, 2026
d752290
feat(p2p): optionally fetch BAL with full blocks (#23629)
0xKarl98 Apr 21, 2026
981e32d
chore(BAL): enabled bal building in ethereum payload (#23597)
Rimeeeeee Apr 21, 2026
165a804
feat(bal): scaffold BAL store abstraction (#23596)
0xKarl98 Apr 21, 2026
3edb271
refactor(trie): remove TrieNodeProvider (#23658)
mediocregopher Apr 21, 2026
252fe42
refactor(consensus): unify opaque error helpers (#23669)
mattsse Apr 21, 2026
b964195
fix(engine): let consensus impls control which errors are transient (…
joshieDo Apr 21, 2026
0195da5
chore(BAL): added parallelization and batch io flags (#23663)
Rimeeeeee Apr 21, 2026
b1ac264
fix(ci): use second most recent snapshot as previous (#23671)
Rjected Apr 21, 2026
f39c47b
feat(net): add snap/2 wire helpers and messages (#23611)
mattsse Apr 22, 2026
42f4913
test: remove unsafe env::set_var(RUST_LOG) from tests (#23672)
AJStonewee Apr 22, 2026
d554584
chore(deps): bump alloy crates to 2.0.1 (#23677)
mattsse Apr 22, 2026
6364fb8
deps: bump rustls-webpki (#23681)
shekhirin Apr 22, 2026
f1ed5f0
fix(re-execute): disable read tx timeout (#23680)
shekhirin Apr 22, 2026
122c5b3
fix(bench): require local benchmark data (#23679)
mediocregopher Apr 22, 2026
fe7a4c8
feat(db): detect and warn about ZFS (#23685)
emmajam Apr 22, 2026
2b7d4b5
feat(p2p): Discv5 is enabled by default (#23686)
emmajam Apr 22, 2026
e89b461
fix(engine): configure invalid header cache hit eviction (#23670)
mattsse Apr 22, 2026
7839f3d
perf: avoid reopening .csoff on every changeset lookup (#23687)
klkvr Apr 22, 2026
bbcfe35
fix(rpc): clean up eth state cache reorg entries (#23683)
mattsse Apr 23, 2026
a579304
chore: add DecodedBal in ExecutionEnv (#23675)
Soubhik-10 Apr 23, 2026
63f8090
fix(cli): use TxTy and ReceiptTy for static-file db get (#23692)
Veronic85 Apr 23, 2026
ad27be6
fix(net): track unknown tx types in announcement metrics (#23688)
wataxiwajojo Apr 23, 2026
b62f719
fix(era): align ERA1 export with spec (#23693)
figtracer Apr 23, 2026
73f5d77
chore(deps): bump actions/setup-python from 5 to 6 (#23689)
dependabot[bot] Apr 23, 2026
62d9988
fix(db): move unix deps section after strum in Cargo.toml (#23697)
emmajam Apr 23, 2026
378d405
chore(rpc): pass block timestamp to txn (#23700)
Rimeeeeee Apr 23, 2026
6377a95
refactor(provider): use overlay builders in historical state paths (#…
mediocregopher Apr 23, 2026
fa6b44b
perf(re-execute): configurable rocksdb block cache size and re-use of…
klkvr Apr 23, 2026
13c5504
fix(cli): use node types in execution stage dump (#23705)
Veronic85 Apr 24, 2026
4f9af7c
fix(cli): preserve `trusted_nodes_only` from config when `--trusted-o…
wataxiwajojo Apr 24, 2026
ba3cd28
fix(net): retain active session buffer capacity (#23702)
mattsse Apr 24, 2026
cf6ffb1
feat(net): add BAL requirement to block access list requests (#23682)
0xKarl98 Apr 24, 2026
5c38381
chore: reth core bumped to v0.3.1 (#23707)
Rimeeeeee Apr 24, 2026
40c30db
chore(db): derive Eq for IntegerList (#23709)
mattsse Apr 24, 2026
d29db3b
feat(bench): add reorg mode to new-payload-fcu (#23666)
mediocregopher Apr 24, 2026
6be5520
fix(net): respect peer requirements for fetch followups (#23706)
mattsse Apr 24, 2026
05e6da6
chore(engine): log transient invalid header cache skips (#23711)
mattsse Apr 24, 2026
e4f14b2
chore: added empty request check to storage values (#23714)
Rimeeeeee Apr 24, 2026
79578e3
feat: avoid RLP-decoding `NewBlock` payloads (#23712)
klkvr Apr 24, 2026
41c6872
fix(discv5): use Weak reference in kbuckets bg task to release port o…
romanbrodetski-ai Apr 24, 2026
b271694
perf(revm): enable `p256-aws-lc-rs` feature (#23721)
shekhirin Apr 24, 2026
ecfb6cc
fix(ci): clean bench checkouts and lock cargo builds (#23708)
mediocregopher Apr 25, 2026
68845d1
fix(rpc): include block numbers in `BlockRangeExceedsHead` error (#23…
wataxiwajojo Apr 25, 2026
f344f5a
bench: enable `keccak-cache-global` feature in `reth-bb` binary (#23723)
shekhirin Apr 25, 2026
eeb223f
feat(net): add Basic in-memory BAL store (#23710)
0xKarl98 Apr 25, 2026
6886cd7
feat(re-execute): verify reverts against changesets (#23717)
klkvr Apr 25, 2026
6fa48a4
feat(net): enforce BAL response soft limit (#23725)
0xKarl98 Apr 26, 2026
bd4cd28
fix(cli): avoid u64 underflow in setup_without_evm for genesis-block …
CPerezz Apr 26, 2026
2c86c0b
feat(network): add BAL request e2e coverage (#23727)
0xKarl98 Apr 26, 2026
db17c89
fix(storage): `reth db migrate-v2` for pruned nodes (#23716)
shekhirin Apr 27, 2026
345fbbb
perf(trie): skip DB seek on exact overlay hits (#23559)
mediocregopher Apr 27, 2026
225e3ae
fix(trie): account for heap-allocated blinded hashes in `SparseNode::…
wataxiwajojo Apr 27, 2026
e5e0abb
perf(docker): add platform-specific RUSTFLAGS to Dockerfile (#23738)
shekhirin Apr 27, 2026
d4ca2e2
ci: add Amsterdam Hive variant (#23736)
shekhirin Apr 27, 2026
aca6261
refactor(evm): return gas output from block builder (#23744)
mattsse Apr 27, 2026
344037d
perf(db): Pass ExecutedBlocks to OverlayBuilder, reduce reverts queri…
mediocregopher Apr 27, 2026
91d248e
feat: bound memory footpring of p2p messages (#23718)
klkvr Apr 27, 2026
5b10e03
perf(engine): spawn BAL hashed state before storage prefetch (#23761)
mattsse Apr 28, 2026
64cf412
chore(engine): disable BAL parallel execution by default (#23764)
pepyakin Apr 28, 2026
af6d20b
ci(hive): tag Reth image correctly and update fixtures (#23765)
shekhirin Apr 28, 2026
97b1b56
fix(bench): dedupe merged BAL storage reads (#23758)
pepyakin Apr 28, 2026
674623f
ci(hive): ignore more EIP-7610 tests (#23769)
shekhirin Apr 28, 2026
b04346f
feat(engine): disable BAL storage prefetch on CLI arg (#23770)
shekhirin Apr 28, 2026
79144cb
fix(bench): reth-bb multiple executors (#23763)
pepyakin Apr 28, 2026
b850f2a
fix(net): apply count cap to BlockAccessLists request handler (#23754)
RandoomWalks Apr 28, 2026
4c1f6b6
fix(payload): track Amsterdam block gas in builders (#23743)
mattsse Apr 28, 2026
a8fc13d
deps: bump alloy-evm to 0.33.3 (#23778)
shekhirin Apr 28, 2026
671da55
refactor: expose executor transaction result type (#23759)
pepyakin Apr 28, 2026
a8eee60
fix(bench): run feature first in GitHub workflow (#23777)
mediocregopher Apr 28, 2026
473f85c
test(rpc): cover admin node info discv5 port (#23781)
mattsse Apr 28, 2026
87d878a
feat: support binding discv5 and discv4 to the same port (#23613)
klkvr Apr 28, 2026
b892885
ci: harden supply chain across all workflows (#23785)
grandizzy Apr 28, 2026
ad08829
feat: introduce memory-bound channel for network<->tx manager message…
klkvr Apr 28, 2026
76e8865
ci(hive): update amsterdam fixtures and branch (#23807)
shekhirin Apr 29, 2026
73ec2c9
docs(engine): clarify BAL storage prefetch flag (#23815)
mattsse Apr 29, 2026
43a7452
fix(rpc): narrow getLogs retry range (#23818)
figtracer Apr 29, 2026
c194c17
chore(deps): bump alloy to 2.0.4 (#23828)
mattsse Apr 29, 2026
a12454d
perf(db): prebind cursor operation metrics (#23654)
mediocregopher Apr 29, 2026
5f85eb7
feat(engine): add getBlobsV4 endpoint (#23767)
mattsse Apr 29, 2026
347c132
fix: skip `move_to_static_files` for `storage.v2` (#23814)
decofe Apr 29, 2026
c14bc59
chore: release 2.2.0 (#23831)
emmajam Apr 29, 2026
88505c7
fix(re-execute): properly handle selfdestructed storage slots (#23832)
klkvr Apr 29, 2026
708b99f
Merge tag 'v2.2.0' into develop-v2.2
chee-chyuan May 7, 2026
a07e3b6
fix: update reth-core lock to v0.3.1-v2 commit; fix fmt
chee-chyuan May 7, 2026
767f64e
fix: correct historical state provider signatures and network receive…
chee-chyuan May 7, 2026
64d8cbf
fix(clippy): remove unused HashMap/hash_map imports from consistent.rs
chee-chyuan May 7, 2026
d6d10c6
fix(merge): fix compilation errors from v2.2.0 merge
chee-chyuan May 7, 2026
048b728
chore(docs): regenerate CLI reference docs
chee-chyuan May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@ updates:
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
labels:
- "A-dependencies"
commit-message:
Expand Down
116 changes: 24 additions & 92 deletions .github/scripts/bench-reth-build.sh
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
#!/usr/bin/env bash
#
# Builds (or fetches from cache) reth binaries for benchmarking.
# Builds reth binaries for benchmarking from local source only.
#
# Usage: bench-reth-build.sh <baseline|feature> <source-dir> <commit> [branch-sha]
# Usage: bench-reth-build.sh <baseline|feature> <source-dir> <commit>
#
# baseline — build/fetch the baseline binary at <commit> (merge-base)
# baseline — build the baseline binary at <commit> (merge-base)
# source-dir must be checked out at <commit>
# feature — build/fetch the candidate binary + reth-bench at <commit>
# feature — build the candidate binary + reth-bench at <commit>
# source-dir must be checked out at <commit>
# optional branch-sha is the PR head commit for cache key
#
# Outputs:
# baseline: <source-dir>/target/profiling/reth (or reth-bb if BENCH_BIG_BLOCKS=true)
# feature: <source-dir>/target/profiling/reth (or reth-bb), reth-bench installed to cargo bin
#
# Required: mc (MinIO client) with a configured alias
# Optional env: BENCH_BIG_BLOCKS (true/false) — build reth-bb instead of reth
set -euxo pipefail

MC="mc"
MODE="$1"
SOURCE_DIR="$2"
COMMIT="$3"
Expand All @@ -42,103 +39,38 @@ if [ "${BENCH_TRACY:-off}" != "off" ]; then
EXTRA_RUSTFLAGS=" -C force-frame-pointers=yes"
fi

# Cache suffix: hash of features+rustflags so different build configs get separate cache entries
if [ -n "$EXTRA_FEATURES" ] || [ -n "$EXTRA_RUSTFLAGS" ]; then
BUILD_SUFFIX="-$(echo "${EXTRA_FEATURES}${EXTRA_RUSTFLAGS}" | sha256sum | cut -c1-12)"
else
BUILD_SUFFIX=""
fi
# Build the requested node binary with the benchmark profile.
build_node_binary() {
local features_arg=""
local workspace_arg=""

# Verify a cached reth binary was built from the expected commit.
# `reth --version` outputs "Commit SHA: <full-sha>" on its own line.
verify_binary() {
local binary="$1" expected_commit="$2"
local version binary_sha
version=$("$binary" --version 2>/dev/null) || return 1
binary_sha=$(echo "$version" | sed -n 's/^Commit SHA: *//p')
if [ -z "$binary_sha" ]; then
echo "Warning: could not extract commit SHA from version output"
return 1
fi
if [ "$binary_sha" = "$expected_commit" ]; then
return 0
cd "$SOURCE_DIR"
if [ -n "$EXTRA_FEATURES" ]; then
# --workspace is needed for cross-package feature syntax (tracy-client/ondemand)
features_arg="--features ${EXTRA_FEATURES}"
workspace_arg="--workspace"
fi
echo "Cache mismatch: binary built from ${binary_sha} but expected ${expected_commit}"
return 1

# shellcheck disable=SC2086
RUSTFLAGS="-C target-cpu=native${EXTRA_RUSTFLAGS}" \
cargo build --locked --profile profiling $NODE_PKG $workspace_arg $features_arg
}

case "$MODE" in
baseline|main)
BUCKET="minio/reth-binaries/${COMMIT}${BUILD_SUFFIX}"
mkdir -p "${SOURCE_DIR}/target/profiling"

CACHE_VALID=false
if $MC stat --no-list "${BUCKET}/${NODE_BIN}" &>/dev/null; then
echo "Cache hit for baseline (${COMMIT}), downloading ${NODE_BIN}..."
if $MC cp "${BUCKET}/${NODE_BIN}" "${SOURCE_DIR}/target/profiling/${NODE_BIN}" && \
chmod +x "${SOURCE_DIR}/target/profiling/${NODE_BIN}" && \
verify_binary "${SOURCE_DIR}/target/profiling/${NODE_BIN}" "${COMMIT}"; then
CACHE_VALID=true
else
echo "Cached baseline binary is stale or download failed, rebuilding..."
fi
fi
if [ "$CACHE_VALID" = false ]; then
echo "Building baseline ${NODE_BIN} (${COMMIT}) from source..."
cd "${SOURCE_DIR}"
FEATURES_ARG=""
WORKSPACE_ARG=""
if [ -n "$EXTRA_FEATURES" ]; then
# --workspace is needed for cross-package feature syntax (tracy-client/ondemand)
FEATURES_ARG="--features ${EXTRA_FEATURES}"
WORKSPACE_ARG="--workspace"
fi
# shellcheck disable=SC2086
RUSTFLAGS="-C target-cpu=native${EXTRA_RUSTFLAGS}" \
cargo build --profile profiling $NODE_PKG $WORKSPACE_ARG $FEATURES_ARG
$MC cp "target/profiling/${NODE_BIN}" "${BUCKET}/${NODE_BIN}"
fi
echo "Building baseline ${NODE_BIN} (${COMMIT}) from source..."
build_node_binary
;;

feature|branch)
BRANCH_SHA="${4:-$COMMIT}"
BUCKET="minio/reth-binaries/${BRANCH_SHA}${BUILD_SUFFIX}"

CACHE_VALID=false
if $MC stat --no-list "${BUCKET}/${NODE_BIN}" &>/dev/null && $MC stat --no-list "${BUCKET}/reth-bench" &>/dev/null; then
echo "Cache hit for ${BRANCH_SHA}, downloading binaries..."
mkdir -p "${SOURCE_DIR}/target/profiling"
if $MC cp "${BUCKET}/${NODE_BIN}" "${SOURCE_DIR}/target/profiling/${NODE_BIN}" && \
$MC cp "${BUCKET}/reth-bench" /home/ubuntu/.cargo/bin/reth-bench && \
chmod +x "${SOURCE_DIR}/target/profiling/${NODE_BIN}" /home/ubuntu/.cargo/bin/reth-bench && \
verify_binary "${SOURCE_DIR}/target/profiling/${NODE_BIN}" "${COMMIT}"; then
CACHE_VALID=true
else
echo "Cached feature binary is stale or download failed, rebuilding..."
fi
fi
if [ "$CACHE_VALID" = false ]; then
echo "Building feature ${NODE_BIN} (${COMMIT}) from source..."
cd "${SOURCE_DIR}"
rustup show active-toolchain || rustup default stable
if [ -n "$EXTRA_FEATURES" ]; then
# Can't use `make profiling` when adding features; build explicitly
# --workspace is needed for cross-package feature syntax (tracy-client/ondemand)
RUSTFLAGS="-C target-cpu=native${EXTRA_RUSTFLAGS}" \
cargo build --profile profiling --workspace $NODE_PKG --features "${EXTRA_FEATURES}"
else
# shellcheck disable=SC2086
RUSTFLAGS="-C target-cpu=native${EXTRA_RUSTFLAGS}" \
cargo build --profile profiling $NODE_PKG
fi
make install-reth-bench
$MC cp "target/profiling/${NODE_BIN}" "${BUCKET}/${NODE_BIN}"
$MC cp "$(which reth-bench)" "${BUCKET}/reth-bench"
fi
echo "Building feature ${NODE_BIN} (${COMMIT}) from source..."
rustup show active-toolchain || rustup default stable
build_node_binary
make -C "$SOURCE_DIR" install-reth-bench
;;

*)
echo "Usage: $0 <baseline|feature> <source-dir> <commit> [branch-sha]"
echo "Usage: $0 <baseline|feature> <source-dir> <commit>"
exit 1
;;
esac
37 changes: 13 additions & 24 deletions .github/scripts/bench-reth-local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# local-reth-bench.sh — Run the reth Engine API benchmark locally.
#
# Replicates the CI bench.yml workflow (build, snapshot, system tuning,
# Replicates the CI bench.yml workflow (build, local snapshot validation, system tuning,
# interleaved B-F-F-B execution, summary, charts) without any GitHub
# Actions glue (no PR comments, no artifact upload, no Slack).
#
Expand All @@ -21,15 +21,17 @@
# Requires: the reth repo at RETH_REPO (default: ~/reth)
#
# Dependencies (install before first run):
# mc (MinIO client), schelk, cpupower, taskset, stdbuf, python3, curl,
# make, uv, pzstd, jq, Rust toolchain (cargo/rustup)
# schelk, cpupower, taskset, stdbuf, python3, curl,
# make, uv, jq, Rust toolchain (cargo/rustup)
# Optional:
# mc for Tracy profile upload
#
# The script delegates to the existing bench-reth-*.sh scripts in the reth
# repo for the actual build, snapshot, and run steps.
set -euxo pipefail

# ── PATH ──────────────────────────────────────────────────────────────
# Ensure cargo and user-local bins (mc, uv) are visible
# Ensure cargo and user-local bins (uv) are visible
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"

# ── Defaults ──────────────────────────────────────────────────────────
Expand Down Expand Up @@ -106,7 +108,7 @@ fi

# ── Check dependencies ───────────────────────────────────────────────
missing=()
for cmd in mc schelk cpupower taskset stdbuf python3 curl make uv pzstd jq cargo; do
for cmd in schelk cpupower taskset stdbuf python3 curl make uv jq cargo; do
command -v "$cmd" &>/dev/null || missing+=("$cmd")
done
if [ ${#missing[@]} -gt 0 ]; then
Expand Down Expand Up @@ -238,19 +240,14 @@ echo " Baseline src : $BASELINE_SRC"
echo " Feature src : $FEATURE_SRC"
echo

# ── Step 3: Check / download snapshot ────────────────────────────────
echo "▸ Checking snapshot..."
# ── Step 3: Validate local snapshot ──────────────────────────────────
echo "▸ Validating local snapshot..."
cd "$RETH_REPO"
SNAPSHOT_NEEDED=false
if ! "${SCRIPTS_DIR}/bench-reth-snapshot.sh" --check; then
SNAPSHOT_NEEDED=true
echo " Snapshot needs update."
else
echo " Snapshot is up-to-date."
fi
"${SCRIPTS_DIR}/bench-reth-snapshot.sh"
echo " Snapshot is ready."
echo

# ── Step 4: Build binaries (+ snapshot download) in parallel ─────────
# ── Step 4: Build binaries in parallel ───────────────────────────────
echo "▸ Building binaries (parallel)..."
cd "$RETH_REPO"

Expand All @@ -262,19 +259,11 @@ PID_BASELINE=$!
"${SCRIPTS_DIR}/bench-reth-build.sh" feature "$FEATURE_SRC" "$FEATURE_SHA" &
PID_FEATURE=$!

PID_SNAPSHOT=
if [ "$SNAPSHOT_NEEDED" = "true" ]; then
echo " Also downloading snapshot in parallel..."
"${SCRIPTS_DIR}/bench-reth-snapshot.sh" &
PID_SNAPSHOT=$!
fi

wait $PID_BASELINE || FAIL=1
wait $PID_FEATURE || FAIL=1
[ -n "$PID_SNAPSHOT" ] && { wait $PID_SNAPSHOT || FAIL=1; }

if [ $FAIL -ne 0 ]; then
echo "Error: one or more parallel tasks failed (builds / snapshot)"
echo "Error: one or more build tasks failed"
exit 1
fi
echo " Binaries built successfully."
Expand Down
29 changes: 20 additions & 9 deletions .github/scripts/bench-reth-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,16 @@ trap cleanup EXIT
# Stop any leftover reth process in the scope, then recover schelk state.
sudo systemctl stop "$RETH_SCOPE" 2>/dev/null || true
sudo systemctl reset-failed "$RETH_SCOPE" 2>/dev/null || true
sudo schelk recover -y --kill || true
sudo schelk recover -y --kill || sudo schelk full-recover -y || true

# Mount
sudo schelk mount -y
sudo schelk mount -y || true
if [ ! -d "$DATADIR/db" ] || [ ! -d "$DATADIR/static_files" ]; then
echo "::error::Failed to mount benchmark datadir at ${DATADIR}"
ls -la "$SCHELK_MOUNT" || true
ls -la "$DATADIR" || true
exit 1
fi
sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
echo "=== Cache state after drop ==="
Expand Down Expand Up @@ -317,13 +323,18 @@ if [ "$BIG_BLOCKS" = "true" ]; then
--output "$OUTPUT_DIR" 2>&1 | sed -u "s/^/[bench] /"
else
# Standard mode: warmup + new-payload-fcu
# Warmup
$BENCH_NICE "$RETH_BENCH" new-payload-fcu \
--rpc-url "$BENCH_RPC_URL" \
--engine-rpc-url http://127.0.0.1:8551 \
--jwt-secret "$DATADIR/jwt.hex" \
--advance "${BENCH_WARMUP_BLOCKS:-50}" \
"${EXTRA_BENCH_ARGS[@]}" 2>&1 | sed -u "s/^/[bench] /"
WARMUP="${BENCH_WARMUP_BLOCKS:-50}"
if [ "$WARMUP" -gt 0 ] 2>/dev/null; then
# Warm up the node before measuring the benchmark window.
$BENCH_NICE "$RETH_BENCH" new-payload-fcu \
--rpc-url "$BENCH_RPC_URL" \
--engine-rpc-url http://127.0.0.1:8551 \
--jwt-secret "$DATADIR/jwt.hex" \
--advance "$WARMUP" \
"${EXTRA_BENCH_ARGS[@]}" 2>&1 | sed -u "s/^/[bench] /"
else
echo "Skipping warmup (0 blocks)..."
fi

# Start tracy-capture after warmup so profile only covers the benchmark
if [ "${BENCH_TRACY:-off}" != "off" ]; then
Expand Down
Loading
Loading