Releases: NethermindEth/nethermind
Release list
v2.0.0-rc
Release notes
623 changes since 1.39.3 from 39 contributors.
Nethermind 2.0.0 is a hardened, faster, archive-capable execution client, built for Ethereum, its L2s, and beyond.
New Archive Layout
Running an archive node used to mean a heavyweight, separate database and a lot of disk. Nethermind 2.0.0 puts archive-grade history on the flat state database (#12943), and that changes the trade-offs:
- No separate archive database, no new protocol. History is built up by ordinary syncing — the same node, the same peers. You don't run a different node type or transfer data between nodes.
- Header-verifiable. The state root at any retained height can be reconstructed from the flat rows and checked against that block's header. Historical answers are provable, not best-effort.
- You choose how much history you pay for. Three shapes, one feature:
- Full archive — retain every historical state.
- Rolling window (
FlatDb.HistoryRetentionBlocks) — answer historical queries for the last N blocks and reclaim older state. - Per-address (
FlatDb.HistorySliceAddresses=…) — retain deep history only for the contracts you query while keeping the general window small.
- Correct by design at the edges. Below the retained floor, reads fail closed with an explicit “not retained” response instead of silently answering from live state.
- A competitive footprint. A full Ethereum mainnet archive is approximately 2.1 TB today, substantially smaller than legacy trie/hash-based archives.
The upshot: teams that previously ran a full archive “just in case” can instead use a bounded window—or retain deep history only for selected contracts—to reduce disk and operational overhead without giving up the historical answers they need.
How much disk to expect now
Measured on live nodes, mainnet at ~block 25.88M (2026-09-01). Numbers grow slowly as the chain grows — treat them as "today's floor," not a fixed ceiling.
| Configuration | Retained history | Execution DB | Total node disk | Provision |
|---|---|---|---|---|
| Full mainnet archive | Historical state from genesis; historical proofs are served only close to the chain tip | ~2.1 TB | ~2.3 TB | 3 TB |
| Windowed mainnet archive | ~2 months of state and ~1 year of blocks; block pruning measurement pending | ~0.9 TB (926 GB; provisional) | ~1.0 TB (provisional) | 1.5 TB |
| Per-address mainnet archive | Deep history for 6 of the busiest contracts + a 256-block base | ~1.8 TB | ~1.9 TB | 2.5 TB |
| Full Gnosis archive | Historical state from genesis; historical proofs are served only close to the chain tip | ~0.94 TB (941 GB) | ~0.94 TB | 1.5 TB |
Current measured saving: retaining ~2 months of state while keeping ~1 year of blocks takes the execution DB from ~2.1 TB → ~0.9 TB — roughly 60% less disk. The figure for a fully pruned ~2-month block window is still being measured.
Per-address disk scales with how active your chosen contracts are — pick lower-traffic contracts and it drops sharply. It's a "keep deep history cheaply" tool.
Rule of thumb for planning:
- Need full mainnet history → provision 3 TB (2.2 TB DB + CL + room to grow).
- Only need recent history → the current measurement is ~0.9 TB for ~2 months of state with ~1 year of blocks retained. The fully pruned ~2-month figure is pending; size your window with
HistoryRetentionBlocks. - Need forever-history for a few specific contracts → budget by those contracts' activity, plus a small base window.
Performance
Flat state at chain tip
A 12-hour Ethereum mainnet measurement across six fully synced, warm nodes found the flat state layout on 2.0.0-rc to be the fastest configuration at chain tip on both hardware tiers. Against the same-tier 1.39.2 half-path baseline, flat processed blocks at 1.80× the throughput on 8 vCPU standard machines and 2.55× on 16 vCPU premium machines.
The comparison used three configurations—2.0.0-rc flat, 2.0.0-rc half-path, and 1.39.2 half-path—on each hardware tier, all over the same 12-hour window. Each node contributed 2,880 samples and processed 3,587–3,588 blocks, with zero bad blocks, zero sample gaps, and zero restarts. RAM, storage, region, and OS image were identical; core count was the only hardware difference between tiers.
Mean block processing time at chain tip
The largest improvement is in tail latency, not the typical block. Flat's p99 was 351 ms on standard and 208 ms on premium—only 4.3× and 4.2× its own median. The 1.39.2 baseline reached 1,849 ms and 1,646 ms at p99, or 21× and 24× its median. 2.0.0-rc half-path also substantially reduced the tail, showing that part of the gain comes from 2.0.0-rc generally and part from the flat layout.
Median, p90, and p99 block processing time
Flat also benefited most from additional cores: mean processing time improved from 96.5 ms on 8 vCPU to 57.6 ms on 16 vCPU, a 1.67× improvement. The equivalent gain was 1.13× for 2.0.0-rc half-path and 1.18× for 1.39.2 half-path.
The trade-off is initial sync time. Flat took 192.0 minutes on standard and 128.6 minutes on premium—about 75% longer than the same-tier 1.39.2 half-path baseline. Once synced, it delivered the best and most consistent chain-tip performance measured here; 2.0.0-rc half-path was the fastest configuration to reach tip.
Time to sync to chain tip
Faster eth_call under load
Across the completed benchmark cells, 2.0.0-rc answers the internal 497-record eth_call corpus 15–27% faster than 1.39.3, with byte-identical responses on all 497 records in every layout and architecture measured. It also sustains 22–25% more heavy high-gas multicalls per second.
Both versions ran against the same mainnet snapshot at block 25,490,000, using the same seeded request sequences and runner, interleaved over overlay mounts on pristine snapshots. Figures come from the run-rpc-benchmarks workflow. These measurements preserve the tested build label, 2.0.0-rc.
Latency on the 497-record corpus
The corpus represents heavy simulation traffic: every record carries state overrides, and the median request is about 331 KiB. Each arm replayed 20,000 seeded requests at 100 requests per second after a discarded 60-second warm-up.
eth_call latency percentiles, 1.39.3 vs 2.0.0-rc
The gain widens into the tail on the flat layout: amd64 p99 drops 29.5%, from 104.79 ms to 73.92 ms. This reflects real work saved rather than scheduling luck—CPU time per request falls 25.5% on amd64 flat and 17.7% on arm64 flat. Paired per-record medians agree with the aggregate: −20.1% on amd64 (95% CI −20.6% to −19.6%; 451 of 497 records faster) and −25.2% on arm64 (95% CI −25.7% to −24.3%; 476 faster).
Throughput
Closed-loop throughput was measured over 40 passes across all 497 records at concurrency 16. Compared with 1.39.3, 2.0.0-rc delivered 29.6% more throughput on amd64 flat, 36.4% more on arm64 flat, and 20.6% more on amd64 halfpath.
Closed-loop eth_call throughput, 1.39.3 vs 2.0.0-rc
Heavy high-gas multicalls
Three EthCallChaos high-gas Multicall3 aggregate3 scenarios—roughly 34 KB payloads carrying about 500 ms of EVM work each—ran in isolation at 100 and 300 requests-per-second targets, in ABBA order, with 512 virtual users. Both versions saturated at both target rates, so achieved throughput is the relevant measure; p99 values in the 19–37 second range represent queue depth, not call latency.
Heavy high-gas Multicall3 capacity, 1.39.3 vs 2.0.0-rc
Repeats within a version varied by about 1 request per second, against a between-version gap of about 5 requests per second on flat and 3.5 on halfpath. Every multicall cell completed with zero failed requests, while the accompanying light eth_call contract mix remained sub-millisecond on both versions.
Results summary
| Cell | Architecture | Layout | Mean latency | Paired median | Throughput | Response parity |
|---|---|---|---|---|---|---|
| 497-record corpus | amd64 | flat | −27.3% | −20.1% | +29.6% | 497/497 |
| 497-record corpus | arm64 | flat | −23.6% | −25.2% | +36.4% | 497/497 |
| 497-record corpus | amd64 | halfpath | −15.5% | −16.3% | +20.6% | 497/497 |
| Heavy multicall | amd64 | flat | Saturated | — | +22–25% | — |
| Heavy multicall | amd64 | halfpath | Saturated | — | +23% | — |
Other optimizations
- Keccak-256 ~30% faster via AVX-512VL and batched hashing. (#12844)
- Single-call RocksDB point reads remove a value-sized native allocation and copy on every read. (#12986)
- EVM stops redundantly zeroing memory on overwrites and fresh allocations — large wins on memory-heavy execution. (#12953)
eth_callstate overrides applied without merkleization. (#12904)- ARM64-specific: EVM byte-swap fast path (eth_call latency and block-processing improvements) and a per-thread EVM call-pool free list. (#12798, #12905)
- Plus hot-path loop/atomics cleanups. (#13000, #12998, #12870, ...
v1.39.3
Important
This is a mandatory update for all node operators. Please upgrade at your earliest convenience.
Release notes
A patch release on top of 1.39.2 with reliability and hardening fixes across block processing, networking, and request decoding. No consensus or database-format changes, so it's a drop-in upgrade from any 1.39.x version.
Overview
3 changes since 1.39.2:
- Hardened ABI decoding against malformed input (#12588)
- Fixed pooled-memory cleanup in block processing and networking (#12034)
- Reduced allocations in EIP-6110 deposit-request decoding (#12185)
What's Changed
- Validate ABI decode allocation bounds by @flcl42 in #12588
- Fix undisposed array-pool list leaks by @batrr in #12034
- perf(requests): reuse a stack buffer for deposit request decoding by @AnkushinDaniil in #12185
- chore: update Directory.Build.props for 1.39.3 by @stdevMac in 28cbe2a0
Full Changelog: 1.39.2...1.39.3
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
Guest for ZisK r8
Release notes
This is a public preview of the Nethermind guest for ZisK.
- Requires ZisK v1.0.0-alpha
- Supports standard chains and glamsterdam-devnet-7
Build signature
The package is signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.39.2
Important
Given the number of CVEs from Microsoft this release fixes it is mandatory for all node operators.
Release notes
This is a patch release on top of 1.39.1 that updates the .NET dependencies to Microsoft's July 2026 servicing release (10.0.10), which 17 CVE security fixes, and makes the eth_getLogs block-range limit explicit and configurable.
Overview
4 changes since 1.39.1:
- .NET packages updated to 10.0.10 — Microsoft's July 2026 servicing update, which addresses several security vulnerabilities in .NET (#12449)
- Explicit, configurable
eth_getLogsblock-range limit — theReceipt.MaxBlockDepthoption (default 10,000 blocks) is now documented and applied consistently, including when"useIndex": falseis requested; requests exceeding the range are rejected with an "invalid params" (32602) error. Set to0to disable; ignored when the log index is enabled (#12509) - Routine dependency bumps:
Microsoft.IdentityModel.JsonWebTokens,System.CommandLine,Nethermind.Crypto.SecP256r1, and a RocksDB package rebuild (10.10.1.649 → 10.10.1.1747; same native RocksDB version) (#12449, #12491)
What's Changed
- chore: Update packages by @rubo in #12449
- hotfix: Configurable and explicit eth_getLogs scan limit by @alexb5dh in #12509
- Update 1.39.2 by @stdevMac in #12491
- chore: update Directory.Build.props for 1.39.2 by @stdevMac in 6a0e3c427c
Full Changelog: 1.39.1...1.39.2
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.39.1
Release notes
This is a patch release on top of 1.39.0 with a round of bug fixes and reliability improvements across snap sync, networking, JSON-RPC, and the experimental Flat DB.
Overview
Full diff: 1.39.0...1.39.1
8 changes since 1.39.0. Highlights:
- Flat DB (experimental, opt-in) — fixed a disposal race between shutdown and in-flight trie-warmer jobs (#12237)
eth_simulateV1now bounds the total block expansion, not just each inter-block gap (#12210)- Bad-block store is bounded by entry count as intended, instead of comparing against the DB byte size (#12225)
- Quieter logs — RLP limit diagnostics toned down (#12130)
Highlights
Sync
- Reject malformed snap range proofs instead of throwing (#12187)
- Verify the hash of trie nodes recovered via snap heal (#12200)
Networking
JSON-RPC & Engine API
- Bound
eth_simulateV1total block expansion, not just each gap (#12210) - Side-effect-free invalid-chain query and atomic node get-or-create in the invalid-chain tracker (#12208)
Storage & state
- Bound
BadBlockStoreby entry count, not DB byte size (#12225) - Flat DB (experimental, opt-in): lease the read-only bundle for in-flight trie-warmer jobs (#12237, fixes #12079)
What's Changed
- fix(snap): reject malformed range proofs instead of throwing by @AnkushinDaniil in #12187
- Tone down RLP limit logging by @flcl42 in #12130
- fix(network): reject zero-size RLPx frames in ZeroFrameDecoder by @AnkushinDaniil in #12202
- fix(synchronization): verify hash of snap-heal recovered trie node by @AnkushinDaniil in #12200
- fix(jsonrpc): bound eth_simulateV1 total block expansion, not just each gap by @AnkushinDaniil in #12210
- fix(merge): side-effect-free invalid-chain query, atomic node get-or-create by @AnkushinDaniil in #12208
- fix(blockchain): bound BadBlockStore by entry count, not DB byte size by @AnkushinDaniil in #12225
- fix(flatdb): lease the read-only bundle for in-flight trie warmer jobs by @AnkushinDaniil in #12237
- chore: update Directory.Build.props for 1.39.1 by @stdevMac in b7c51322a1
Full Changelog: 1.39.0...1.39.1
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.39.0
Release notes
This release focuses on node robustness, Flat DB durability — alongside the eth/71 wire protocol, a reworked discovery stack, a large JSON-RPC features-and-correctness batch, continued Block-level Access Lists (EIP-7928) maturation, and a broad round of EVM, precompile, and state performance work.
OP Karst reminder: the OP Karst hardfork (shipped in 1.38.1 and included here) activates on OP Mainnet: Wed, Jul 8, 2026 at 16:00:01 UTC. OP Stack operators must be on 1.38.1 or later before then.
Overview
Full diff: https://github.com/NethermindEth/nethermind/compare/1.38.1…1.39.0
337 changes since 1.38.1. Highlights include restart-safety fixes for header sync and pivot selection, a Flat DB durability overhaul, the eth/71 wire protocol, a rework of discv4 discovery, SSZ-REST transport for the Engine API, eight new JSON-RPC methods with a large correctness batch, EIP-7928 (BALs) devnet-7 support with major performance work, EraE fixes, and chain-specific improvements for XDC, Taiko, Optimism, and Arbitrum.
Highlights
Sync & restart safety
- Recover header sync after a lost chain level on unclean shutdown (#11994, fixes #8029)
- Unwedge
UpdatingPivotfor nodes restarted before the first pivot update (#11995) - Flush all column families in
ColumnsDb.Flush— makes column-DB writes (incl. Flat DB) durable across restarts (#12223, fixes #11993) - Refresh snap pivot instead of punishing the only peer (#11569, fixes #6803); support infinite pivot-update attempts via
1(#11600, fixes #5992) - Fix shutdown race in SnapProvider (#11807); accept receipts with zero bloom from peers (#11743); prevent negative RequestSize crash when the beacon pivot advances mid-sync (#11478)
- New
Sync.StaticSnapPivotoption for fixed-pivot snap sync from a frozen peer (#11943)
Flat DB (experimental, opt-in) durability & hardening
- Crash-durable snap finalize with a cheap restart wipe (#11997); preserve format markers when clearing the flat DB (#11996)
- Force-persist the head-reachable fork instead of an arbitrary one (#11967); persistence cache (#12035); prune orphaned non-canonical snapshots on persist (#11739)
- RLP-wrap storage slot values behind a versioned flag (#11909) with legacy-DB detection (#11975); improved state-backend compatibility and auto-detection (#11911, #11404)
- Stagger compaction per instance (#11756) with a
CompactionOffsetconfig to pin the schedule (#11958)
Networking & discovery
- eth/71 wire protocol (#10844); eth/70 hardening (#11456, #11615, #11754); eth/69 BlockRangeUpdate validation (#11796)
- discv4 rework (#8616) and discovery now defaults to V4 (#11614); faster discv4 timeout handling (#11859)
- Disconnect peers on unknown protocol message type (#11266); reduced per-message and per-peer allocations across Eth, Snap, and RLPx (#11639)
JSON-RPC
- New methods:
eth_getHeaderByHash/eth_getHeaderByNumber(#11531),eth_getRawTransactionByBlockHashAndIndex/eth_getRawTransactionByBlockNumberAndIndex/eth_sendRawTransactionSync(#11521),eth_signTransaction(#11517),eth_baseFee(#11522),debug_intermediateRoots(#11524),eth_capabilities(#11438),proof_call(#11732),proof_getProofWithMeta(#11498) - Streaming responses for
debug_*andtrace_*(#11693, #11755, #11781) with a synchronous-wait fix (#12006) - Correctness batch:
eth_estimateGaszero/revert semantics (#11780, #11783), reject EIP-1898 blockHash+blockNumber (#11777), reject oversized blob calls (#11782),eth_simulateV1fixes (#11506, #11665, #11841),eth_createAccessListreverted-frame accesses (#11431), omit non-specerrorfield from receipts (#11454), zero hashes for absenteth_getProofaccounts (#11912) - Route
eth_callthrough a shareable tx-processor pool (#11548); drain in-flight requests before disposing databases on shutdown (#11845)
Engine API
- SSZ-REST transport (#11301) with Accept-negotiation fix (#11856) and capabilities-warning fix (#12176)
- Fix forkchoice validation order (#11681); validate FCU safe/finalized by ancestry when main-chain markers are outdated (#11746); guard against null safe/finalized hash (#12110)
- Bound dangling block-cache growth (#11426); capture bad blocks at pre-process rejection stages (#11696)
Block-level Access Lists (EIP-7928)
- BAL devnet 6 and devnet 7 support (#11436, #11561) incl. the EIP-8037 intrinsic-gas cap (#11635, #11579)
- Network encoding fix (#11950), RLP fix (#11861), validation refactor (#11878), activation only when needed (#11795)
- Performance series: verify-only fast path (#11659), account-presence bitmap (#11661), single-pass build (#11676), reduced recording overhead on warm reads (#11905), allocation cuts (#11702, #11725)
Performance
- Fast ETH-transfer execution path (#11804); TrieWarmer reworked onto ThreadPool (#11848); tightened
CALLhot path with EIP-7702 delegation-to-precompile fix (#11547) - Precompiles: BN254 pairing optimizations (#11916, #11888), BLS G1MSM decoding (#11889), per-thread RIPEMD-160 (#11890), ModExp
int32overflow fix (#11692) - State: storage-trie warm-up driven from writes (#11409), RocksDB native memory reported to GC (#11453), lock-free
ChainHeadSpecProvider(#11618)
Chain-specific
- XDC: XDPoS RPC module (#10553), rewards upgrade (#11016), HotStuff and QC-manager refactors (#11711, #11644), snapshot recovery (#11602), discovery (#11527), sync fixes
- Taiko: Unzen scheduled on Taiko Hoodi (#11977) with zk-gas recalibrations (#11749, #11896, #11940); beacon-sync deadlock fix (#11648); engine payload aligned with alethia-reth (#11776)
- Optimism: OP Karst fork (#11917) and Superchain registry refresh with Base removal (#11655, #11852) — already shipped to OP operators in 1.38.1
- Arbitrum groundwork: ArbOS 60 multi-gas constraints (#10765) and EVM extension points
- zkEVM/stateless: migration to zkVM/SSZ standards (#11481, #11625), EEST stateless-execution tests (#11908), intrinsic zk gas (#11584)
Other notable
- EraE (EIP-4444) fixes and spec updates (#11727, #11771, #11772, #11928)
- Structured console logging via
-logging-format(#11610); non-default config values shown at startup (#11523); health UI behind a reverse proxy (#11946) - StatsAnalyzer plugin (#7345, #11766)
⚠️ Breaking / behavior changes
- Legacy
BloomStorageremoved (#11906) — the bloom-filter index database and its configuration are gone; log queries rely on the current log-index path. - Discovery defaults to V4 (#11614).
- Per-method JSON-RPC metrics are now enabled by default (#11494).
- Non-spec
errorfield removed from transaction receipts in JSON-RPC responses (#11454). - IPC socket is restricted to owner-only permissions when configured (#9449).
What’s Changed
- Add NETH004 analyzer banning ConcurrentDictionary.Keys/.Values by @asdacap in #11462
- fix: prevent negative RequestSize crash when beacon pivot destination advances mid-sync by @asdacap in #11478
- feat(zkevm): Migrate to zkVM standards by @rubo in #11481
- XDC - Rewards Upgrade by @cicr99 in #11016
- feat(zkevm): Enable BAL in stateless execution by @rubo in #11505
- test: regression tests for #9002 - barrier decrease after partial sync leaves feed stuck by @divi2806 in #11483
- RLP tx decoding fixes by @alexb5dh in #11496
- perf: report BloomFilter unmanaged allocation to GC by @asdacap in #11503
- fix: enable EnablePerMethodMetrics by default by @deffrian in #11494
- chore: Update dependencies by @benaadams in #11512
- eth/71 by @flcl42 in #10844
- fix: drop buffered frame bytes on
FrameQueue.Clearby @grubbyTimes in #11510 - perf(state): drive storage trie warm-up from writes via HintSet by @asdacap in #11409
- feat: BAL recorder plugin — record and replay block access lists for prewarming benchmarks by @asdacap in #11276
- fix(ReceiptForRpc): omit non-spec
errorfield from receipt JSON-RPC responses by @manusw7 in #11454 - fixed half-empty trace result by @DarkLord017 in #11466
- XDC Fix sync by @batrr in #11509
- Improve eth/70 checks by @flcl42 in #11456
- Minor fixes from AI audit by @alexb5dh in #11406
- fix: Fix dependency caching by @rubo in #11499
- Bal devnet 6 by @benaadams in #11436
- fix: stabilize ParallelUnbalancedWork fault propagation + flaky engine tests by @LukaszRozmej in #11534
- Eliminate ForcedNumberConversion boxing on set by @benaadams in #11536
- RPC: add
eth_getHeaderByHash,eth_getHeaderByNumberby @svlachakis in #11531 - Return remainder buffer to pool in KeccakHash.UpdateFinalTo by @benaadams in #11532
- Bump up the version to 1.39...
Guest for ZisK r7
Release notes
This is the first public preview of the Nethermind guest for ZisK.
- Requires ZisK v1.0.0-alpha
- Supports standard chains and glamsterdam-devnet-5
Build signature
The package is signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.38.1
Release notes
This is a patch release focused on Optimism / OP Stack support. It adds the OP Karst fork, refreshes the Superchain registry chains, and removes the bundled Base mainnet and sepolia configurations.
Sepolia: Wed, Jun 17, 2026 at 16:00:01 UTC
Mainnet: Wed, Jul 8, 2026 at 16:00:01 UTC
Overview
Full diff: 1.38.0...1.38.1
5 changes since 1.38.0, all OP Stack–related. Highlights:
- OP Karst fork added, with the precompile input-size caps and Engine API capability gating that go with it.
- Superchain registry refresh across all bundled OP chains.
- Base removed from the shipped chain configs and node profiles.
Highlights
Optimism
- Add OP Karst fork (#11917) — Karst timestamp plumbing across the OP forks, Osaka EIPs enabled, propagation of release spec and precompile input-size limits, and
ForkInfosupport. Includes a refactor that isolates all OP-specific fork flags and transition timestamps insideNethermind.Optimism(mirroring the Taiko plugin pattern), soCore/Specs/Merge.Plugin/Evm.Precompilesno longer reference any OP fork flag. OP precompile caps now live in dedicated wrapper precompiles registered viaOptimismPrecompileProvider, and Engine API V4 is gated behind OP Isthmus activation. - Update OP Superchain chains (#11855, #11733)
Chain configs
- Update OP Superchain chains, removes Base (#11655) — removes
base-mainnetandbase-sepolia(including archive configs, profiles, and logo) from the bundled chains, adds support for handling chains deleted from the Superchain registry, and removesarena-zandswell-mainnet.
⚠️ Breaking changes
- Base is no longer bundled. The
base-mainnet,base-sepolia, and their_archiveconfigurations have been removed from the shipped chain configs. Operators running Base via Nethermind's built-in configs must supply their own chainspec/config. arena-zandswell-mainnetchain configs were also removed as part of the Superchain registry sync.
What's Changed
- Update OP Superchain chains (removes Base) by @emlautarom1 in #11655
- Update OP Superchain chains by @core-repository-dispatch-app in #11733
- Update OP Superchain chains by @core-repository-dispatch-app in #11855
- Add OP Karst fork by @emlautarom1 in #11917
- Update Directory.Build.props for 1.38.1 by @stdevMac in #11973
Full Changelog: 1.38.0...1.38.1
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.38.0
Release notes
This release improves node robustness, restart safety, RPC compatibility, and runtime performance, especially for Flat DB users, RPC-heavy workloads, and chains relying on upcoming hardfork or EIP support.
Overview
Full diff: https://github.com/NethermindEth/nethermind/compare/1.37.2…release/1.38.0
372 changes since 1.37.2. Highlights include the Taiko Unzen hardfork, parallel transaction execution with Block-level Access Lists (EIP-7928), new EIPs (EIP-7981 access-list token floor pricing, EIP-7976 calldata floor cost, EIP-4444 EraE history expiry), Flat DB layout persistence, a large round of JSON-RPC correctness fixes, and EVM/state hot-path optimizations.
Highlights
Consensus & EIPs
- Taiko Unzen hardfork implemented (#11281)
- Parallel transaction execution with BALs (#9182), additional BAL hive tests (#11285)
- EIP-7981 — Access list token floor pricing (#11311)
- EIP-7976 — Increase calldata floor cost (#11293)
- EIP-4444 EraE support (#10812)
- Enforce EIP-3675 uncle ban at the spec level (#11302)
- Gnosis Osaka (#10906)
State & storage
- Persist FlatLayout and refuse mismatched restarts (#11271)
- Flat-state storage cleanup and snapshot fixes (#11133, #11401, #11414)
- Reduce dirty nodes lock contention (#11297)
- StateComposition plugin — real-time state metrics (#10995)
Performance
- Embed Address bytes inline to remove secondary allocation (#11469)
- Optimize EVM stack (#11230) and EvmMemory (#11247)
- Optimise parallel execution: reduce worldstate / txprocessor allocations (#11318)
- More optimizations for precompile caching (#11373, #11309)
RPC & correctness
admin_*peer-management endpoints improvements (#11489)- Numerous
eth_simulateV1,eth_call,eth_estimateGaserror-code and gas-cap fixes txpool_content/txpool_contentFrom/txpool_statusfixes (#11305, #11417)/healthendpointClUnavailableregression fix (#11474)
Networking & sync
- Upgrade discv5 (#11419)
- Lock-free sync allocation slots per peer (#11361)
- Remove NodeData satellite protocol (#11359) and long-range catch-up sync (#11123)
Chain-specific
- XDC: forensics processor, epoch switch manager, subnet block building, and multiple fixes
- Taiko: batch lookup RPC methods (#11021), Shasta fork on Alethia (#10984)
- Add new Anchor Transaction Type for Surge realtime (#10320)
What’s Changed
- Bal devnet 3 by @Marchhill in #10697
- Restore Taiko FCU timestamp validation allowing equal timestamps by @jmadibekov in #10810
- refactor: comprehensive test and code deduplication by @LukaszRozmej in #10815
- chore: Update packages by @rubo in #10827
- refactor(specs): flatten fork inheritance into parent-based Apply chain by @LukaszRozmej in #10825
- Make state available if not pruned by @flcl42 in #10822
- Update OP Superchain chains by @core-repository-dispatch-app [bot] in #10837
- Auto-update fast sync settings by @core-repository-dispatch-app [bot] in #10836
- Kch/sync supported fix by @kamilchodola in #10823
- chore: Revise spell checking by @rubo in #10838
- fix(rlp): pass ValueDecoderContext by ref in DecodeStorageRootOnly by @reject-i in #10842
- fix(db): return null for missing key in SimpleFilePublicKeyDb.Get by @reject-i in #10843
- Simplify releasing & fix
IByteBufferleaks in tests by @alexb5dh in #10814 - fix: IByteBuffer leak in ZeroSnappyEncoder.Encode by @newmanifold in #10833
- fix(ci): free disk space for Pyspec test jobs by @benaadams in #10845
- fix(ssz): Uint128 decode method swapped upper and lower halves by @kevaundray in #10794
- fix(ssz): Merkleizer list Feed now uses correct chunk limit and actual length for mixin by @kevaundray in #10795
- fix(ssz): Add validation checks for BitList and BitVector by @kevaundray in #10796
- fix(ssz): Container decode logic for BitVector and validation fixes for container input by @kevaundray in #10797
- fix: dispose IncrementalHash in E2StoreWriter by @ninastef in #10847
- feat: Add Codex review workflow by @rubo in #10832
- fix: Update Trivy scanner workflow by @rubo in #10852
- fix(ssz): mix in count=0 (not limit) for null/empty lists in MerkleizeList templates by @MarekM25 in #10828
- fix: remove unreachable code in ModExpPrecompile by @Fallengirl in #10826
- BALs remove unneeded delegation check by @Marchhill in #10860
- fix: rpc-compat hive tests by @deffrian in #10846
- fix: prevent torn reads of TrieNode._rlp using seqlock pattern by @benaadams in #10857
- Fix event handler leaks, reduce allocations, and refactor Network layer by @benaadams in #10753
- Re-enable ReadyToRun AOT compilation by @benaadams in #10848
- fix: handle tuple disposal in TryDispose to prevent resource leaks by @newmanifold in #10839
- fix: IByteBuffer leak in EnrResponseMsgSerializer & ArrayPoolSpan OOB by @newmanifold in #10853
- Remove EOF by @benaadams in #10866
- Check logs RLP by @flcl42 in #10862
- feat: add maxUsedGas to eth_simulateV1 results by @MysticRyuujin in #10863
- fix: fix resource leak in ChannelDecoder compression streams by @kseniaeremekno in #10865
- fix: fix CancellationTokenSource leak in StartingSyncPivotUpdater by @ninastef in #10859
- fix: fix encryptor leak in AesCtr method by @ninastef in #10851
- feat: restore edge/block collection and runtime consumption by @benaadams in #10869
- chore: Revise
CODEOWNERSby @rubo in #10874 - chore: Unify precompile naming by @rubo in #10875
- feat: add –force-resync and –purge-db CLI flags by @benaadams in #10871
- test: Add
MODEXPprecompile tests by @rubo in #10888 - fix: fix HttpResponseMessage leak in DefaultHttpClient by @kseniaeremekno in #10889
- fix(test): add missing isLeaf assertion in HexPrefixTests by @zeroprooff in #10895
- fix: fix HttpResponseMessage leak in BasicJsonRpcClient by @kseniaeremekno in #10873
- fix(ssz): use container.Count instead of limit in MerkleizeList for Union types by @davidjsonn in #10747
- feat(ssz): Add spec tests for ssz by @kevaundray in #10807
- fix(test): replace fork type checks with spec flag checks in test harness by @LukaszRozmej in #10896
- test(keystore): remove duplicate Salt32Test by @zeroprooff in #10901
- fix: raise snap response limits to prevent SnapSync regression by @kamilchodola in #10904
- docs: overhaul README structure and content by @Giri-Aayush in #10856
- fix(test): eliminate flakiness in BlockchainProcessorTests by @LukaszRozmej in #10905
- test: Add
BLAKE2Fprecompile tests by @rubo in #10909 - test: Add
SHA256precompile tests by @rubo in #10910 - Fix flaky test: replace polling with signal-based loop in BecomesNewHead by @Copilot in #10884
- Fix ArgumentException in SnapshotRepository.GetSnapshotBeforeStateId for negative BlockNumber by @Copilot in #10882
- Auto-update fast sync settings by @core-repository-dispatch-app [bot] in #10914
- Update OP Superchain chains by @core-repository-dispatch-app [bot] in #10913
- fix: fix inverted dispose logic in BackgroundTaskScheduler by @kseniaeremekno in https://github.com/NethermindEth/neth...
v1.37.2
Release notes
Release notes
Overview
This release fixes healthcheck and Archive Invalid Block issues on 1.37.1
What's Changed
- healthcheck fix by @svlachakis in #11482
- Disable ParallelWorldState by @LukaszRozmej cd1c5ec
Full Changelog: 1.37.1...1.37.2
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E





