Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
326 commits
Select commit Hold shift + click to select a range
098ca32
fix(tracing): preserve context across engine and worker tasks (#27529)
pepyakin Sep 29, 2026
43a93db
chore(deps): let Dependabot update indirect Cargo dependencies (#27585)
decofe Sep 29, 2026
560dac1
docs: fix redundant module links (#27590)
mattsse Sep 30, 2026
058a343
feat(stages): add `Pipeline::run_until` (#27537)
lean-apple Sep 30, 2026
9ec2f7c
fix(txpool): cap intrinsic regular gas under EIP-8037 (#27587)
Sahil-4555 Sep 30, 2026
13a59de
perf(rpc): stop long blocking jobs once their request is dropped (#27…
mattsse Sep 30, 2026
1e17aff
fix(storage): prune transaction row zero during recovery (#27229)
decofe Sep 30, 2026
e29c343
feat(e2e): control the next payload timestamp (#27596)
mattsse Sep 30, 2026
cdc4e09
feat(e2e): wait for the pool to process a new head (#27597)
mattsse Sep 30, 2026
f269bcc
test(e2e): wait for pruner in RocksDB pruning tests (#27601)
mattsse Sep 30, 2026
569c770
feat(e2e): add import_payload helper (#27599)
mattsse Sep 30, 2026
94e015b
fix(stages): rebuild pruned history from empty (#27602)
joshieDo Sep 30, 2026
3566eb8
fix(prune): treat Before(0) as nothing to prune (#27603)
joshieDo Sep 30, 2026
1f9d46d
refactor: move precompile cache to execution-cache (#27604)
mattsse Sep 30, 2026
f7efe30
feat(e2e): add advance-until helpers (#27598)
mattsse Sep 30, 2026
42a3122
feat(ef-tests): run and validate Amsterdam block access list fixtures…
Sahil-4555 Sep 30, 2026
b68f6fa
fix(tree): make sparse trie reuse fork-safe (#27270)
mediocregopher Sep 30, 2026
5b68630
fix(rpc): keep omitted-gas calls within the RPC gas cap (#27586)
banteg Sep 30, 2026
fa9e76a
fix(engine): unwind canonical chain to genesis without parent state (…
debjit-bw Oct 1, 2026
a369af1
test(rpc): build TraceFilter with Default in rpc-builder test (#27624)
mattsse Oct 1, 2026
8868180
feat(snap-sync): recover from reorgs crossing the pivot (#27482)
lean-apple Oct 1, 2026
b63b12b
test(snap-sync): add cancelled repair resume test (#27618)
lean-apple Oct 1, 2026
71b9b38
perf(ci): pin vergen output so sccache reuses reth-node-core dependen…
joshieDo Oct 1, 2026
f57d1b0
refactor(trie): append sparse trie updates (#27388)
mediocregopher Oct 1, 2026
9687e6e
fix(rpc): cap eth_call execution gas under Amsterdam (#27633)
Sahil-4555 Oct 1, 2026
1d18830
chore(ci): remove e2e-rocksdb and edge leftovers (#27636)
joshieDo Oct 1, 2026
078d026
fix(storage): use trie changesets for all overlays (#27634)
decofe Oct 1, 2026
4262367
fix: clippy warnings (#27646)
lean-apple Oct 2, 2026
a2f48cb
fix(trie): revert append sparse trie updates (#27654)
decofe Oct 2, 2026
979e0a2
perf(trie): seek sparse trie cursor on packed keys (#27155)
mattsse Oct 2, 2026
038edab
chore(ci): use vendored dtolnay/rust-toolchain (#27647)
mattsse Oct 2, 2026
7d36b56
perf(trie): compact arena node layout (#27157)
mattsse Oct 2, 2026
ecfe4b2
feat(e2e): add a transaction builder to TestAccount (#27656)
mattsse Oct 2, 2026
72f84e0
feat(e2e): add persistence and prune checkpoint waits (#27657)
mattsse Oct 2, 2026
189482d
test(e2e): drop redundant pending tx waits in RocksDB tests (#27658)
mattsse Oct 2, 2026
aadc57c
fix(ci): filter nightly docker runs client-side (#27625)
decofe Oct 2, 2026
63af26d
fix(rpc): use spec-default tx gas cap in simulate (#27659)
mattsse Oct 2, 2026
b326171
fix(engine): use spec-default tx gas cap in BAL executor (#27644)
Sahil-4555 Oct 2, 2026
580e895
perf(engine): size proof worker pools by block gas (#27196)
mattsse Oct 2, 2026
bd3238a
fix(tasks): treat a zero worker count as unset (#27660)
mattsse Oct 2, 2026
ce5c26d
chore(deps): bump revm-inspectors to 0.44.1 (#27668)
banteg Oct 3, 2026
b1e9f3f
feat(cli): add --prune-unlisted to reth download (#27669)
wbj-cb Oct 3, 2026
5b01d18
perf(download): verify reusable outputs once and in parallel (#27665)
wbj-cb Oct 3, 2026
ab12ea9
perf(trie): share proof worker metrics handles (#27661)
mattsse Oct 3, 2026
66615da
fix(trie): build reth-trie-parallel without metrics (#27662)
mattsse Oct 3, 2026
b06756c
perf(trie): cache proof worker metrics per process (#27674)
mattsse Oct 3, 2026
4440e20
fix(discv4): retry ENR requests (#27630)
kriss39 Oct 3, 2026
4f1ecee
fix(stages): heal bodies to the highest stored block (#27676)
lean-apple Oct 3, 2026
26b7cf8
fix(prune): reject unwinds below pruned history (#27677)
lean-apple Oct 3, 2026
0f3d32b
feat(storage): anchor pruned static files at a block (#27538)
lean-apple Oct 3, 2026
ab7f0ba
feat(snap): publish snap state as the pipeline start (#27539)
lean-apple Oct 3, 2026
7a5c817
test: harden Osaka blob conversion e2e (#27687)
mattsse Oct 3, 2026
7b58905
fix(ef-tests): use BPO2 blob params for Amsterdam (#27692)
Sahil-4555 Oct 3, 2026
c3ea35e
feat(engine): forward forkchoice heads to active backfill (#27541)
lean-apple Oct 3, 2026
2e5ccc8
fix(snap): clear database receipts on publish (#27698)
lean-apple Oct 3, 2026
67f3569
fix(ef-tests): check the BAL size cap (#27699)
Sahil-4555 Oct 3, 2026
10d1301
fix(txpool): use tip gas limit at startup (#27682)
Sahil-4555 Oct 3, 2026
10bcf46
fix(stages): heal interrupted empty block (#27680)
lean-apple Oct 3, 2026
2af6c2b
fix(ci): update benchmark run fixture (#27705)
mattsse Oct 3, 2026
3872d68
feat(node): make the engine backfill pluggable (#27542)
lean-apple Oct 3, 2026
f10487d
fix(consensus): reject pre-Shanghai body withdrawals (#27715)
mattsse Oct 4, 2026
d46664f
fix(rpc): use resolved block state in simulate_v1 (#27714)
Qumeric Oct 4, 2026
e47a8c8
feat(e2e): expand the e2e test harness (#27713)
mattsse Oct 4, 2026
2c108d3
fix(txpool): apply min priority fee to legacy txs (#27720)
mattsse Oct 4, 2026
0d1324f
fix(nippy-jar): handle uncommitted rows in prune_rows (#27719)
mattsse Oct 4, 2026
22e3708
fix(nippy-jar): end last value at its offset (#27678)
avalkov Oct 4, 2026
42fa3c5
fix(net): never send empty incomplete eth/70 receipts (#27717)
mattsse Oct 4, 2026
3903ab3
refactor: normalize byte and integer literals (#27729)
decofe Oct 5, 2026
856407e
chore(deps): update Cargo.lock (#27741)
decofe Oct 5, 2026
14cde6e
feat(storage): refuse databases the selected sync cannot use (#27704)
lean-apple Oct 5, 2026
d927e9f
feat(node): hand snap state over to the pipeline (#27706)
lean-apple Oct 5, 2026
e953d36
refactor: use zero and enum comparison predicates (#27742)
decofe Oct 5, 2026
3fa3fb3
refactor: use BlockId helpers (#27744)
joshieDo Oct 5, 2026
fc6f2e5
fix(net): deprioritize unavailable snap peers (#27730)
mark0-cn Oct 5, 2026
f419007
fix(discv4): match neighbours replies by source ip (#27722)
mattsse Oct 5, 2026
439eddf
refactor(stages): use ExecOutput::done (#27746)
joshieDo Oct 6, 2026
4486cc0
refactor(net): use Capability and Protocol constructors (#27747)
joshieDo Oct 6, 2026
f46aede
refactor: use alloy-primitives conversions and literals (#27748)
joshieDo Oct 6, 2026
d8bf00f
refactor: use revm and alloy aliases and helpers (#27749)
joshieDo Oct 6, 2026
7e2781d
refactor: use named Chain constructors, chain_id and Option predicate…
joshieDo Oct 6, 2026
a0befd5
fix: update book action dependency (#27752)
decofe Oct 6, 2026
c1af61e
feat(node): add the snap backfill (#27708)
lean-apple Oct 6, 2026
8cd725d
fix(cli): skip unused download chain checks (#27756)
decofe Oct 6, 2026
1e8eb0c
feat(e2e): add NodeTestContext::mine_signed (#27760)
mattsse Oct 7, 2026
e845033
feat(cli): allow CPU core count overrides (#27765)
decofe Oct 7, 2026
c9b704e
docs(trie): explain state root send failures (#27768)
mediocregopher Oct 7, 2026
9fb9794
refactor(trie): rename borrowing conversions (#27769)
mediocregopher Oct 7, 2026
2800d9e
refactor(trie): name proof result context (#27770)
mediocregopher Oct 7, 2026
4bfa1fd
fix(trie): identify hashed cursor trace spans (#27772)
mediocregopher Oct 7, 2026
37623c5
docs(trie): remove nonexistent rayon feature (#27773)
mediocregopher Oct 7, 2026
20e38d1
docs(trie): describe cached proof inputs (#27774)
mediocregopher Oct 7, 2026
2671749
docs(trie): explain pending data publication (#27776)
mediocregopher Oct 7, 2026
e6d23ad
docs(trie): clarify storage cursor positioning (#27777)
mediocregopher Oct 7, 2026
83319e1
docs(trie): clarify adapter selection (#27778)
mediocregopher Oct 7, 2026
205b6ba
docs(trie): clarify skipped reveal nodes (#27779)
mediocregopher Oct 7, 2026
d9447b7
docs(trie): correct range proof endpoint (#27780)
mediocregopher Oct 7, 2026
9438068
docs(trie): focus public API contracts (#27781)
mediocregopher Oct 7, 2026
30115f0
fix(trie): name cursor duration units (#27771)
mediocregopher Oct 7, 2026
5868ee4
fix(trie): rewind backward overlay seeks (#27782)
mediocregopher Oct 7, 2026
53153d1
fix(trie): reject zero chunk sizes (#27786)
mediocregopher Oct 7, 2026
0a6c1c9
fix(trie): unify proof error conversion (#27788)
mediocregopher Oct 7, 2026
1d85cf0
refactor(trie): hide range proof error details (#27789)
mediocregopher Oct 7, 2026
881ff1e
fix(trie): preserve worker error sources (#27790)
mediocregopher Oct 7, 2026
1e8cee1
refactor(trie): separate storage proof messages (#27791)
mediocregopher Oct 7, 2026
0a66f4f
refactor(trie): remove rayon reexports (#27792)
mediocregopher Oct 7, 2026
c00a0c5
refactor(trie): remove unused sparse node model (#27793)
mediocregopher Oct 7, 2026
53f340a
refactor(trie): flatten computed trie data (#27794)
mediocregopher Oct 7, 2026
c1df664
chore(trie): deduplicate serde features (#27795)
mediocregopher Oct 7, 2026
5cb4362
refactor(trie): simplify deferred receivers (#27796)
mediocregopher Oct 7, 2026
570424d
refactor(trie): share proof overlay setup (#27797)
mediocregopher Oct 7, 2026
6c9dab5
refactor(cli): narrow unused pub items to pub(crate) (#27799)
joshieDo Oct 8, 2026
93bf85d
fix(trie): reject unsupported sparse roots (#27784)
mediocregopher Oct 8, 2026
d4a4b7b
fix(trie): seal update stream construction (#27785)
mediocregopher Oct 8, 2026
75f712f
refactor(trie): share storage proof collection (#27798)
mediocregopher Oct 8, 2026
ae9b816
docs(trie): clarify proof target ordering (#27775)
mediocregopher Oct 8, 2026
4e64212
feat(node): enable snap/2 sync behind --snap.v2 (#27712)
lean-apple Oct 8, 2026
e479f40
test(node): fix the snap legacy layout test (#27810)
mattsse Oct 8, 2026
7c1ffbe
chore(node): share backfill client alias (#27815)
lean-apple Oct 8, 2026
0700700
feat(dst): add optimized builds and gate trie/MDBX checks (#27819)
mediocregopher Oct 8, 2026
078c22d
fix(chain-state): drop parent chains iteratively (#27818)
0xrusowsky Oct 8, 2026
7e3a426
test(snap-sync): remove redundant session tests (#27824)
mattsse Oct 9, 2026
1c47d7b
test(snap-sync): remove redundant range tests (#27822)
mattsse Oct 9, 2026
6df18cb
test(net): remove redundant tests (#27825)
mattsse Oct 9, 2026
7c36107
test: remove redundant trie, task and downloader tests (#27827)
mattsse Oct 9, 2026
7744d20
test(storage): remove redundant tests (#27829)
mattsse Oct 9, 2026
5e309af
fix(trie): remove orphaned branches (#27832)
decofe Oct 9, 2026
aab51ee
test(node): remove redundant arg and harness tests (#27820)
mattsse Oct 9, 2026
8b5ec15
test(node): remove redundant e2e and unit tests (#27823)
mattsse Oct 9, 2026
a79f88d
test(rpc): remove redundant rpc and pool tests (#27826)
mattsse Oct 9, 2026
1df2a85
chore(snap-sync): remove dead APIs and slim tests (#27835)
mattsse Oct 9, 2026
5ab939e
test(engine): remove redundant tests (#27828)
mattsse Oct 9, 2026
17279c2
feat(dst): add Bedrock property macros (#27837)
mediocregopher Oct 9, 2026
d5e5790
perf(ci): cache-friendly stage-test reth build (#27840)
mattsse Oct 9, 2026
8458973
fix(ci): keep rust-cache across compact base checkout (#27839)
mattsse Oct 9, 2026
6824346
fix(tasks): don't join a worker from its own thread (#27805)
0xalpharush Oct 9, 2026
1a4dbbe
feat(e2e): add snap sync harness and tests (#27725)
lean-apple Oct 10, 2026
211289f
ci: re-audit Cyclops-reviewed PRs on each push (#27753)
legion2002 Oct 12, 2026
e938109
perf(ci): run ef-tests temp dirs on tmpfs (#27851)
mattsse Oct 12, 2026
6096d25
feat: schedule Hoodi Amsterdam activation (#27811)
decofe Oct 12, 2026
a288cbb
perf(ef-tests): share RocksDB across test cases (#27847)
mattsse Oct 12, 2026
2600410
refactor(snap-sync): keep compact reorg ancestry (#27617)
lean-apple Oct 12, 2026
bb1396c
test(e2e): fix snap sync persistence flake (#27862)
mattsse Oct 12, 2026
81e7be6
perf(rpc): compress only large responses, fastest (#27863)
DaniPopes Oct 12, 2026
95bdbe7
fix(ipc): stop buffering oversized requests (#27864)
DaniPopes Oct 12, 2026
fa94e15
perf(rpc): skip compression on loopback servers (#27865)
DaniPopes Oct 12, 2026
ed9bb9d
fix(ipc): keep truncated requests at the limit (#27866)
DaniPopes Oct 12, 2026
2db7dc8
fix(rpc): reuse cached senders in transaction_by_hash (#27816)
figtracer Oct 12, 2026
de92a04
fix(discv4): bind pong to pinged IP (#27868)
mattsse Oct 12, 2026
fd63eff
fix(txpool): skip foreign-chain 7702 auths (#27869)
mattsse Oct 12, 2026
d5d9026
ci: run Cyclops warden on every push and after audit commands (#27860)
decofe Oct 12, 2026
2f41eac
refactor: remove redundant trait bounds (#27875)
decofe Oct 13, 2026
f2fa663
refactor: remove redundant trait bounds (#27876)
decofe Oct 13, 2026
6680f49
fix(storage): invalidate in-memory keys when reverting without trie c…
decofe Oct 13, 2026
3ea44aa
fix(trie): bound dirty scans at cached paths (#27651)
mediocregopher Oct 13, 2026
e8a0685
perf(e2e-test-utils): gate chain import behind a default feature (#27…
mattsse Oct 13, 2026
4495884
ci: build unit and integration tests without debuginfo (#27884)
mattsse Oct 13, 2026
5b6d9c8
perf(e2e-test-utils): box futures of the eth API helpers (#27891)
mattsse Oct 13, 2026
e8a1a41
refactor: remove more bounds implied by supertraits (#27892)
mattsse Oct 13, 2026
ef9f654
docs: add recurring review feedback to AGENTS.md (#27896)
legion2002 Oct 14, 2026
aa29344
docs: add reth-rust-style agent skill (#27897)
legion2002 Oct 14, 2026
57825d4
fix(rpc): interrupt JS tracers on timeout and drop (#27903)
mattsse Oct 14, 2026
8777099
test: wait for proof and node teardown (#27907)
mattsse Oct 14, 2026
753db1e
fix(tasks): clear busy state before waking (#27906)
mattsse Oct 14, 2026
14b9cb9
test: remove redundant node smoke tests (#27914)
mattsse Oct 14, 2026
fb58073
fix(engine): acknowledge terminate after the tree is dropped (#27909)
mattsse Oct 14, 2026
9fa1fe5
chore(deps): bump rustls to 0.23.46 (#27916)
DaniPopes Oct 14, 2026
72e9128
perf(engine): reuse prewarm transaction results (#27894)
DaniPopes Oct 14, 2026
831876f
ci(bench): add a derek mempool argument (#27908)
DaniPopes Oct 14, 2026
8f5efd2
fix(trie): propagate walker initialization errors (#27737)
alessandromazza98 Oct 14, 2026
d37392c
feat(net): advertise snap/2 in the ENR (#27861)
MysticRyuujin Oct 14, 2026
e524c9b
test(snap): execute blocks above the pivot (#27855)
mark0-cn Oct 14, 2026
84c54f5
chore(docker): enable nightly prewarm reuse (#27917)
decofe Oct 14, 2026
8bdfd73
fix(discv5): pair TCP port with session family (#27735)
Kshot3000 Oct 14, 2026
be36d04
feat(metrics): support gzip encoding (#27766)
3alpha Oct 14, 2026
26ab036
perf(db): prefetch mapped bytecode pages before decoding (#27919)
DaniPopes Oct 14, 2026
130dd9d
perf(engine): reuse results of pool transactions (#27904)
DaniPopes Oct 14, 2026
d01adb1
fix(node): skip JWT secret when auth server is disabled (#27899)
WeAreResilience Oct 15, 2026
7486a1e
fix(net): parse port 80 in TrustedPeer enodes (#27764)
ara-stock Oct 15, 2026
bc98f38
fix(net): rate limit pending inbound at capacity (#27842)
LogvinovLeon Oct 15, 2026
fc2dc3b
fix(net): install RLPx subprotocols after the eth Status handshake (#…
kdonthi Oct 15, 2026
c10d16f
docs: fix dead links in database design doc (#27831)
mikeua Oct 15, 2026
ce80891
refactor(trie): simplify proof worker flow (#27927)
mediocregopher Oct 15, 2026
a369942
refactor(trie): restructure proof task workers and modules (#27929)
decofe Oct 15, 2026
b29193c
fix(bench): preserve BALs in historical replay (#27928)
decofe Oct 15, 2026
ec3e7e4
feat(db): enable safe-no-sync in nightly images (#27938)
decofe Oct 15, 2026
57734a3
fix(downloaders): validate a sync target above the head (#27937)
lean-apple Oct 16, 2026
bb71dd4
fix(cli): honor custom gas oracle defaults (#27954)
mattsse Oct 16, 2026
a64dec1
fix(rpc): restore geth's oracle threshold (#27895)
mattsse Oct 16, 2026
931fb6b
refactor(trie): split V2 calculator module (#27956)
mediocregopher Oct 16, 2026
cbfee04
perf(trie): use BTreeMap ranges in mock cursors (#27957)
mattsse Oct 16, 2026
2929a02
perf: build crypto C libraries with optimizations in dev (#27958)
mattsse Oct 16, 2026
4939845
test: load KZG settings lazily on e2e test nodes (#27959)
mattsse Oct 16, 2026
3248d75
test: replace fixed sleeps in libmdbx and session tests (#27960)
mattsse Oct 16, 2026
f725104
test: let e2e tests pick the database release timeout on stop (#27961)
mattsse Oct 16, 2026
137dea1
test: avoid the KZG trusted setup in blob tests that don't verify pro…
mattsse Oct 16, 2026
2a4d9de
test(trie): share one provider factory across fuzz cases (#27962)
mattsse Oct 16, 2026
292a7ee
fix(net): preserve longer peer bans (#27947)
mattsse Oct 16, 2026
f985879
fix(net): always revoke trusted peer membership (#27948)
mattsse Oct 16, 2026
ff26576
fix(rpc): enforce websocket origin allowlists (#27952)
mattsse Oct 16, 2026
3eeaf49
fix(net): restore persisted peer trust (#27949)
mattsse Oct 16, 2026
7fa176a
fix(net): reserve outbound dial capacity (#27946)
mattsse Oct 16, 2026
b056eba
fix(net): invalidate superseded dial events (#27950)
mattsse Oct 16, 2026
d00f447
fix(net): avoid unauthenticated identity penalties (#27951)
mattsse Oct 16, 2026
a90071f
fix(net): let trusted peers bypass outbound cap (#27843)
LogvinovLeon Oct 16, 2026
8f309cb
fix(cli): retry download range probe before falling back to sequentia…
jowparks Oct 16, 2026
5199d26
fix(cli): requeue failed download pieces instead of restarting the ar…
jowparks Oct 16, 2026
58a9fc1
fix(download): set history prune checkpoints to the retained window s…
jowparks Oct 16, 2026
e3232dd
feat(download): let the full preset include RocksDB indices (#27940)
jowparks Oct 16, 2026
6ddddd1
fix(provider): preserve empty receipt ranges (#27966)
AdityaSripal Oct 16, 2026
02888de
fix(ci): buffer the action update cooldown (#27972)
decofe Oct 16, 2026
c85c154
chore(deps): bump the ci-weekly group with 2 updates (#27973)
dependabot[bot] Oct 17, 2026
0e052cb
test: close the node database in test_engine_graceful_shutdown (#27974)
mattsse Oct 17, 2026
f3aebb6
chore: allow Git dependency sources (#27976)
decofe Oct 17, 2026
86ec896
fix(cli): honor configurable argument defaults (#27975)
mattsse Oct 17, 2026
5159b22
fix(rpc): lift execution gas cap and fix default gas in eth_simulateV…
MysticRyuujin Oct 17, 2026
1175afc
fix(rpc): return Amsterdam payload fields from testing_buildBlockV1 (…
MysticRyuujin Oct 17, 2026
18e378c
feat(cli): take --rpc.txfeecap default from DefaultRpcServerArgs (#27…
palango Oct 17, 2026
4fcb538
fix(rpc): reject max sender nonce in eth_simulateV1 (#27881)
MysticRyuujin Oct 17, 2026
087d866
feat(net): support dual-stack discovery and bootnode seeds (#26402)
MysticRyuujin Oct 17, 2026
1ce3294
fix(cli): propagate migrate-v2 read errors and rollback failures (#27…
mattsse Oct 17, 2026
9da6c4d
fix(cli): surface db read and subkey parse errors (#27979)
mattsse Oct 17, 2026
0e06753
fix(cli): validate stage run and dump arguments (#27980)
mattsse Oct 17, 2026
a6e4bb9
fix(cli): harden re-execute args and error handling (#27981)
mattsse Oct 17, 2026
e453252
fix(cli): validate manifest input and fail closed on symlink check (#…
mattsse Oct 17, 2026
0683de2
fix(cli): surface init-state worker and header read errors (#27984)
mattsse Oct 17, 2026
3124d23
fix(cli): error on unloadable config and missing enode key (#27982)
mattsse Oct 17, 2026
95370b5
fix(snap-sync): propagate finalized lookup errors (#27985)
mattsse Oct 17, 2026
379d02c
fix(snap-sync): classify fatal errors explicitly (#27986)
mattsse Oct 17, 2026
702da82
fix(snap-sync): check generation roots against headers (#27987)
mattsse Oct 17, 2026
7376799
fix(engine): avoid formatting full invalid blocks in logs (#27988)
mattsse Oct 17, 2026
0d33120
fix(engine): avoid full payload logs in utilities (#27989)
mattsse Oct 17, 2026
6386788
fix: avoid Etherscan and IPC payload dumps (#27990)
mattsse Oct 17, 2026
e667968
fix(p2p): summarize block logs (#27991)
mattsse Oct 17, 2026
dae0a6e
fix(ci): pin benchmark chart dependencies (#27993)
decofe Oct 18, 2026
bc2380f
test(snap): expand e2e coverage (#27853)
lean-apple Oct 18, 2026
f4676ea
fix(pipeline): floor detached unwinds at genesis (#27888)
lean-apple Oct 18, 2026
e633bdc
perf(era): share fetched file list metadata (#28004)
mattsse Oct 19, 2026
3c9260d
fix(era): share strict Snappy RLP decoding (#27997)
mattsse Oct 19, 2026
49d736d
chore(deps): bump astral-sh/setup-uv from 10.2.0 to 10.3.0 in the ci-…
dependabot[bot] Oct 19, 2026
186af6d
fix(engine): report payload job start errors (#28015)
mattsse Oct 19, 2026
482bdb0
refactor(trie): centralize multiproof v2 logic (#27945)
mediocregopher Oct 19, 2026
b9a8eb3
feat(evm): customize executor in block builder (#28011)
lean-apple Oct 19, 2026
f88813a
perf(trie): reuse known storage roots in proofs (#28016)
mediocregopher Oct 19, 2026
fd936f9
chore(hive): regenerate no_sim_build.diff for hive's simulator build …
spencer-tb Oct 20, 2026
f3fd194
chore(deps): bump revm-inspectors to 0.44.3 (#28034)
mattsse Oct 20, 2026
2ce3552
chore: release 2.8.0 (#28039)
emmajam Oct 20, 2026
05ba481
fix(trie): complete range changesets (#27615)
decofe Oct 20, 2026
61ee17d
Merge reth v2.8.0
sduchesneau Oct 21, 2026
0f73e2e
Test live tracing with prewarm reuse enabled
sduchesneau Oct 21, 2026
0dec4e1
Add reth-v2.8.0-fh3.1 changelog section
sduchesneau Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
102 changes: 102 additions & 0 deletions .agents/skills/reth-rust-style/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
name: reth-rust-style
description: Review rules reth reviewers enforce beyond AGENTS.md. Use when writing, refactoring, or reviewing Rust in reth, before opening or updating a PR.
---

# Reth Rust Style

These are review comments reth reviewers leave often that AGENTS.md doesn't spell out. AGENTS.md still applies; this file only adds to it.

## Scope

- Before pushing, read the full diff and revert every hunk the PR description doesn't explain.
- Refactors keep behavior identical. If behavior must change, say so in the PR description.
- When wrapping or moving a type, keep existing call sites unchanged (`Deref` or delegating methods).

## Reuse before writing

- Prefer upstream APIs to manual byte handling:
- `B256::from(U256)`, `U256::from(B256)`, `Address::into_word()`
- `Log::topic0()`, `Signature::as_bytes()`, `Bytes::from([u8; N])`
- `PayloadId::from_str`, alloy `From` impls between RPC and consensus types
- `alloy_rlp::decode_exact`, `abi_decode_validate`, `sol!` for ABI types
- Use alloy's fixed-bytes maps (`B256Map`, `AddressMap`) for maps keyed by hashes or addresses.
- Use the constructors a type already has (`ExecOutput::done`, `ExecOutput::in_progress`, `StorageEntry::new`) instead of struct literals.
- When the same logic appears twice, extract one helper.

## Keep it small

- No wrapper, trait, enum, or type alias with a single use. The one exception is a type alias that replaces `#[allow(clippy::type_complexity)]`.
- No caches, interior mutability, or format versioning without a measured need.
- Don't re-check an invariant that is already enforced upstream. If correctness depends on it, say where it's enforced in a one-line comment.
- Remove unused parameters instead of `_`-prefixing them.

## Public API

- reth is a library. Don't remove or rename public items without a reason in the PR description.
- A new trait method needs a default or no-op impl unless every implementor must provide it.
- Public types need public fields or accessors for the data callers need.
- Destructive or write operations belong on the mutable transaction (`DbTxMut`), not on `DbTx`. Say in their docs that they are destructive.
- Re-export types that appear in public signatures from the crate that exposes the signature.

## Comments and docs

- A comment states one non-obvious fact. Don't restate the code or narrate the change.
- Keep existing comments and TODOs when moving code.
- When behavior changes, update everything that describes it in the same PR: doc comments, numbered step lists, `expect` and `unreachable!` messages, metric names.

## Naming

- Names say what a thing does or holds, including side effects (`*_blocking`).
- Match sibling names (`*_with_nodes` next to the trait that uses it).
- Rename an item when its meaning changes. Leave unrelated names alone.
- Don't reuse names of alloy types for different things (prefix with `Pooled*` or similar).
- Don't alias imports with `use X as Y`; it breaks grep.

## Errors

- Carry the source error in the variant, and don't report provider errors as consensus errors.
- Never discard a fallible result with `.ok()` or `let _ =`. Ignore only the specific variant you expect.
- Don't turn values a spec leaves open into hard decode errors. Decode, then truncate or reject at the layer that owns the limit.
- Use `checked_*` and return an error for gas and index math. Use `try_from` for conversions; `as` only when it can't truncate.

## Types

- Make invalid states unrepresentable. Put variant-specific data inside enum variants, not in correlated `bool`/`Option` fields.
- Use `usize` for limits that size collections, so they need no casts.
- Check serde compatibility of changed public types.
- A function that doesn't use `self` is a free function. Logic that belongs to a type goes in its `impl`.
- Reject mutually exclusive CLI flags at parse time with clap's `conflicts_with`, and update the parse-all test.

## Tests

- Every new branch, guard, error path, and unwind or reopen path gets a test in the same PR.
- Assert the exact error or message, not just `is_err()`.
- Fixtures must be coherent: request the same root the fixture verifies, and cover every match arm the loop claims to.
- Don't commit `#[ignore]` manual perf tests. Write a bench.

## Async and observability

- Every wait is bounded and observes shutdown. Every queue and retained map has a bound.
- A spawned task enters the caller's span for the whole closure, not only as the parent of a `DEBUG` child; check it survives an `INFO` filter.
- Log `debug!` or `trace!` on state transitions in background tasks.
- Count skips with a dedicated metric, not by recording zeros.

## Layout and visibility

- When dropping an import, remove the whole line and any blank line it leaves.
- Keep items `pub(crate)` or private unless another crate uses them.
- Use `#[expect(lint, reason = "...")]` instead of `#[allow]`.

## Performance

- Don't clone large values to read them. Borrow, `take`, or share through `Arc`. Getters return references.
- Don't read the same DB value twice, and build optional data lazily (`Option`) when only some paths need it.
- Cap any length that comes from untrusted input before `Vec::with_capacity` or a loop.

## Dependencies and CI

- Workspace dependencies have default features off. Check that each touched crate builds on its own, with and without its features.
- Keep `no_std` crates free of `std`; use `core` and `alloc`.
- Dependency bumps respect the MSRV.
- Pin reusable workflows by SHA only after the 7-day soak, with a trailing `# repo#PR` comment. Never reference `@main` or expose secrets to cargo builds.
1 change: 1 addition & 0 deletions .claude/skills
2 changes: 1 addition & 1 deletion .config/zepter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ workflows:
# Check that `A` activates the features of `B`.
"propagate-feature",
# These are the features to check:
"--features=std,dev,asm-keccak,jemalloc,jemalloc-prof,tracy-allocator,tracy,serde-bincode-compat,serde,test-utils,arbitrary,min-error-logs,min-warn-logs,min-info-logs,min-debug-logs,min-trace-logs,otlp,otlp-logs,js-tracer,portable,keccak-cache-global,trie-debug,secp256k1",
"--features=std,dev,account-ext,asm-keccak,jemalloc,jemalloc-prof,tracy-allocator,tracy,serde-bincode-compat,serde,test-utils,arbitrary,min-error-logs,min-warn-logs,min-info-logs,min-debug-logs,min-trace-logs,otlp,otlp-logs,js-tracer,portable,keccak-cache-global,trie-debug,secp256k1",
# Do not try to add a new section to `[features]` of `A` only because `B` exposes that feature. There are edge-cases where this is still needed, but we can add them manually.
"--left-side-feature-missing=ignore",
# Ignore the case that `A` it outside of the workspace. Otherwise it will report errors in external dependencies that we have no influence on.
Expand Down
5 changes: 4 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ updates:
time: "09:00"
timezone: UTC
cooldown:
default-days: 7
# Buffer the scanner's seven-day minimum: Dependabot reads date-only tag metadata.
default-days: 8
groups:
ci-weekly:
patterns:
- '*'
- package-ecosystem: cargo
directory: /
allow:
- dependency-type: all
schedule:
interval: weekly
day: monday
Expand Down
90 changes: 90 additions & 0 deletions .github/scripts/bench-args-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const vm = require('node:vm');
const { test } = require('node:test');

const workflow = fs.readFileSync(path.join(__dirname, '../workflows/bench.yml'), 'utf8');
const source = workflow.match(/ const validBalModes = [\s\S]*?(?=\n - name: Acknowledge request)/)[0];

async function parse(args = {}, eventName = 'workflow_dispatch') {
const outputs = {};
const failures = [];
await vm.runInNewContext(`(async () => {${source}\n})()`, {
process: { env: Object.fromEntries(Object.entries(args).map(([key, value]) => [
`INPUT_${key.toUpperCase().replaceAll('-', '_')}`, value,
])) },
context: {
eventName,
repo: { owner: 'paradigmxyz', repo: 'reth' },
issue: { number: 27928 },
payload: { comment: { user: { login: 'tester' }, body: `derek bench ${Object.entries(args).map(([key, value]) => `${key}=${value}`).join(' ')}` } },
},
github: { rest: { pulls: {
list: async () => ({ data: [] }),
get: async () => ({ data: { head: { sha: 'test-sha', ref: 'test-ref', repo: { full_name: 'paradigmxyz/reth' } } } }),
} } },
core: {
setOutput: (key, value) => { outputs[key] = value; },
setFailed: message => failures.push(message),
info: () => {},
},
});
return { outputs, failures };
}

for (const event of ['workflow_dispatch', 'issue_comment']) {
for (const bal of ['true', 'baseline', 'feature']) {
test(`${event}: bal=${bal} uses the existing big-block format in both arms`, async () => {
const { outputs, failures } = await parse({ bal }, event);
assert.deepEqual(failures, []);
assert.equal(outputs['big-blocks'], 'true');
assert.equal(outputs['big-blocks-target-gas'], '1');
assert.equal(outputs['node-bin'], 'reth-bb');
assert.equal(outputs.bal, bal);
assert.equal(outputs.blocks, '500');
assert.equal(outputs.warmup, '125');
assert.equal(outputs['run-pairs'], '6');
});
for (const extra of [{ reorg: '5' }, { mempool: 'true' }]) {
test(`${event}: rejects bal=${bal} with ${Object.keys(extra)[0]}`, async () => {
const { outputs, failures } = await parse({ bal, ...extra }, event);
assert.deepEqual(outputs, {});
assert.deepEqual(failures, [extra.reorg
? 'reorg is not supported with big-blocks or BAL (reth-bb cannot build reorg blocks)'
: 'mempool is only supported in Engine mode without big-blocks or reorg']);
});
}
}

test(`${event}: retains explicit big-block targets and run sizes`, async () => {
const { outputs, failures } = await parse({ bal: 'true', 'big-blocks': '2G', blocks: '17', warmup: '3', 'run-pairs': '2' }, event);
assert.deepEqual(failures, []);
assert.equal(outputs['big-blocks-target-gas'], '2G');
assert.equal(outputs.blocks, '17');
assert.equal(outputs.warmup, '3');
assert.equal(outputs['run-pairs'], '2');
});

test(`${event}: non-BAL reorg replay continues using reth`, async () => {
const { outputs, failures } = await parse({ reorg: '5' }, event);
assert.deepEqual(failures, []);
assert.equal(outputs['node-bin'], 'reth');
assert.equal(outputs['big-blocks'], 'false');
assert.equal(outputs.reorg, '5');
});

test(`${event}: rejects big-block reorgs even without BAL`, async () => {
const { outputs, failures } = await parse({ 'big-blocks': '1', reorg: '5' }, event);
assert.deepEqual(outputs, {});
assert.deepEqual(failures, ['reorg is not supported with big-blocks or BAL (reth-bb cannot build reorg blocks)']);
});

for (const mode of ['rpc', 'call']) {
test(`${event}: rejects BAL in ${mode} mode`, async () => {
const { outputs, failures } = await parse({ mode, bal: 'true' }, event);
assert.deepEqual(outputs, {});
assert.deepEqual(failures, [`${mode} mode does not support big-blocks, reorg, or BAL`]);
});
}
}
22 changes: 10 additions & 12 deletions .github/scripts/bench-scheduled-refs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -123,17 +123,16 @@ if [ "$MODE" = "release" ]; then

# --- Step 1: Resolve feature ref from latest nightly Docker build ---
echo "::group::Querying latest nightly docker build"
# Filter client-side: the API's event/status filters can return stale runs.
RUNS_JSON=$(gh run list \
-R "$REPO" \
--workflow=docker.yml \
--event=schedule \
--status=completed \
--limit 5 \
--json headSha,createdAt,conclusion)
--limit 200 \
--json headSha,createdAt,conclusion,event)

LATEST=$(echo "$RUNS_JSON" | jq -r '[.[] | select(.conclusion == "success")] | first // empty')
LATEST=$(echo "$RUNS_JSON" | jq -r '[.[] | select(.event == "schedule" and .conclusion == "success")] | first // empty')
if [ -z "$LATEST" ]; then
echo "::error::No successful scheduled docker.yml run found in the last 5 runs"
echo "::error::No successful scheduled docker.yml run found in the last 200 runs"
exit 1
fi

Expand Down Expand Up @@ -217,19 +216,18 @@ fi
# --- Step 1: Query latest successful scheduled docker.yml run ---
echo "::group::Querying latest nightly docker build"

# Filter client-side: the API's event/status filters can return stale runs.
RUNS_JSON=$(gh run list \
-R "$REPO" \
--workflow=docker.yml \
--event=schedule \
--status=completed \
--limit 5 \
--json headSha,createdAt,conclusion)
--limit 200 \
--json headSha,createdAt,conclusion,event)

# Find the most recent successful run
LATEST=$(echo "$RUNS_JSON" | jq -r '[.[] | select(.conclusion == "success")] | first // empty')
LATEST=$(echo "$RUNS_JSON" | jq -r '[.[] | select(.event == "schedule" and .conclusion == "success")] | first // empty')

if [ -z "$LATEST" ]; then
echo "::error::No successful scheduled docker.yml run found in the last 5 runs"
echo "::error::No successful scheduled docker.yml run found in the last 200 runs"
echo "Runs found: $RUNS_JSON"
exit 1
fi
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/bench-state-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ gh() {
if [[ "$*" == *'--status=in_progress'* ]]; then
printf '0\n'
else
printf '[{"headSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","createdAt":"%s","conclusion":"success"}]\n' "$STATE_TEST_DATE"
printf '[{"headSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","createdAt":"%s","conclusion":"success","event":"schedule"}]\n' "$STATE_TEST_DATE"
fi
;;
*) return 1 ;;
Expand Down
29 changes: 29 additions & 0 deletions .github/scripts/bench-txgen-build-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail

script="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bench-txgen-build.sh"
scratch=$(mktemp -d)
trap 'rm -rf "$scratch"' EXIT
export BUILD_TEST_LOG="$scratch/build-args"

cargo() {
printf '%s\n' "$*" > "$BUILD_TEST_LOG"
}
rustup() { :; }
export -f cargo rustup

for arm in baseline feature; do
for bal in false true baseline feature; do
for big_blocks in false true; do
BENCH_BAL="$bal" BENCH_BIG_BLOCKS="$big_blocks" BENCH_TRACY=off \
bash "$script" "$arm" "$scratch" test-ref > /dev/null 2>&1
if [ "$big_blocks" = true ]; then
expected='build --locked --profile profiling -p reth-bb'
else
expected='build --locked --profile profiling --bin reth'
fi
[[ "$(cat "$BUILD_TEST_LOG")" == "$expected" ]]
done
done
done
echo 'PASS: both arms build the selected node for all BAL modes'
15 changes: 14 additions & 1 deletion .github/scripts/bench-txgen-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# Optional env: BENCH_EXECUTION_MODE, BENCH_BIG_BLOCKS, BENCH_BIG_BLOCKS_TARGET_GAS,
# BENCH_CALL_CLASS, BENCH_CALL_METHODS, BENCH_CALL_RPS,
# BENCH_CALL_DURATION, BENCH_CALL_PASSES, BENCH_CALL_CONCURRENCY,
# BENCH_REORG, BENCH_BAL,
# BENCH_REORG, BENCH_BAL, BENCH_MEMPOOL,
# BENCH_WORK_DIR, BENCH_WAIT_TIME, BENCH_BLOCK_TIME, BENCH_BASELINE_ARGS,
# BENCH_FEATURE_ARGS, BENCH_OTLP_TRACES_ENDPOINT,
# BENCH_OTLP_LOGS_ENDPOINT, BENCH_OTLP_DISABLED,
Expand Down Expand Up @@ -516,6 +516,19 @@ fi
if [ -n "${BENCH_REORG:-}" ]; then
TXGEN_SEND_ARGS+=(--reorg "$BENCH_REORG")
fi
# Submits each block's transactions to the txpool before its payload, so
# that features acting on pool transactions see them. BENCH_MEMPOOL is
# `true` for txgen's defaults, DELAY, or DELAY,FRACTION.
if [ "$EXECUTION_MODE" = "engine" ] && [ -n "${BENCH_MEMPOOL:-}" ]; then
TXGEN_SEND_ARGS+=(--mempool)
if [ "$BENCH_MEMPOOL" != "true" ]; then
IFS=, read -r MEMPOOL_DELAY MEMPOOL_FRACTION <<< "$BENCH_MEMPOOL"
TXGEN_SEND_ARGS+=(--mempool-delay "$MEMPOOL_DELAY")
if [ -n "$MEMPOOL_FRACTION" ]; then
TXGEN_SEND_ARGS+=(--mempool-fraction "$MEMPOOL_FRACTION")
fi
fi
fi

WARMUP="${BENCH_WARMUP_BLOCKS:-0}"
BLOCKS="${BENCH_BLOCKS:?BENCH_BLOCKS must be set}"
Expand Down
16 changes: 8 additions & 8 deletions .github/scripts/hive/no_sim_build.diff
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/internal/libdocker/builder.go b/internal/libdocker/builder.go
index 1c9714df..2aa493ca 100644
index 20f5060..50a9194 100644
--- a/internal/libdocker/builder.go
+++ b/internal/libdocker/builder.go
@@ -8,7 +8,6 @@ import (
Expand All @@ -13,32 +13,32 @@ index 1c9714df..2aa493ca 100644
@@ -50,25 +49,8 @@ func (b *Builder) BuildClientImage(ctx context.Context, client libhive.ClientDes

// BuildSimulatorImage builds a docker image of a simulator.
func (b *Builder) BuildSimulatorImage(ctx context.Context, name string, buildArgs map[string]string) (string, error) {
- dir := b.config.Inventory.SimulatorDirectory(name)
func (b *Builder) BuildSimulatorImage(ctx context.Context, sim libhive.SimulatorDesignator) (string, error) {
- dir := b.config.Inventory.SimulatorDirectory(sim.Simulator)
- buildContextPath := dir
- buildDockerfile := "Dockerfile"
- buildDockerfile := sim.Dockerfile()
-
- // build context dir of simulator can be overridden with "hive_context.txt" file containing the desired build path
- if contextPathBytes, err := os.ReadFile(filepath.Join(filepath.FromSlash(dir), "hive_context.txt")); err == nil {
- buildContextPath = filepath.Join(dir, strings.TrimSpace(string(contextPathBytes)))
- if strings.HasPrefix(buildContextPath, "../") {
- return "", fmt.Errorf("cannot access build directory outside of Hive root: %q", buildContextPath)
- }
- if p, err := filepath.Rel(buildContextPath, filepath.Join(filepath.FromSlash(dir), "Dockerfile")); err != nil {
- if p, err := filepath.Rel(buildContextPath, filepath.Join(filepath.FromSlash(dir), sim.Dockerfile())); err != nil {
- return "", fmt.Errorf("failed to derive relative simulator Dockerfile path: %v", err)
- } else {
- buildDockerfile = p
- }
- }
tag := fmt.Sprintf("hive/simulators/%s:latest", name)
- err := b.buildImage(ctx, buildContextPath, buildDockerfile, tag, buildArgs)
tag := fmt.Sprintf("hive/simulators/%s:latest", sim.Simulator)
- err := b.buildImage(ctx, buildContextPath, buildDockerfile, tag, sim.BuildArgs)
- return tag, err
+ return tag, nil
}

// BuildImage creates a container by archiving the given file system,
diff --git a/internal/libdocker/proxy.go b/internal/libdocker/proxy.go
index 386b4224..7545fda0 100644
index 386b422..7545fda 100644
--- a/internal/libdocker/proxy.go
+++ b/internal/libdocker/proxy.go
@@ -16,10 +16,6 @@ const hiveproxyTag = "hive/hiveproxy"
Expand Down
1 change: 0 additions & 1 deletion .github/scripts/verify_image_arch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ verify_image() {
if [[ "$TARGETS" == *"nightly"* ]]; then
verify_image "${REGISTRY}/reth:nightly" amd64 arm64
verify_image "${REGISTRY}/reth:nightly-profiling" amd64
verify_image "${REGISTRY}/reth:nightly-edge-profiling" amd64
else
for tag in $(echo "$ETHEREUM_TAGS" | tr ',' ' '); do
verify_image "$tag" amd64 arm64
Expand Down
Loading
Loading