Skip to content

Latest commit

 

History

History
913 lines (621 loc) · 60.1 KB

ChangeLog.md

File metadata and controls

913 lines (621 loc) · 60.1 KB

Erigon v3.7.0 — TBD

Breaking Changes

  • rpc: eth_getFilterLogs now runs a historical query from the criteria stored by eth_newFilter; it neither drains the live-log queue read by eth_getFilterChanges nor refreshes the filter expiry deadline. Historical queries enforce rpc.blockrange.limit, rpc.logs.maxresults, and rpc.logs.querylimit; a filter can return -32602 when one of these limits is exceeded, and queries may surface initialization, pruned-history, or not-yet-executed errors. This can be a breaking change (#23296) — by @taratorio
  • rpc: eth_newFilter and eth_subscribe("logs") now reject criteria exceeding the per-filter rpc.subscription.filters.maxaddresses or rpc.subscription.filters.maxtopics limit with -32602 instead of silently capping them. This can be a breaking change for nodes that configure either limit above 0; both limits default to 0 (unlimited) (#23296) — by @taratorio
  • rpc: eth_newFilter and eth_subscribe("logs") now reject criteria with more than four topic positions with -32602 instead of accepting a filter that cannot match any Ethereum log. This can be a breaking change (#23296) — by @taratorio
  • rpc: the callTracer withLog option of debug_traceTransaction and debug_traceBlock* now numbers a log's index over the whole block instead of restarting at 0x0 on every transaction, matching geth's callTracer and the index the same log carries in eth_getLogs and in its receipt. In debug_traceCallMany the calls of one bundle now share that count instead of each restarting, while every bundle still starts at zero, since a bundle is a simulated block of its own; debug_traceCall is unchanged. On a node whose receipt domain has no record for a transaction, eth_getTransactionReceipt and eth_getLogs now return an error instead of a receipt whose log index had underflowed. This can be a breaking change for clients that join trace logs to eth_getLogs indices (#23797) — by @lupin012

Added

  • --witness.cache.blocks, --witness.cache.head-capture, and --witness.cache.maxmb enable an eager in-memory cache of recent-block legacy debug_executionWitness results, keyed by block hash. Head-capture mode lets a minimal node (no commitment-domain history) serve witnesses for the last N head blocks cache-only — a miss returns out-of-window rather than recomputing from history. New witness_cache_* metrics track hits, misses, builds, and resident entries. Embedded RPC only — by @awskii

Changed

  • rpc: live logs returned by eth_getFilterChanges and eth_subscribe("logs") now include blockTimestamp, matching eth_getLogs and eth_getFilterLogs (#23296) — by @taratorio
  • node: RPC HTTP gzip compression moved from the cgo-based go-libdeflate to the pure-Go klauspost/compress, and fully buffered (one-shot) responses now compress at BestSpeed (level 1) instead of level 6; streaming responses were already at BestSpeed. Large one-shot responses gain ~10-14% latency and roughly half the compression CPU, in exchange for slightly larger compressed bodies (+2-8% wire size — relevant for operators who pay for egress). Also removes the libdeflate compressor pool and its libdeflate_pool_* metrics, eliminating the cgo leak class fixed in #22700 (#22882) — by @lupin012
  • rpc: erigon_getLogs and erigon_getLatestLogs renamed the log field timestamp to blockTimestamp, matching the name eth_getLogs and the other log-returning methods already use. Clients that read the timestamp key must be updated (#23337) - by @Sahil-4555

Erigon v3.6.1 — Upstream Underbelly — 2026-09-09

v3.6.1 is a bugfix and security release recommended for all users. It fixes a downloader regression that could silently replace a valid local snapshot (#23859), a peer-ban bypass that let a banned Caplin peer reconnect immediately (#23866), an index-build defect that could leave stale bits in a recsplit index after a salt-collision retry (#23858), and bumps google.golang.org/grpc for two HIGH-severity CVEs (#23888). It is a drop-in upgrade from 3.6.0 — no re-sync required.

Bugfixes

  • db/downloader: keep local snapshot data once the initial download is complete (#23859) by @AskAlexSharov — a locally-differing .seg that no longer matched its .torrent was silently replaced even after preverified.toml existed; it is now kept and registered for seeding, with a warn-level log when a mismatched file is still replaced. Fixes #21522.
  • cl/sentinel: honour the peer ban on inbound connections (#23866) by @lystopad — BanStatus was only consulted on outbound dials, so a peer already three-strike banned still received a fresh handshake on every inbound reconnect; one Gnosis archive node logged 13,827 failed handshakes against 1,638 banned peers in ninety minutes. Fixes #23605.
  • db/recsplit: reset the Golomb-Rice encoder, Elias-Fano structure, and existence filter on ResetNextSalt (#23858) by @AskAlexSharov — retrying an index build after a salt collision left the failed attempt's encoded bits and existence-filter data in place, corrupting the rebuilt index.
  • sd: lock changesetMu on every DomainPut, not only on field reads (#23680) by @AskAlexSharov — the mutex guarded reads of change-set state but not the writes that mutate it, leaving a data race under concurrent commits.
  • rpc/jsonrpc: report base-fee sub-pool transactions as pending (#23647) by @lupin012 — transactions parked in the base-fee sub-pool were reported as queued instead of pending, understating the pending count seen by clients and tooling.
  • cl/beacon: report a syncing node as 503, not 500 (#23608) by @lystopad — the committee-subscription and duties endpoints answered 500 Internal Server Error while starting up or catching up, where beacon-APIs specifies 503 CurrentlySyncing; alerting on 500s no longer fires on ordinary startup or resync.
  • cl: seed the ENR custody group count instead of an empty entry (#23591) by @lystopad — nodes advertised an empty PeerDAS custody-group-count ENR entry, making them unselectable as custody peers by counterparties that filter on it.

Security

  • p2p/discover: require a proven bond before accepting a PING endpoint statement (#23639) by @yperbasis — an unbonded PING could feed an arbitrary claimed address into a node's local endpoint predictor; a statement is now only accepted once a recent PONG has proven return reachability.
  • build: bump google.golang.org/grpc to v1.83.2 (#23888) by @lystopad — CVE-2026-84304: fragmented HTTP/2 DATA frames were each stored as a separate recvMsg, letting an unauthenticated peer exhaust heap memory with many one-byte frames across concurrent streams. CVE-2026-84445: an xDS gRPC server panicked on a request missing both :authority and Host; not reachable in Erigon, which never calls xds.NewGRPCServer(). main already carries v1.83.2 (#23267) and needs no code change, only this note.

Improvements

  • cl, cmd/utils: derive the data-column retention window from the chain config instead of a hardcoded constant, guarding the derivation against zero and overflow inputs (#23851, #23863) by @lystopad — mainnet retention grows from 131072 to 131104 slots (one extra epoch of alignment slack); Gnosis and Chiado drop from 131072 to 65552.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.6.0...v3.6.1


Erigon v3.6.0 — Upstream Underbelly — 2026-08-24

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-running minimal and 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 convert command 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 .bt pivot 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_newPendingTransactionFilter must poll within the timeout or recreate the filter. Configure --rpc.subscription.filters.timeout, or set it to 0 to disable eviction. New subscriptions_active and subscriptions_*_total metrics 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 include result: null alongside error (#21985, #21922) — by @lupin012

Added and Changed

RPC

  • With --prune.include-commitment-history, eth_getWitness now builds and verifies a lean witness for any block within retained history (#22099) — by @awskii
  • eth_fillTransaction fills 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 @lupin012
  • eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, eth_getProof, and eth_getStorageValues now default an omitted block parameter to latest (#21586) — by @MysticRyuujin
  • trace_block and trace_replayBlockTransactions can include beacon-withdrawal balance changes through the optional IncludeWithdrawals trace 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.distance accepts keep-all, and --prune.distance.blocks accepts keep-post-merge and keep-all. Receipt and commitment-history caches have independent --prune.*.distance windows; 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 --rebuild rebuilds 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 --config now applies to subcommands; operators with unusual invocation patterns should smoke-test them (#22130, #22546) — by @AskAlexSharov, @yperbasis, @lupin012

Full Changelog: https://github.com/erigontech/erigon/compare/v3.5.5...v3.6.0


Erigon v3.5.5 — Tidal Tails — 2026-08-11

v3.5.5 is a bugfix and security release recommended for all users, and especially for block proposers and archive-node operators. It fixes a panic on every Fulu blinded-block submission (#23150), a payload frozen before its slot began under an external consensus layer (#23102), and wrong logIndex values on archive nodes (#22951). It is a drop-in upgrade from 3.5.4 — no re-sync required.

Bugfixes

  • cl/beacon: handle an empty Fulu builder response (#23150) by @domiwei — Builder API v2 answers a successful Fulu blinded-block submission with 202 Accepted and no body, so the builder client returned all-nil and publishBlindedBlocks dereferenced the nil payload. The beacon router installs no middleware.Recoverer, so the validator client saw only a dropped connection and nothing reached the Erigon log. Fixes #22598.
  • execution: build payloads until the slot they are for (#23102) by @lystopad — the builder's time budget ran from when payload attributes arrived rather than from the payload timestamp, so a consensus layer sending attributes well ahead of the slot got a payload frozen before that slot began. The budget now derives from the timestamp, floored at the old value and capped at two slots. Non-proposing nodes and Caplin are unaffected.
  • db/state: route receipt-domain reads through the overlay DomainReader (#22951) by @Sahil-4555 and @mh0lt — a block admitted through the block overlay read its receipt metadata from the committed tx, where a history miss fell back to GetLatest and returned the previous writing block's final log count. The wrong logIndex was then cached in the RPC layer. Affected v3.5.1–v3.5.4. Fixes #22106.
  • db/state: roll back receipt domains on an in-RAM reorg unwind (#23064) by @MoonBoi9001 — the in-memory unwind path restored a hand-written list of the four state kinds that existed when it was written and never gained the receipt counters added later, so it left the abandoned blocks' values in place. It now walks every state kind, as the disk path does.
  • db/downloader: allow seeding caplin state snapshots with a nil global type (#22980) by @lystopad — a node upgraded in place from a recent release/3.4 build logged nil ptr after parsing file: caplin/…-NextSyncCommittee.seg and silently stopped seeding its caplin state snapshots.

Security

  • build: bump golang.org/x/text to v0.39.0 (#23178) by @lystopad — CVE-2026-56852: infinite loop in unicode/norm on invalid UTF-8. Reachable from the downloader's HTTP/3 webseed path, and the only advisory here that govulncheck reports as called.
  • build: bump golang.org/x/net to v0.56.0 (#23178) by @lystopad — CVE-2026-46600: panic parsing a malformed SVCB or HTTPS DNS resource record.
  • build: bump github.com/quic-go/webtransport-go to v0.11.1 (#23178) by @lystopad — CVE-2026-57497: memory exhaustion from unbounded buffering of unknown capsules. Not reachable in Erigon: no WebTransport libp2p transport is registered.
  • build: bump github.com/go-chi/chi/v5 to v5.3.1 (#23178) by @lystopad — CVE-2025-69725 (open redirect in RedirectSlashes) plus three middleware.RealIP IP-spoofing advisories. Not reachable in Erigon: none of chi's middleware is used.

Improvements

  • build: revert the go-eth-kzg verifier optimization (#23177) by @yperbasis — release/3.5 pinned crate-crypto/go-eth-kzg to an Erigon fork carrying an upstream change that is still an unmerged draft. This restores the released upstream v1.5.0 while the correctness concerns are investigated.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.5.4...v3.5.5


Erigon v3.5.4 — Tidal Tails — 2026-07-28

v3.5.4 is a bugfix release recommended for all users, and especially for operators running the RPC daemon with response compression enabled — archive nodes and high-traffic RPC endpoints — where a native-memory leak in the gzip path could grow by ~9-15 GiB/day (#22700). It is a drop-in upgrade from 3.5.3 — no re-sync required.

Bugfixes

  • node: fix a native (C-allocated) memory leak in the RPC gzip path (#22700) by @AskAlexSharov — the libdeflate.Compressor was pooled in a sync.Pool whose GC-evicted entries never had Close() called, leaking the C context (~9-15 GiB/day on an archive node). Replaced with a bounded channel pool that closes compressors on overflow. Fixes #22672.
  • cmd: expand a leading ~/ (or ~\ on Windows) and $VAR in --datadir for the cobra-based binaries (#22785) by @lystopad — rpcdaemon and the other cobra commands previously used the raw path, so a tilde/env-prefixed --datadir was not resolved the way the main erigon binary resolves it. Fixes #14629.

Improvements

  • build: update google.golang.org/grpc to v1.82.1 (#22690) by @AskAlexSharov — brings release/3.5 in line with release/3.6 and main.

Full Changelog: https://github.com/erigontech/erigon/compare/v3.5.3...v3.5.4


Erigon v3.5.3 — Tidal Tails — 2026-07-23

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

Bugfixes

  • execution/stagedsync: restore log/receipt notifications for mid-block resumed blocks (#22648) by @lupin012 — backports the notification-completeness half of #22235. After the earlier ReceiptDomain fix, both executors still gated RecentReceipts.Add on a stale isPartial/startTxIndex==0 flag, so a block resumed mid-block never emitted a correct receipt/log notification over eth_subscribe("logs"/"newReceipts"). Both executors now reconstruct the resumed block's prefix receipts and gate on a receiptsComplete field.
  • rpc: return a JSON-RPC error instead of panicking on a null transaction in the trace path (#22668) by @AskAlexSharov — trace_transaction / trace_filter could dereference a nil txn when TxnByIdxInBlock resolves a txIndex whose body hasn't materialized yet at the chain tip. Fixes #22643.
  • rpc: fix the handleBatch deadlock (#22459) by @yperbasis — a filtered JSON-RPC batch could wedge on wg.Wait() and time the request out. Fixes #22424.
  • types: reject legacy transactions wrapped in a typed (EIP-2718) envelope (#22525) by @taratorio.
  • types: reject an empty-string element in RLP transaction-list decoding (#22524) by @taratorio.
  • cl/phase1/stages: fix uint64 underflow in the "Downloading Execution History" progress log (#22462) by @lystopad — once the live EL head advanced past the frozen initial progress, the toprocess subtraction wrapped to ~2⁶⁴ and produced a garbage ETA. Fixes #22455.
  • cl/phase1/stages: guard the "[Caplin] Forward Sync" progress log against slot under/overflow (#22465) by @lystopad — the same unguarded-subtraction / time.Duration-overflow pattern on the forward-sync line.

Improvements

  • rpc: make the eth_getLogs per-position address/topic limit configurable via --rpc.logs.querylimit (#22477) by @lupin012 — replaces the hardcoded 1000-entry limit; default 1000 preserves current behaviour, 0 = unlimited.
  • cl/phase1/stages: route the history-download and forward-sync progress ETAs through the shared, overflow-safe utils.ETA helper (#22493, #22512) by @lystopad.

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


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

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

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