Skip to content

Latest commit

 

History

History
820 lines (550 loc) · 44.4 KB

File metadata and controls

820 lines (550 loc) · 44.4 KB

Erigon v3.6.0 — Upstream Underbelly — TBD

Breaking Changes

--prune.include-receipts: historical receipts cache now off by default in all prune modes

The historical ("fat") receipts cache is no longer enabled by default on non-archive nodes. Previously --prune.include-receipts (formerly --persist.receipts, still accepted as an alias) defaulted on for every prune mode except archive; it now defaults off everywhere. The consensus layer was the consumer that justified retaining these receipts on pruned nodes, and it no longer needs them (#21617).

What changed:

--prune.mode Before After
archive off off
full on off
blocks on off
minimal on off

Receipts and logs stay available within a node's retention window regardless: without the cache they are re-executed on demand from state history, so eth_getLogs and eth_getBlockReceipts keep working, at higher latency. For full and minimal nodes the availability window is unchanged (receipts follow the state-history window either way). For blocks nodes the cache previously made receipts and logs queryable back to genesis; without it they follow the state-history window (last 262,144 blocks) — pass --prune.include-receipts if you rely on full-range eth_getLogs.

Migration: existing datadirs are unaffected — the receipts-cache setting is recorded at datadir creation and the stored value wins, so a node already syncing with the cache keeps it. Such a node now logs a startup notice that --prune.include-receipts differs from the value stored in the datadir; pass --prune.include-receipts explicitly to silence it. Only newly-created full/minimal/blocks datadirs start without the cache; pass --prune.include-receipts on a fresh datadir to opt back in.

(#22296) — by @yperbasis


CLI: receipts and commitment-history pruning flags moved under --prune.*

The receipt cache and commitment history now share the --prune.* naming used by the rest of the pruning flags. All former names keep working as aliases, and stored datadir settings are unaffected.

  • --persist.receipts--prune.include-receipts (alias: --persist.receipts, --experiment.persist.receipts.v2).
  • New --prune.receipts.distance (alias: --persist.receipts.distance) bounds how far back the receipt cache is kept: a block count, keep-all, or empty/0 (default) to follow the state-history window. Requires --prune.include-receipts. Snapshots older than the window are skipped at download time.
  • --prune.commitment-history.distance now also accepts keep-all (in addition to a block count); empty or 0 still keeps everything.

(#22349) — by @AskAlexSharov


JSON-RPC: block-number strings must use the 0x hex format

Quoted decimal strings (e.g., "3") are no longer accepted as block-number parameters; use the canonical hex form (e.g., "0x3") instead. Bare JSON integers (3) and named tags ("latest", "earliest", "pending", "safe", "finalized") are unchanged.

What changed:

Input Before After
"3" (quoted decimal) accepted rejected with -32602
"0x3" (hex string) accepted accepted
3 (bare integer) accepted accepted

Migration: replace any quoted decimal block number with its 0x equivalent — e.g., "3""0x3", "1000000""0xf4240".


eth_simulateV1: base fee too low error code corrected to -38012

Aligns Erigon with the eth_simulateV1 error code specification (NethermindEth/nethermind#11412).

What changed:

Aspect Before After
ErrFeeCapTooLow error code -32602 (generic "Invalid params") -38012 (spec-mandated "baseFeePerGas is too low")

Migration:

  • If your tooling matches on error code -32602 to detect base-fee-too-low conditions in eth_simulateV1 responses, update it to match -38012 instead.

JSON-RPC: idle polling filters are evicted after 5 minutes

Filters created with eth_newFilter, eth_newBlockFilter, and eth_newPendingTransactionFilter are now evicted when not polled for 5 minutes, matching geth's stale-filter deadline. Previously they lived — and kept buffering data — until eth_uninstallFilter or a restart.

What changed:

Aspect Before After
Idle polling filter kept until uninstalled or restart evicted after 5 minutes without a poll
eth_getFilterChanges / eth_getFilterLogs on an evicted id filter not found

Migration: poll more often than the timeout, or recreate the filter when filter not found is returned (as with geth). Tune with --rpc.subscription.filters.timeout; set it to 0 to restore the previous keep-forever behavior. (#22261 by @onelapahead)

Added

CLI & Operations

  • --prune.distance.blocks now accepts readable policy names — keep-post-merge and keep-all — instead of the raw MaxUint64-based magic numbers (18446744073709551615 / 18446744073709551614); --prune.distance likewise accepts keep-all. Numeric values still work (#22119) — by @yperbasis
  • --rpc.subscription.filters.timeout — deadline for evicting idle RPC polling filters (default 5m; 0 disables). New subscriptions_active gauge and subscriptions_created_total / subscriptions_unsubscribed_total / subscriptions_reaped_total counters track the filter lifecycle (#22261) — by @onelapahead

Erigon v3.5.2 — Tidal Tails — 2026-07-13

v3.5.2 is a bugfix release recommended for all users, and especially for anyone running 3.5.1 — it fixes a sync-halting trie-root regression introduced there (#22399). It is a drop-in upgrade from 3.5.1 — no re-sync required.

Bugfixes

  • db/state: clear the StateCache on SharedDomains unwind below the reorg window (#22402) by @Sahil-4555 — after the v3.5.1 changeset-isolation backport, a block that failed execution within the reorg window did a disk-noop overlay unwind that left dirty, uncommitted writes in the state cache; on the next run execution read those stale values instead of the database, producing a deterministic trie-root mismatch that halted sync. Closes #22399.
  • rpc, node: fix the nil-pointer panic in the gzip batch flush race (#22383) by @lupin012 — a gzipped JSON-RPC batch with two or more streamable methods invoked the shared gzip-streaming flush hook concurrently from per-call goroutines; gzipResponseWriter.Flush is not concurrency-safe, so the calls raced on the underlying gzip writer and could dereference a nil flate compressor, crashing the node. Closes #22334.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.5.1...v3.5.2


Erigon v3.5.1 — Tidal Tails — 2026-07-10

v3.5.1 is a bugfix release recommended for all users. It is a drop-in upgrade from 3.5.0 — no re-sync required.

Bugfixes

  • execution/stagedsync: fix parallel-execution commitment consistency at step boundaries (#22111, #22135, #22147, #22094) by @awskii, @sudeepdino008 — a block straddling a step boundary left that step's commitment inconsistent with the account/storage/code domains, so published snapshots could mis-serve state-read RPCs (eth_getProof, debug_executionWitness) and, on a later run, wedge the Execution stage in a zero-progress loop with nothing logged. Closes #21992, #22101.
  • execution/stagedsync: fix log index reset and missing WebSocket notifications in parallel execution (#22155) by @Sahil-4555 — restores logs / newHeads subscription notifications and correct log indexing when executing in parallel.
  • execution/stagedsync: fix pruning in stage_custom_trace (#22052) by @sudeepdino008 — regenerated domains were never pruned and accumulated unbounded in the DB. Closes #22013.
  • cl/persistence: fix caplin historical state reconstruction loop at the Bellatrix transition (#22370) by @Sahil-4555 — a Caplin node could stop advancing at the Merge (Bellatrix) slot; pre-Merge blocks carry an all-zero execution payload header, and reconstruction now detects the zero block hash and skips the EL transaction lookup. Closes #22337.
  • cl/phase1/forkchoice: replace latestMessagesStore interning with a flat per-validator slice (#22355) by @lystopad — the prune scan walked the whole message map on every update and stalled GetHead past the attestation deadline. Closes #22351.
  • cl/antiquary: commit reconstructed state in bounded batches (#22348) by @awskii — committing up to 30 minutes of replayed beacon state in a single MDBX transaction could overflow libmdbx and crash on large (100+ GB) archive databases.
  • cl: bound caplin archive blob-column backfill so it can't wedge on Fulu (#22318) by @awskii — prevents an archive node from getting stuck while backfilling blob (data-column) sidecars.
  • cl, db/snapshotsync: caplin snapshot correctness — don't freeze empty block/state roots (#22323) and remove overlapping state snapshots on retire (#22317) by @awskii.
  • cl: allow boundary attestations while head state lags (#22251) by @domiwei — fixes attestation validation at epoch boundaries when the wall-clock slot has advanced but the head state briefly lags behind.
  • rpc/jsonrpc: gate debug_executionWitness on keys[] completeness and keep preimages for in-block-deleted accounts (#22320) by @awskii — avoids returning an incomplete witness.
  • rpc: remove the state-history check from block-data-only endpoints (#22073) by @Sahil-4555 — endpoints that only need block data no longer error on nodes pruned below the requested block's state history.
  • cmd/utils: allow snapshot reset on upgraded datadirs by restricting the table config (#22291) by @Sahil-4555 — snapshot reset failed to resolve the chain name on upgraded datadirs. Closes #22275.

Improvements

  • execution: disable gzip compression for the Engine API (#22369) by @taratorio — removes compression overhead on engine_* responses, lowering engine_getPayload / getBlobs latency.
  • p2p: re-resolve the STUN external IP at runtime (#22188) by @lystopad — with --nat=stun, a node whose public IP changes while running now re-resolves and re-advertises it instead of keeping the stale startup value.
  • db/version: relax the minor-version check in Supports (#22205) by @sudeepdino008 — a newer, backward-readable minor version within a supported major is now accepted, so the binary won't refuse newer minor-versioned files.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.5.0...v3.5.1


Erigon v3.5.0 — Tidal Tails — 2026-06-26

Erigon 3.5.0 is a major release headlined by parallel block execution becoming the default and initial support for Ethereum's upcoming Glamsterdam hardfork. It is a drop-in upgrade for 3.4.x users — no re-sync required; existing datadirs upgrade their prune configuration automatically (see Breaking Changes).

Key Features

  • Parallel block execution, on by default. Erigon now executes EVM transactions across multiple cores by default, using the Block-STM (software transactional memory) design pioneered by Aptos: transactions run optimistically in parallel and are re-validated against a multi-version state, re-executing only on conflict (#21591 by @mh0lt, closes #17630). Revert to serial with EXEC3_PARALLEL=false or --exec.serial.
  • Glamsterdam devnet support. Initial implementation of Ethereum's next hardfork: Block-Level Access Lists (EIP-7928), enshrined Proposer-Builder Separation / "Gloas" (EIP-7732) in Caplin, gas repricings (EIP-8037, EIP-7976, EIP-7981), larger contracts (EIP-7954), transfer logs (EIP-7708), and the eth/71 Block Access List wire protocol (EIP-8159). Devnet/testing only — not scheduled on mainnet or any public testnet.
  • debug_executionWitness. Stateless execution-witness generation (EIP-7928/8025) with reth-compatible output, for zkEVM and stateless clients (#20205 by @antonis19, #21629 by @awskii).
  • More aggressive history pruning by default. --prune.mode=full now follows the EIP-8252 reorg-retention window (~36 days / 262,144 blocks) — see Breaking Changes.
  • GraphQL API revival. Broad resolver coverage restored — queries, logs, call, sendRawTransaction, estimateGas, gasPrice, storage, and EIP-4844 fields.

Breaking Changes

--prune.mode=full: EIP-8252 retention window replaces pre-merge history-expiry

Full mode now retains state and block data for the last 262,144 blocks (~36.4 days), matching EIP-8252's REORG_RETENTION_WINDOW (#21342). Previously full mode pruned only pre-merge block data (EIP-4444 history-expiry) and kept the last 100,000 blocks of state history.

What changed:

Before After
State history retention last 100,000 blocks last 262,144 blocks
Block data retention pre-merge pruned, all post-merge kept (EIP-4444) last 262,144 blocks

Migration: existing datadirs upgrade automatically and silently. To keep the old "retain all post-merge block data" behavior, set --prune.distance.blocks=18446744073709551615.

Note: physical deletion of frozen snapshot files is not implemented yet (see #21306), so existing on-disk historical blocks persist for now, though the new cutoff is already recorded at the config level.

In practice, this means only freshly synced full nodes will have a reduced disk footprint.

--prune.mode=blocks: state history retention bumped to 262,144 blocks

--prune.mode=blocks keeps the same shape as before (all block data retained), but its state history retention also bumps from 100,000 to 262,144 blocks. --prune.mode=minimal is unchanged — both block and state history retain the 100,000-block window, deliberately sub-EIP-8252 for disk-constrained operators. See #21342 for details.


Single p2p listener: --p2p.allowed-ports removed, all eth versions multiplex on --port

Erigon now opens a single TCP listener on --port (default 30303) carrying every configured eth protocol version, instead of one listener per protocol on 30303/30304/30305. This fixes a discovery-DHT race that left inbound peers stuck at a fraction of --maxpeers for multi-protocol deployments: per-protocol ENRs collided under one Node ID, so only one survived in the DHT and peers dialed the wrong listener (#21335).

What changed:

Aspect Before After
Inbound peer ports 30303, 30304, 30305, … (one per eth version) 30303 only
--p2p.allowed-ports flag Picked one port per protocol from this list Removed — passing it now errors
--maxpeers semantics Per-protocol cap; actual ceiling ≈ N × maxpeers Honest total cap
Default --maxpeers 32 64 (compensates for the now-honest cap)
Enode database directory <datadir>/nodes/eth68, <datadir>/nodes/eth69, … <datadir>/nodes/eth

Migration:

  • Remove --p2p.allowed-ports=... from CLI args / config files; it is no longer recognised.
  • Firewall, Kubernetes Service, and monitoring rules that explicitly opened 30304/30305 can drop those entries — only --port is bound now.
  • If you previously lowered --maxpeers because you knew the per-protocol multiplication inflated the real ceiling, raise it back to the target total (the cap is now what the flag says).
  • First run after upgrade loses the warm peer cache in nodes/eth{68,69,…} — nothing on disk is deleted, the directories are simply no longer read; discovery rebuilds the peer set from bootnodes within a few minutes.

Standalone sentry binary (cmd/sentry) and --sentry.api.addr (remote sentry over gRPC) are unaffected — neither had the bug.


debug_trace* RPC: enableMemory / enableReturnData replace disableMemory / disableReturnData

Aligns Erigon with the execution-apis specification (ethereum/execution-apis#762) and Geth behavior.

What changed:

Field Before (Erigon) After (Erigon / Geth / Spec)
Memory in trace disableMemory (default: included) enableMemory (default: excluded)
Return data in trace disableReturnData (default: included) enableReturnData (default: excluded)

Both the key and its default changed: disable*enable*, and memory and return data are now excluded unless explicitly enabled — matching the spec and Geth.

Migration: memory and return data are now excluded by default. To include them, add the new opt-in key (omit it to keep the default):

  • Memory: { "enableMemory": true }
  • Return data: { "enableReturnData": true }

Affected RPC methods: debug_traceTransaction, debug_traceBlockByHash, debug_traceBlockByNumber, debug_traceCall.


Clique PoA consensus engine removed

The legacy Clique proof-of-authority engine has been removed (#20532 by @yperbasis). --chain=dev now runs on an embedded proof-of-stake consensus instead of Clique (#20451 by @mh0lt), matching how all live networks operate post-Merge. Networks or tooling that still depended on Clique are no longer supported.


Silkworm integration removed

The optional Silkworm C++ execution-backend integration and its --silkworm.* flags have been removed (#19662 by @canepat). Erigon uses its native Go execution engine exclusively.


Glamsterdam (Devnet Support)

3.5.0 adds an initial implementation of Ethereum's next hardfork — Glamsterdam (consensus-layer "Gloas" + execution-layer "Amsterdam") — for devnet testing and validation. It is not scheduled on mainnet or any public testnet, and these code paths are inert on production networks until an activation time is configured.

  • EIP-7928 — Block-Level Access Lists (BAL): records every account and storage slot a block touches, enabling deterministic parallel validation. Full builder, validator, and strict-validation support (#19627, #19656, #20602, #20776), plus the eth_getBlockAccessList RPC method (#19929) — by @mh0lt, @yperbasis, @Sahil-4555
  • EIP-7732 — Enshrined Proposer-Builder Separation (ePBS / "Gloas"): implemented in Caplin — execution-payload envelope, PTC, and builder payments (#18956) — with follow-up audit and fork-choice fixes (#21248, #21228) — by @domiwei
  • Gas repricings: EIP-8037 State Creation Gas Cost Increase (#19596), EIP-7976 calldata floor cost (#20613), EIP-7981 access-list cost (#20671) — by @taratorio
  • EIP-7954 — Increase Maximum Contract Size (#19624) — by @yperbasis
  • EIP-7843 — slot-number opcode (SLOTNUM), wired into Caplin block production and engine_forkchoiceUpdatedV4 (#20175) — by @yperbasis
  • Networking: eth/71 Block Access List exchange (EIP-8159, #20793, #20794, #20795) — by @mh0lt

Added

RPC

  • debug_executionWitness: generate stateless execution witnesses (EIP-7928/8025), with legacy and canonical output modes — the legacy format is reth-compatible — for zkEVM and stateless clients (#20205, #21371, #21518, #21629) — by @antonis19, @lupin012, @awskii
  • eth_capabilities: report the set of supported RPC methods (#20951) — by @lupin012
  • debug_setHead: rewind the chain head (#19577) — by @canepat
  • GraphQL substantially revived — transaction, logs, call, sendRawTransaction, estimateGas, gasPrice, and storage resolvers, plus EIP-4844 fields (#20389, #20916, #21219, #21379, #21060) — by @lupin012
  • testing_ namespace exposed via --http.api for engine/spec test harnesses (#20482) — by @lupin012
  • eth_simulateV1: per-call gas and result limits (#20232) — by @Sahil-4555

CLI & Operations

  • --exec.no-prune (disable all DB pruning), --exec.serial (force single-threaded execution), and --exec.* executor-tuning flags (#20915, #20853, #20797) — by @mh0lt
  • seg du (snapshot disk-usage analysis, #20104) and seg rm-blocks (remove latest block snapshots, #20554) — by @awskii, @sudeepdino008

Changed

RPC

  • WebSocket transport rewritten on coder/websocket, with overload protection, clean close frames, and bounded write timeouts (#20097, #20446, #20788, #20923) — by @lystopad, @lupin012, @Sahil-4555
  • Admission control: uniform 503 responses under load (#20303); optional response compression via libdeflate (#20665) — by @lupin012
  • Geth compatibility: debug_traceTransaction index format (#20210), trace_rawTransaction (#20448), debug_accountRange (#20057), null v,r,s for unsigned transactions (#21321) — by @lupin012
  • Performance: faster eth_getLogs (#20561), trace_block (#20182), eth_gasPrice (#19678), canonical-hash cache (#19173); engine_getPayload ~2.4× and getBlobs ~10× faster (#21615, #21606) — by @lupin012, @taratorio
  • trace_* returns an explicit error when an unsupported custom tracer is supplied (#21544) — by @lupin012

Networking & P2P

  • New eth/70 wire protocol: partial block receipt lists (EIP-7975, #19755) — by @yperbasis
  • All eth protocol versions now multiplex on a single TCP listener (see Breaking Changes, #21335) — by @lystopad
  • Peer hygiene / DoS hardening: cap and rate-limit inbound NewBlockHashes (#21557), enforce the 4096-hash limit on NewPooledTransactionHashes (#20577), drop peers failing blob KZG verification (#21421), and bound fan-out stream buffers (#20783) — by @yperbasis
  • Skip chain-specific bootnodes on genesis-hash mismatch (#19807); honour an explicitly empty --bootnodes (#20630) — by @yperbasis

TxPool

  • Proactive dormancy-based eviction of stale queued transactions (#19862) — by @lystopad
  • Transaction parsing migrated onto the shared execution/types transaction types (#19757); malformed EIP-7702 authorization tuples are now tolerated rather than rejected wholesale (#20809) — by @yperbasis

Caplin (Consensus Layer)

  • Unified Engine API client for standalone mode (#20035) — by @mh0lt
  • Fork-choice and ENR-stability fixes — recovery from a post-Gloas fork-choice stall and a persistent node key for stable ENR across restarts (#21228, #21276) — by @domiwei
  • Block production: give the EL builder a build window before stopping it, fixing near-empty proposed blocks (~0–2% gas) on otherwise-healthy validators (#21990) — by @lystopad

Storage & Performance

  • Off-heap Elias-Fano index building (#20640) and parallel commitment computation (#20805) — by @AskAlexSharov, @mh0lt
  • Transient-storage zero-write fast path (#20568) and opcode-scoped intern cache to eliminate duplicate unique.Make() (#20552) — by @Sahil-4555, @AskAlexSharov

Removed

  • Clique PoA engine (#20532 by @yperbasis) and Silkworm integration (#19662 by @canepat) — see Breaking Changes.
  • Unused hack (#20412), state (#20420), and diag (#21351) helper binaries — by @awskii, @AskAlexSharov

Security

  • --ethstats credentials are redacted from the startup command log (#20890) — by @MysticRyuujin
  • DoS-resistance limits on inbound P2P message volume (#20577, #21557) and bounded RPC/stream buffers (#20446, #20783) — by @yperbasis, @lupin012

Full Changelog: https://github.com/erigontech/erigon/compare/v3.4.4...v3.5.0


Erigon v3.4.4 — Splashing Saga — 2026-06-18

v3.4.4 is a bugfix release recommended for all users.

Bugfixes

  • execution/stagedsync: prune in-RAM overlay when execution unwind is a no-op (#21824, #21847) by @JkLondon — third fix for the post-reorg gas used mismatch.
  • caplin: serialize uint64 beacon API fields as JSON strings (#21805) by @BitWonka - Per the beacon-APIs spec, Uint64/Gwei fields must be serialized as JSON strings. Several Caplin response types were emitting them as JSON numbers, breaking spec-compliant clients. Fixes #20562.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.4.3...v3.4.4


Erigon v3.4.3 — Splashing Saga — 2026-06-02

v3.4.3 is a bugfix release recommended for all users.

Bugfixes

  • db/state: prune TemporalMemBatch overlay entries past the unwind point (#21538) by @JkLondon — second fix for the post-reorg gas used mismatch / state-leak some users still hit on v3.4.2. After a tip reorg a stale read in the in-memory overlay could return a write made inside the unwound txNum range, flipping an SSTORE from cold to warm gas pricing. Complements the #21157 diffset fix shipped in v3.4.2.
  • rpc: match Geth semantics in debug_getModifiedAccountsByHash / debug_getModifiedAccountsByNumber (#21507) by @lupin012 — corrects the block-range convention (exclusive start), now also reports contracts whose storage changed without an account change, and excludes touched-but-unchanged precompiles and self-destructed accounts.
  • node/cli: register --rpc.logs.maxresults in DefaultFlags so it takes effect via the CLI (#21389) by @lupin012 — the limit was documented in 3.4.0 but never wired into the flag set, so setting it on the command line had no effect; it now applies.

Improvements

  • execution/p2p, execution/engineapi: fail-fast engine_newPayload backward download when the gap exceeds the reorg limit (#21502) by @yperbasis — when a payload's parent is more than MaxReorgDepth blocks from the local head, the download short-circuits instead of fetching a header batch every slot, and logs the expected gap at INFO instead of WARN. The gap is still closed by the following fork-choice update.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.4.2...v3.4.3


Erigon v3.4.2 — Splashing Saga — 2026-05-22

v3.4.2 is a bugfix release recommended for all users.

Bugfixes

  • execution/stagedsync: find diffset by actually-executed hash on unwind (#21157) by @JkLondon — fixes a state-leak bug in unwindExec3 that surfaces as gas used mismatch / Cannot update chain head after a tip reorg whose unwound block deployed a contract via CREATE/CREATE2 to a counterfactual address (safe-wallets, EIP-1167 clone factories, ERC-4337 accounts, deterministic deployers). The unwind now walks every header at the height to find the diffset of the block actually executed, instead of assuming the (already-flipped) canonical hash matches.
  • rawdb: ignore invalid receipt cache transaction indexes (#21262) by @Sahil-4555

Improvements

  • db/state, ethconfig: bound domain merge; add --erigondb.domain.steps-in-frozen-file (#21148) by @wmitsuda

Full Changelog: https://github.com/erigontech/erigon/compare/v3.4.1...v3.4.2


Erigon v3.4.1 — Splashing Saga — 2026-05-11

Bugfixes

  • commitment: segfault fix - caused by branch slice returned by TrieContext.Branch (#21044) by @awskii

Full Changelog: https://github.com/erigontech/erigon/compare/v3.4.0...v3.4.1


Erigon v3.4.0 — Splashing Saga — 2026-04-28

Erigon 3.4.0 is a major update for node operators and validators, focused on stability, performance, and efficiency at ChainTip. It is a drop-in upgrade for 3.3.x users — no data migration or re-sync required.

Key Features

  • Fast restart on ChainTip: no more blocking indexing or pruning at startup; Caplin doesn't lose its download progress.
  • 4x smaller Chaindata (~20 GB): improves ChainTip speed. Available via re-sync, or by running ./build/bin/erigon seg step-rebase --datadir=<your_path> --new-step-size=390625 (takes ~10 seconds).
  • Historical eth_getProof: is no longer experimental. Recommended: 32 GB+ RAM. Re-sync with --prune.include-commitment-history to apply the latest data fixes.
  • New RPC endpoints: trace_rawTransaction, eth_getStorageValues, admin_addTrustedPeer, admin_removeTrustedPeer, flat tracers, engine_getBlobsV3.
  • Reduced impact on ChainTip performance: from RPC, background file merging, pruning, and optional heavy flags (--persist.receipts, --prune.include-commitment-history).

Breaking Changes

  • Minimum Go version: 1.25
  • --rpc.blockrange.limit=1_000 new limit. Maximum block range (end - begin) allowed for range queries over RPC. 0 - means unlimited. Default: 1_000
  • --rpc.logs.maxresults=20_000 new limit. Maximum number of logs returned by eth_getLogs, erigon_getLogs, erigon_getLatestLogs. 0 - means unlimited. Default: 20_000
  • --rpc.max.concurrency=0 new limit. Maximum number of concurrent HTTP RPC requests (HTTP admission control). 0 = use db.read.concurrency, -1 = unlimited (no admission control). Default: 0
  • p2p: switched to discv5. discv4 disabled by default.

Added

RPC Endpoints

  • trace_rawTransaction: execute and trace a raw signed transaction without broadcasting it (#19524)
  • eth_getStorageValues: batch fetch of multiple storage slots in a single call (#19442)
  • admin_addTrustedPeer / admin_removeTrustedPeer: manage trusted peers at runtime (#19413)
  • Call flat tracers (trace_call family): flat trace output format support (#18556)
  • engine_getBlobsV3: Engine API blob retrieval v3 (#18512)
  • trace_call: StateOverrides precompile support (#18401, #18492)

Consensus & Execution

  • Fusaka scheduled for Chiado (Gnosis Chain testnet) at slot 21 651 456, epoch 1 353 216, timestamp 1 773 653 580 (Mon 16 Mar 2026 09:33:00 UTC) (#19682)
  • Chiado bootstrap nodes updated to match the Lighthouse built-in Chiado network config (#19693)
  • Balancer hard fork for Gnosis Chain mainnet (#18122)
  • Amsterdam signer support and BAL non-determinism fix (#19434)
  • BAL selfdestruct net-zero fix (#19528)
  • Parallel execution fixes for block-access-list (BAL) workloads (#17319)
  • execution/vm: EIP-8024 (SWAPN, DUPN, EXCHANGE) opcodes implemented (#18670)
  • Pectra requests-hash validation: fix partial block receipt reconstruction when execution resumes from a snapshot boundary mid-block — resolves invalid requests root hash in header on mainnet re-sync at block 24966723 (#20452)

Caplin (Consensus Layer)

  • Persistent historical download — Caplin now persists and resumes historical beacon block downloads across restarts (#18320)
  • Discovery v5 enabled by default — discv5 is now the default peer discovery protocol (#18578)
  • cl/p2p, cl/sentinel: fix DISCV5 ENR missing IP when the discovery address is unspecified (#19585)
  • Fix missing attestations by using GossipSub for subnet peer coverage (#19523)
  • cl/gossip: fix conditions forwarding, ENR lifecycle, and epoch-mismatch — prevents false peer banning, reduces log flooding from redundant ENR updates, and guards against stale RANDAO committee computation (#20777)
  • cl/beacon: add single_attestation event topic support (#18142)
  • cl/beacon: set Eth-Consensus-Version header when versioned (#18377)

Changed

RPC Reliability

  • eth_getBlockReceipts: limit over-concurrency — prevents latency growth and out-of-memory (OOM) at high request rates (#19725)
  • debug_traceCallMany: fix global BlockOverrides and StateOverrides not being applied (#19547)
  • debug_traceCall: fix state and block overrides interaction (#18480)
  • eth_blobBaseFee: fix incorrect value returned (#18506)
  • eth_getBalance and others: fix block-not-found error for certain historical queries (#18457)
  • Block-hash canonicality check added to APIs that accept a block hash and state (#19356)
  • rpc: fix batch limit exceeded error to comply with the JSON-RPC spec (#18260)
  • trace_replayTransaction(): add stack info for TLOAD opcode (#19550)
  • eth_feeHistory: performance optimisation and pending block support (#19526, #19455)
  • debug_trace*: zero-alloc memory word encoding in JsonStreamLogger — eliminates per-word heap allocations and prevents OOM on large block traces (#20754)
  • prestateTracer: fix diff mode missing deleted accounts to match geth behaviour (#20775)
  • rpc/mcp: fix tools/call hanging indefinitely under DB load by switching the SSE context to non-blocking read-tx acquire (#20778)

TxPool

  • Zombie queued transactions: transactions exceeding MaxNonceGap are now evicted (#19449)
  • txnprovider/shutter: fix premature encrypted txn pool cleanup and peer drops (#18351)
  • txpool: cache pendingBaseFee for queue comparisons to reduce recomputation (#18341)

P2P

  • p2p/sentry: fix wrong OR in case statement for wit protocol messages (#19580)
  • p2p: better handling of RLP errors in wit (#19569)
  • discv4 disabled by default on mainnet (discv5 preferred) (#18640)

Snapshot & Storage

  • merge: prioritize Domain merge over History — 2x less disk space required, and less impact to ChainTip from history-merge (#19441)
  • merge: fix O(n²) InvertedIndex re-merge — eliminates quadratic time complexity during re-merge (#19680)
  • SequenceBuilder: avoids an intermediate Elias-Fano representation during sequence building and merge (#19552, #19567)
  • Faster startup: state-file index building deferred to reduce restart latency (#19583, #19407)
  • Graceful restart in history download: SpawnStageHistoryDownload now honours the stage context, so Ctrl+C during history download exits promptly instead of waiting for the download to finish (#20766)
  • DB integrity checks: time budget added so checks no longer run unbounded (#20714)
  • Commitment-history integrity: skip the integrity check when commitment history is disabled (#20835)
  • seg ls: report dictionary size and memory usage in the output (#20790)
  • anacrolix/torrent: fix peerconn panic on bad reads while serving peer requests (#20748)

Security

  • github.com/buger/jsonparser: bump 1.1.1 → 1.1.2 to address CVE-2026-32285 (HIGH, CVSS 7.5 — out-of-bounds read) (#20018)

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.10...v3.4.0


Erigon v3.3.10 — Rocky Romp — 2026-03-27

This release schedules Fusaka on Gnosis Chain mainnet at Tue 14 April 2026, 12:06:20 UTC and thus is mandatory for all Gnosis users. It is also recommended for all users in general.

Changes

  • Schedule Gnosis Fusaka (#20090) by @domiwei
  • txpool: fully discard pre-Osaka blob txns in best() (#20120) by @yperbasis
  • rpc: auto-convert legacy blob sidecar to v1 cell proofs after Osaka (#20087) by @domiwei
  • rpc: add blockRangeLimit param for API works on blocks range (#19614) by @lupin012
  • cl: fall back to local head state when remote checkpoint sync fails (#20003) by @domiwei
  • cl: fix fork choice block validation and error propagation (#19927) by @domiwei
  • cl: re-enable voluntary_exit gossip topic subscription (#19764) by @Giulio2002

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.9...v3.3.10


Erigon v3.3.9 — Rocky Romp — 2026-03-09

This release schedules Fusaka on Chiado on Mon 16 March 2026, 09:33:00 UTC and thus is mandatory for all Chiado users.

Changes

  • fix(txpool): evict zombie queued txns exceeding MaxNonceGap (cherry-pick #19449 → release/3.3) (#19591) by @Giulio2002
  • cl/sentinel: fix DISCV5 ENR missing IP when discovery address is unspecified (#19647) by @lystopad
  • rpc: accept only canonical hash for block receipts (#19649) by @canepat
  • Schedule Fusaka for Chiado (#19681) by @yperbasis
  • cl: amend Chiado bootstrap nodes (#19692) by @yperbasis

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.8...v3.3.9


Erigon v3.3.8 — Rocky Romp — 2026-02-20

Changes

  • New Chiado boot nodes (cherry-pick #18867) (#19241) by @sudeepdino008
  • eth_getLogs: receipts availability check to be aware about --persist.receipts and --prune.mode=minimal (#19226) by @AskAlexSharov
  • txnprovider/shutter: fix decryption keys processing when keys do not follow txnIndex order (#18951) (#18959) by @taratorio
  • execution: fix Chiado re-exec from genesis (#18887) by @yperbasis

Bugfixes

  • execution/tests: minor fix chainmaker add withdrawals in shanghai (#18886) by @taratorio
  • Reduce impact of background merge/compress to ChainTip (#18995) by @AskAlexSharov
  • fix(caplin): Fixes for DataColumnSidecar (#18268) (#19003) by @taratorio
  • rpc: bound checks in receipts cache V2 and generator (#19046) by @canepat
  • execution/execmodule: fix unwinding logic when side forks go back in height (#18993) (#19063) by @taratorio
  • p2p: fix nil pointer crash with --nodiscover (#19056) by @sudeepdino008
  • rpc: add check on latest executed block (#19133) by @canepat
  • protect History from events duplication (#19230) by @AskAlexSharov

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.7...v3.3.8


Erigon v3.3.7 — Rocky Romp — 2026-01-30

P2P stability. Prune performance.

Changes

  • prune: remove early-exit based on DirtySpace() (#18787) by @AskAlexSharov
  • execution: fix commitment state key txNum when last block tx is at step boundary (#18858) by @taratorio
  • p2p deadlock fix (#18862) by @Copilot
  • Forward compatibility: Fixed index building for v0 snapshot format (#18824) by @eastorski
  • Backward compatibility: Add --v5disc alias (#18785) by @anacrolix
  • Show the default P2P discovery bools in --help (#18819) by @anacrolix

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.4...v3.3.7


Erigon v3.3.4 — Rocky Romp — 2026-01-23

v3.3.4 is a bugfix release recommended for all users.

Changes

  • Fix for missing rcache at stepBoundary (#18698) by @sudeepdino008
  • execution/stagedsync: port --experimental.always-generate-changesets flag for gas repricing benchmarks (#18733) by @taratorio
  • execution: add --fcu.timeout and --fcu.background.prune flags (#18723) by @taratorio
  • Not needed collector erased in prune domains (#18665) by @JkLondon
  • Forward compatible snapshots format (#18746) by @eastorski

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.3...v3.3.4


Erigon v3.3.3 — Rocky Romp — 2026-01-14

v3.3.3 is a bugfix release recommended for all users.

Fixes

  • CL: Fix incorrect committee count in process_attestation (#18316) by @domiwei
  • CL: Fix for periodic retry of not-ready response (#18376) by @taratorio
  • Shutter: fix premature encrypted txn pool cleanup bug and peer drops (#18264) by @taratorio
  • Half block exec fix in receipts (#18426, #18505) by @sudeepdino008
  • p2p: resolve security vulnerability (#18650) by @yperbasis

Improvements

  • p2p: Turn on discovery v5 by default (#18639) by @anacrolix

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.2...v3.3.3


Erigon v3.3.2 — Rocky Romp — 2025-12-13

Gnosis hardfork support.

Changes

  • rpc: fix panic on GetEthV1BeaconBlobs (#17992) (#18232) by @domiwei
  • rpc: fix invalid key error code in eth_getStorageAt (#18238) by @canepat
  • cl/beacon: add single_attestation event topic support (#18142) (#18277) by @domiwei
  • Gnosis Balancer (#18282) by @mh0lt
  • bittorrent: torrent excessive wantPeers event fix (#18256) by @anacrolix

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.1...v3.3.2


Erigon v3.3.1 — Rocky Romp — 2025-12-07

  • We have new Docs and HelpCenter: https://docs.erigon.tech/
  • Support of historical eth_getProof (#12984). It requires --prune.include-commitment-history flag.

RPC

  • rpc: fix txpool_content crash: unknown (#18120) by @canepat

CL

  • Caplin: Simplified peer refreshing (#18123) (#18152) by @domiwei

TxPool

  • txpool: remove double PopWorst() in pending pool overflow (#18159) by @AskAlexSharov

Sync

  • Torrent client fixes (#18179) by @anacrolix

Full Changelog: https://github.com/erigontech/erigon/compare/v3.3.0...v3.3.1


Erigon v3.3.0 — Rocky Romp — 2025-11-27

Added

  • Support of historical eth_getProof (#12984). It requires --prune.experimental.include-commitment-history flag.
  • Look our new Docs and HelpCenter: https://docs.erigon.tech/

RPC Endpoints

  • eth_simulateV1: Complete implementation of Ethereum simulation API with support for state overrides, blob transactions, block overrides, and historical state roots (#15771)
  • eth_createAccessList: StateOverrides parameter support (#17653)
  • Support for eth_call with blockOverrides (#17261)
  • trace_filter: Block tags support (#17238)
  • debug_traceTransaction: Self-destruct operation validation (EIP 6780) (#17728)

Consensus & Execution

  • EIP-7928: BlockAccessList type support (#17544)
  • EIP-7934: EstimateGas capped by MaxTxnGasLimit in Osaka (#17251)
  • EIP-7702 transaction support in (r *Receipt) decodeTyped (#17412)
  • Rewrite bytecode support for post-Merge blocks (#17770)

Caplin (Consensus Layer)

  • Get blobs support (Fusaka compatibility) (#17829)

Changed

RPC Improvements

  • eth_getTransactionReceipt: Pre-Byzantium transaction handling (#17479, #17509)
  • eth_estimateGas: Improved handling with StateOverrides (#17914, #17295)
  • debug_traceCall: System contract execution support (#17339)
  • Blob transaction and blob base fee override support (#17313)

Execution Engine

  • Experimental Parallel Exec (#16922)
  • MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP for Gnosis (#17501)
  • Reduce goroutines amount produced by BitTorrent library (#17765)
  • Up base image to Go 1.25-trixie (#17837)

Removed

  • PoW mining was removed in #17813. The --chain=dev mode now uses an embedded PoS consensus layer (Caplin) with deterministic validators instead of Clique. See docs/DEV_CHAIN.md for usage.
  • Holesky network support removed (#17685)
  • eth/67 protocol support removed (#17318)
  • SkipAnalysis VM optimization removed (#17217)

Full Changelog: https://github.com/erigontech/erigon/compare/v3.2.2...v3.3.0


Erigon v3.2.3 — Quirky Quests — 2025-11-25

Changes

  • Caplin: add getBlobs support (fusaka) (#17840) by @Giulio2002

Full Changelog: https://github.com/erigontech/erigon/compare/v3.2.2...v3.2.3


Erigon v3.2.2 — Quirky Quests — 2025-11-03

v3.2.2 schedules Fusaka on Ethereum mainnet on December 3, 2025 at 09:49:11pm UTC. Thus it is a mandatory update for all Ethereum mainnet users.

New features

  • Schedule Fusaka on Ethereum mainnet in #17736 by @yperbasis
  • Tool to fetch and recover blobs from a remote beacon API in #17611 by @Giulio2002

Full Changelog: https://github.com/erigontech/erigon/compare/v3.2.1...v3.2.2


Erigon v3.2.1 — Quirky Quests — 2025-10-20

v3.2.1 is a bugfix release recommended for all users, especially validators.

Fixes

  • Fix validators producing bad blocks on Hoodi in #17487 by @mh0lt
  • RPC: fix "insufficient funds for gas * price + value" error in traces retrieval for a specific block (Issues #16909, #17232) in #17523 by @antonis19
  • RPC: fix no changes and filter not found in eth_getFilter* (Issue #17246) in #17350 by @canepat
  • RPC: debug_traceCall fix avoid to trace sysContract (Issue #17220) in #17360 by @lupin012
  • CL: fix initial previous_version in fork_schedule (Issue #17262) in #17331 by @domiwei

Improvements

  • Ethereum mainnet default block gas limit is raised to 60M in #17321 by @yperbasis
  • CL: Allow blob requests after Fusaka in #17500 by @domiwei

Full Changelog: https://github.com/erigontech/erigon/compare/v3.2.0...v3.2.1


Erigon v3.2.0 — Quirky Quests — 2025-10-02

Erigon 3.2.0 has a complete implementation of Fusaka and schedules it on the test nets (#17197):

  • Holesky on Wednesday, 1 October 2025 08:48:00 UTC
  • Sepolia on Tuesday, 14 October 2025 07:36:00 UTC
  • Hoodi on Tuesday, 28 October 2025 18:53:12 UTC

Fixes

  • Re-org/unwind fixes (#17105, #17165) by @taratorio
  • RPC: Fixes to eth_getProof (#16220, #16251, #16564, #16606, #16687) by @awskii
  • tracer: fix prestates for EIP7702 transactions (#16497) by @nebojsa94

Improvements

  • New EL block downloader (#16270, #16673) by @taratorio
  • Caplin p2p improvements (#16719, #16995) by @Giulio2002
  • EVM: MODEXP precompile performance improvements (#16579, #16583, #16396, #17151) by @chfast & @yperbasis
  • execution: more accurate bad block responses (#16994) by @taratorio
  • Block builder: improve txpool polling (#16412) by @taratorio
  • execution/stagedsync: handle sync loop block limit exhaustion (#16268) by @taratorio
  • RPC: Apply batch limit to WebSocket/IPC connections (#16255) by @grandchildrice
  • RPC: Estimate gas align to geth (#16397) by @lupin012
  • snapshotsync: add support for --snap.download.to.block (#16938) by @taratorio

New features

  • Complete Fusaka implementation (#16183, #16185, #16186, #16187, #16184, #16391, #16401, #16207, #16420, #16428, #16494, #16457, #16644, #16928, #16945, #17060, #16989, #17076, #17169) by @taratorio, @yperbasis, @Giulio2002 and @domiwei
  • Implement eth/69 (#15279, #17186, #17171) by @shohamc1
  • RPC: implement new eth_config spec (#16218, #16410) by @taratorio
  • RPC: impl admin_RemovePeer (#16292) by @lupin012

Full Changelog: https://github.com/erigontech/erigon/compare/v3.1.0...v3.2.0