Erigon v3.6.0 — Upstream Underbelly
Erigon 3.6.0 is headlined by more reliable Caplin block production, pruned nodes reclaiming old snapshots, and
plain commitment snapshots, with leaner state access and maintenance throughout. Most 3.5 users can upgrade without
re-syncing. To benefit immediately from the new plain commitment format, existing users should install 3.6, then run
erigon seg reset --datadir=<path> before starting the node; the next start will re-sync using the new snapshots. Datadirs
created with Erigon 3.3 or earlier that have not already been rebased must use this reset path or run
erigon seg step-rebase --datadir=<path> --new-step-size=390625 before their first normal 3.6 start.
Highlights
- More reliable Caplin block production. Caplin starts payload building before proposer slots and publishes fork
choice earlier, giving blocks more time to reach attesters (#23437, #23172) — by @lystopad - Pruned nodes now reclaim old state snapshots. State history, indexes, optional commitment history, and the receipts
cache are retired once they fall outside their configured windows; fresh syncs also skip optional snapshots outside
those windows. This fixes unbounded snapshot growth on long-runningminimaland other pruned nodes (#21306, #22123,
#21200, #22243, #22349) — by @AskAlexSharov, @JkLondon - Plain commitment snapshots. New commitment files store values directly by default, speeding state reads and merges
at the cost of larger files. Existing referenced files remain readable and convert lazily during merges; the offline
integration commitment convertcommand provides an explicit migration path (#14809, #21452, #21376, #21933) — by
@awskii, @AskAlexSharov - Faster state access and snapshot maintenance. Sharded LRU state, code, and commitment caches replace whole-cache
resets; compression during state-snapshot merges is 2–3× faster, dictionary-building merges are about 1.5× faster,
and the mainnet.btpivot cache uses roughly one quarter of its previous heap (#21386, #21982, #22154, #21625,
#22050, #21875) — by @mh0lt, @yperbasis, @sudeepdino008, @AskAlexSharov
Breaking Changes
- Downgrading after 3.6 writes new snapshot files is unsupported. New 3.6 snapshot and accessor formats are
incompatible with Erigon 3.5. Back up the datadir before upgrading if rollback is required (#21452, #21376, #21778). - Historical receipts are off by default on fresh datadirs in every prune mode. Existing datadirs keep their stored
enable/disable setting. Without the cache, receipt and log RPCs re-execute within the state-history window at higher
latency. Blocks-mode operators who need receipts and logs back to genesis must use
--prune.include-receipts --prune.receipts.distance=keep-all(#22296, #22349) — by @yperbasis, @AskAlexSharov - Idle polling filters expire after five minutes. Clients using
eth_newFilter,eth_newBlockFilter, or
eth_newPendingTransactionFiltermust poll within the timeout or recreate the filter. Configure
--rpc.subscription.filters.timeout, or set it to0to disable eviction. Newsubscriptions_activeand
subscriptions_*_totalmetrics track the filter lifecycle (#22261) — by @onelapahead - JSON-RPC compatibility changes. Quoted decimal block numbers such as
"3"are rejected; use"0x3", a bare
integer, or a named tag. Streaming trace errors no longer includeresult: nullalongsideerror(#21985, #21922) —
by @lupin012
Added and Changed
RPC
- With
--prune.include-commitment-history,eth_getWitnessnow builds and verifies a lean witness for any block within
retained history (#22099) — by @awskii eth_fillTransactionfills missing fields and returns the unsigned raw transaction plus its JSON form, compatible
with geth; KZG generation from raw blobs is not included (#21870) — by @lupin012eth_getBalance,eth_getCode,eth_getStorageAt,eth_getTransactionCount,eth_getProof, and
eth_getStorageValuesnow default an omitted block parameter tolatest(#21586) — by @MysticRyuujintrace_blockandtrace_replayBlockTransactionscan include beacon-withdrawal balance changes through the optional
IncludeWithdrawalstrace setting (#21592) — by @lupin012
Consensus layer and protocol
- Validation now rejects fork-inconsistent blocks and sidecars, truncated typed transactions, invalid fee relationships,
and blob wrappers with trailing data (#22920, #23041, #22902, #23297) — by @yperbasis, @chfast - Default block graffiti now identifies both the execution and consensus clients (#22303) — by @lystopad
- Caplin archive maintenance repairs truncated validator tables, backs off repeatedly failing retirement work, removes
frozen state rows from its indexing DB for reuse, and stores compact effective balances, cutting the measured per-slot
copy from about 266 MB to 18 MB (#22385, #22396, #22411, #23408) — by @awskii, @AskAlexSharov, @lystopad - Caplin advertises its bound ports, skips peers without TCP endpoints, and accepts Chiado libp2p bootstrap nodes
(#22273, #22271, #23245) — by @MysticRyuujin, @domiwei - A deadlock in the transaction pool that could wedge block-producing nodes during high load has been resolved (#23360) — by @lystopad
- Glamsterdam devnet-6 support adds EIP-8282 builder execution requests, EIP-2780, EIP-8038, EIP-8246, and the devnet-6
revisions of EIP-7928/EIP-8037; Caplin tracks the Gloas alpha.11 request format, and BALs can be regenerated throughout
retained state history, extending beyond the weak-subjectivity period (#22091, #22093, #22053, #22060, #22122,
#22136, #22161, #21764) — by @domiwei,
@taratorio. Devnet/testing only — not scheduled on mainnet or any public testnet.
Operations
- Pruning flags now use readable policies:
--prune.distanceacceptskeep-all, and--prune.distance.blocksaccepts
keep-post-mergeandkeep-all. Receipt and commitment-history caches have independent--prune.*.distancewindows;
the former receipt flag names remain aliases (#22119, #21200, #22349) — by @yperbasis, @JkLondon, @AskAlexSharov - Missing E3 accessors are rebuilt automatically on restart.
erigon seg index --rebuildrebuilds every snapshot
accessor and index without deleting snapshot data (#22682, #21919) — by @AskAlexSharov, @sudeepdino008 - Commitment preloading no longer stalls when a step budget fills exactly (#23153) — by @lystopad
- The command-line layer now uses
urfave/cli/v3. Normal flag handling remains compatible, and--confignow applies
to subcommands; operators with unusual invocation patterns should smoke-test them (#22130, #22546) — by
@AskAlexSharov, @yperbasis, @lupin012
Full Changelog: v3.5.5...v3.6.0