Releases: NethermindEth/nethermind
Release list
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
v1.37.1
Release notes
Overview
This release replaces 1.37.0
540 Changes across 2,651 Files. Major worldstate backend refactor, RocksDB snapshots, flat storage for snap sync, block-level access lists (EIP-7928), initial zkEVM groundwork, and a large round of JSON-RPC and EVM hot-path optimizations.
Breaking changes
- eth/66 and eth/67 dropped;
eth/69is now default andeth/70added and activated (#9938, #10246) - Engine API versioning reworked (#10786)
- Vault and NDM code paths removed (#10478)
Highlights
Performance
- Tx processing via encoded-tx trie root and fast block re-encode (#10435)
KeccakCache,SeqlockCache,FastHashimprovements (#10391, #10415, #10082)- EVM hot paths:
EXP/MOD/identity precompile (#10060, #10061, #10366) - Pruning: +512MB default cache, skip GC, inline prunes (#10247, #10230, #10112)
- JSON-RPC parsing and processing optimized (#10207, #10389, #10453)
State & storage
- Worldstate backend refactor with pluggable backends (#9089)
- RocksDB and column DB snapshots (#10080, #10262)
- Flat storage for snap sync (#9854, #10426)
- Discv5 nodes moved to a separate DB (#10027)
EVM extensibility
- Policy-based gas tracking (#9846, #10068, #10692)
- External tracer registration (#10228)
- Witness generation (#9949) and zkEVM groundwork (#10561, #10773)
Consensus & EIPs
RPC & correctness
eth_estimateGasfixes (#10559);eth_getBlockByNumbercanonical enforcement (#10024)eth_getLogsfaster (#9923); log index introduced (#8464)engine_getBlobsV3(#9942);engine_getPayloadV4for Optimism (#10328)eth_subscribe transactionReceipts(#10524)debug_block field overrides (#10405);GasCapenforced on debug/trace (#10457)- Hardened RPC tx validations (#10395)
Networking
- Faster handshake parsing, Ethrex recognized (#9935)
- Discovery v5 optimized (#10081); better peer decentralization (#10090)
Chain-specific
- Taiko/Surge: Shasta changes, Hoodi activation, TDX attestation (#9998, #10406, #9954)
- XDC: P2P layer, EIP-1559, fast sync, penalty/reward handlers (#10615, #10277, #10549)
- OP Superchain: rolling updates
Flat DB (opt-in)
Nethermind 1.37.0 ships a new Flat DB state backend that stores the latest state as flat account/storage records instead of walking the Merkle-Patricia trie. Faster random reads, streaming snap serving, and per-column cache budgets. Disabled by default — opt in with --FlatDb.Enabled=true.
Activation
--FlatDb.Enabled=true
This swaps FlatWorldStateModule in for the pruning-trie wiring, disables admin_prune / admin_verifyTrie, and force-enables Sync.SnapServingEnabled=true.
Migration from an existing pruning-trie DB
Set the import flag alongside Enabled:
--FlatDb.Enabled=true
--FlatDb.ImportFromPruningTrieState=true
Run the node. On first boot the ImportFlatDb step streams the head state into the flat DB and then exits cleanly (exit code 0). Just restart the node — the flag can stay on. On subsequent boots the step detects the populated flat DB, logs Flat db already exist, and returns without exiting, so the node proceeds to normal operation. There is no automatic in-place migration without the flag: if you enable Flat DB on a node that already has pruning-trie data and don't set ImportFromPruningTrieState, the flat DB is simply empty and you'll sync from scratch.
FlatLayout.PreimageFlat cannot be the import target (the importer uses raw hash-keyed writes) — use Flat or FlatInTrie for the import run.
Layouts — -FlatDb.Layout
| Value | Notes |
|---|---|
Flat (default) |
Flat entries in a dedicated column DB with Hyper Clock caches (30% Account / 70% Storage of BlockCacheSizeBudget). |
FlatInTrie |
Entries embedded into trie leaves. FlatRocksDbConfigAdjuster adds optimize_filters_for_hits=true, partitioned filters, two-level index — lower memory, higher tail latency. |
PreimageFlat |
Preimage-DB-keyed layout. Requires a preimage DB populated via --FlatDb.EnablePreimageRecording=true on an earlier run. |
All FlatDb.* flags (defaults from FlatDbConfig.cs)
| Flag | Default | Purpose |
|---|---|---|
Enabled |
false |
Master switch. |
Layout |
Flat |
Flat / FlatInTrie / PreimageFlat. |
ImportFromPruningTrieState |
false |
One-shot import from the pruning-trie DB; idempotent afterwards. |
EnablePreimageRecording |
false |
Mirror account/slot hashes into a preimage DB. |
VerifyWithTrie |
false |
Cross-check flat reads against a reconstructed trie. Diagnostic — slow. |
InlineCompaction |
false |
Run compaction inline on writes instead of pooled. |
CompactSize / MinCompactSize |
32 / 2 |
Snapshot-group size bounds for hierarchical compaction. |
MaxInFlightCompactJob |
32 |
Compaction parallelism. |
MinReorgDepth / MaxReorgDepth |
128 / 256 |
Reorg retention window. |
TrieWarmerWorkerCount |
-1 |
-1 = CPU - 1, 0 = disable warming. |
BlockCacheSizeBudget |
1 GiB |
RocksDB block cache for the flat column family (split 30/70 Account/Storage). Stacks on top of Db.* budgets. |
TrieCacheMemoryBudget |
512 MiB |
TrieNodeCache target; 0 disables it. |
Config flag changes
Every user-facing config movement on 1.37.0 outside the FlatDb.* namespace. Flat DB flags are covered separately.
Added
| Flag | PR | Default | Purpose |
|---|---|---|---|
Network.FilterPeersByRecentIp |
[#10090](#10090) | true |
Reject peers whose IP key was seen recently (time-windowed). |
Network.FilterPeersBySameSubnet |
[#10090](#10090) | true |
Bucket peer IPs by subnet (IPv4 /24, IPv6 /64). Set false for co-located multi-node setups. |
Network.FilterDiscoveryNodesByRecentIp |
[#10090](#10090) | true |
Same filter for discovery. |
Network.FilterDiscoveryNodesBySameSubnet |
[#10090](#10090) | true |
Subnet bucketing for discovery. |
Removed
| Flag | PR | Notes |
|---|---|---|
Db.XdcSnapshotsDbRocksDbOptions |
[#10329](#10329) | Moved into XdcRocksDbConfigFactory in the XDC plugin. |
Db.XdcSnapshotsDbAdditionalRocksDbOptions |
[#10329](#10329) | As above — delete from any XDC config overrides. |
Default-value changes
- Gnosis and Gnosis-archive now ship with
Db.SkipCheckingSstFileSizesOnDbOpen=truein[configs/gnosis.json](https://www.notion.so/nethermind/src/Nethermind/Nethermind.Runner/configs/gnosis.json)and[configs/gnosis_archive.json](https://www.notion.so/nethermind/src/Nethermind/Nethermind.Runner/configs/gnosis_archive.json), cutting archive startup time. Override tofalseto restore the old behavior.
Implicit flips
Sync.SnapServingEnabledis force-truewheneverFlatDb.Enabled=true(FlatWorldStateModuleinterceptsISyncConfig). A-Sync.SnapServingEnabled=falsepassed alongside Flat DB is silently overridden.
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
What's Changed
- Disable publishing to Downloads by @stdevMac in #9910
- Fix hive getLogs by @deffrian in #9889
- fix: remove duplicate gRPC host validation in GrpcClient by @VolodymyrBg in #9922
- Move ExecutionEnvironment to Rentable sealed class by @LukaszRozmej in #9916
- fix: align BlockHashes dictionary to use nullable Hash256 by @aso20455 in #9900
- Only pool pure Transaction objects, not subclasses by @tanishqjasoria in #9884
- Auto-update fast sync settings by @core-repository-dispatch-app[bot] in #9933
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #9932
- Adjust JOC testnet Bootnodes according to recent changes by @anhnhx131 in #9940
- fix: Remove redundant BlockHeader field reassignments in StatelessExecution by @anim001k in #9928
- test: add Eip2565Transition check for posdao chain spec by @PivasDesant in #9920
- Fixes #9606: DebugTracerTests thread synchronization issue by @igladun in #9875
- Faster protocol parsing, add Ethrex as node/brand type by @benaadams in #9935
- Precompiles names fix by @svlachakis in #9944
- Update packages by @rubo in #9907
- Fix hanging scenario i...
v1.37.0
Release notes
Overview
530 Changes across 2,643 Files. Major worldstate backend refactor, RocksDB snapshots, flat storage for snap sync, block-level access lists (EIP-7928), initial zkEVM groundwork, and a large round of JSON-RPC and EVM hot-path optimizations.
Breaking changes
- eth/66 and eth/67 dropped;
eth/69is now default andeth/70added and activated (#9938, #10246) - Engine API versioning reworked (#10786)
- Vault and NDM code paths removed (#10478)
Highlights
Performance
- Tx processing via encoded-tx trie root and fast block re-encode (#10435)
KeccakCache,SeqlockCache,FastHashimprovements (#10391, #10415, #10082)- EVM hot paths:
EXP/MOD/identity precompile (#10060, #10061, #10366) - Pruning: +512MB default cache, skip GC, inline prunes (#10247, #10230, #10112)
- JSON-RPC parsing and processing optimized (#10207, #10389, #10453)
State & storage
- Worldstate backend refactor with pluggable backends (#9089)
- RocksDB and column DB snapshots (#10080, #10262)
- Flat storage for snap sync (#9854, #10426)
- Discv5 nodes moved to a separate DB (#10027)
EVM extensibility
- Policy-based gas tracking (#9846, #10068, #10692)
- External tracer registration (#10228)
- Witness generation (#9949) and zkEVM groundwork (#10561, #10773)
Consensus & EIPs
RPC & correctness
eth_estimateGasfixes (#10559);eth_getBlockByNumbercanonical enforcement (#10024)eth_getLogsfaster (#9923); log index introduced (#8464)engine_getBlobsV3(#9942);engine_getPayloadV4for Optimism (#10328)eth_subscribe transactionReceipts(#10524)debug_block field overrides (#10405);GasCapenforced on debug/trace (#10457)- Hardened RPC tx validations (#10395)
Networking
- Faster handshake parsing, Ethrex recognized (#9935)
- Discovery v5 optimized (#10081); better peer decentralization (#10090)
Chain-specific
- Taiko/Surge: Shasta changes, Hoodi activation, TDX attestation (#9998, #10406, #9954)
- XDC: P2P layer, EIP-1559, fast sync, penalty/reward handlers (#10615, #10277, #10549)
- OP Superchain: rolling updates
Flat DB (opt-in)
Nethermind 1.37.0 ships a new Flat DB state backend that stores the latest state as flat account/storage records instead of walking the Merkle-Patricia trie. Faster random reads, streaming snap serving, and per-column cache budgets. Disabled by default — opt in with --FlatDb.Enabled=true.
Activation
--FlatDb.Enabled=true
This swaps FlatWorldStateModule in for the pruning-trie wiring, disables admin_prune / admin_verifyTrie, and force-enables Sync.SnapServingEnabled=true.
Migration from an existing pruning-trie DB
Set the import flag alongside Enabled:
--FlatDb.Enabled=true
--FlatDb.ImportFromPruningTrieState=true
Run the node. On first boot the ImportFlatDb step streams the head state into the flat DB and then exits cleanly (exit code 0). Just restart the node — the flag can stay on. On subsequent boots the step detects the populated flat DB, logs Flat db already exist, and returns without exiting, so the node proceeds to normal operation. There is no automatic in-place migration without the flag: if you enable Flat DB on a node that already has pruning-trie data and don't set ImportFromPruningTrieState, the flat DB is simply empty and you'll sync from scratch.
FlatLayout.PreimageFlat cannot be the import target (the importer uses raw hash-keyed writes) — use Flat or FlatInTrie for the import run.
Layouts — -FlatDb.Layout
| Value | Notes |
|---|---|
| Flat (default) | Flat entries in a dedicated column DB with Hyper Clock caches (30% Account / 70% Storage of BlockCacheSizeBudget). |
| FlatInTrie | Entries embedded into trie leaves. FlatRocksDbConfigAdjuster adds optimize_filters_for_hits=true, partitioned filters, two-level index — lower memory, higher tail latency. |
| PreimageFlat | Preimage-DB-keyed layout. Requires a preimage DB populated via --FlatDb.EnablePreimageRecording=true on an earlier run. |
Default-value changes
- Gnosis and Gnosis-archive now ship with
Db.SkipCheckingSstFileSizesOnDbOpen=trueinconfigs/gnosis.jsonandconfigs/gnosis_archive.json, cutting archive startup time. Override tofalseto restore the old behavior.
Implicit flips
Sync.SnapServingEnabledis force-truewheneverFlatDb.Enabled=true(FlatWorldStateModuleinterceptsISyncConfig). A-Sync.SnapServingEnabled=falsepassed alongside Flat DB is silently overridden.
530 Changes across 2,643 Files. Major worldstate backend refactor, RocksDB snapshots, flat storage for snap sync, block-level access lists (EIP-7928), initial zkEVM groundwork, and a large round of JSON-RPC and EVM hot-path optimizations.
Breaking changes
- eth/66 and eth/67 dropped;
eth/69is now default andeth/70added and activated (#9938, #10246) - Engine API versioning reworked (#10786)
- Vault and NDM code paths removed (#10478)
Highlights
Performance
- Tx processing via encoded-tx trie root and fast block re-encode (#10435)
KeccakCache,SeqlockCache,FastHashimprovements (#10391, #10415, #10082)- EVM hot paths:
EXP/MOD/identity precompile (#10060, #10061, #10366) - Pruning: +512MB default cache, skip GC, inline prunes (#10247, #10230, #10112)
- JSON-RPC parsing and processing optimized (#10207, #10389, #10453)
State & storage
- Worldstate backend refactor with pluggable backends (#9089)
- RocksDB and column DB snapshots (#10080, #10262)
- Flat storage for snap sync (#9854, #10426)
- Discv5 nodes moved to a separate DB (#10027)
EVM extensibility
- Policy-based gas tracking (#9846, #10068, #10692)
- External tracer registration (#10228)
- Witness generation (#9949) and zkEVM groundwork (#10561, #10773)
Consensus & EIPs
RPC & correctness
eth_estimateGasfixes (#10559);eth_getBlockByNumbercanonical enforcement (#10024)eth_getLogsfaster (#9923); log index introduced (#8464)engine_getBlobsV3(#9942);engine_getPayloadV4for Optimism (#10328)eth_subscribe transactionReceipts(#10524)debug_block field overrides (#10405);GasCapenforced on debug/trace (#10457)- Hardened RPC tx validations (#10395)
Networking
- Faster handshake parsing, Ethrex recognized (#9935)
- Discovery v5 optimized (#10081); better peer decentralization (#10090)
Chain-specific
- Taiko/Surge: Shasta changes, Hoodi activation, TDX attestation (#9998, #10406, #9954)
- XDC: P2P layer, EIP-1559, fast sync, penalty/reward handlers (#10615, #10277, #10549)
- OP Superchain: rolling updates
Flat DB (opt-in)
Nethermind 1.37.0 ships a new Flat DB state backend that stores the latest state as flat account/storage records instead of walking the Merkle-Patricia trie. Faster random reads, streaming snap serving, and per-column cache budgets. Disabled by default — opt in with --FlatDb.Enabled=true.
Activation
--FlatDb.Enabled=true
This swaps FlatWorldStateModule in for the pruning-trie wiring, disables admin_prune / admin_verifyTrie, and force-enables Sync.SnapServingEnabled=true.
Migration from an existing pruning-trie DB
Set the import flag alongside Enabled:
--FlatDb.Enabled=true
--FlatDb.ImportFromPruningTrieState=true
Run the node. On first boot the ImportFlatDb step streams the head state into the flat DB and then exits cleanly (exit code 0). Just restart the node — the flag can stay on. On subsequent boots the step detects the populated flat DB, logs Flat db already exist, and returns without exiting, so the node proceeds to normal operation. There is no automatic in-place migration without the flag: if you enable Flat DB on a node that already has pruning-trie data and don't set ImportFromPruningTrieState, the flat DB is simply empty and you'll sync from scratch.
FlatLayout.PreimageFlat cannot be the import target (the importer uses raw hash-keyed writes) — use Flat or FlatInTrie for the import run.
Layouts — -FlatDb.Layout
| Value | Notes |
|---|---|
Flat (default) |
Flat entries in a dedicated column DB with Hyper Clock caches (30% Account / 70% Storage of BlockCacheSizeBudget). |
FlatInTrie |
Entries embedded into trie leaves. `FlatRocksDbConfigAdjuste... |
v1.36.2
Release Notes
Note
This release is only required for Gnosis Chain node operators. All other networks are unaffected.
Overview
This release enables the Osaka hard fork on the Gnosis Chain.
Fork Details
- Epoch: 1714688
- Timestamp: 1776168380 Tue Apr 14 2026 12:06:20 UTC
What's Changed
- Gnosis Osaka by @Marchhill in #10906
Full Changelog
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
v1.36.1
Release Notes
Note
This release is only required for Chiado testnet (Gnosis Chain) node operators. All other networks are unaffected.
Overview
This patch release enables the Osaka hard fork on the Chiado testnet, allowing operators and developers to test Osaka fork behavior on Chiado before Gnosis mainnet activation.
Fork Details
- Slot: 21651456
- Timestamp: 1773653580 (March 16, 2026 09:33:00 UTC)
What's Changed
- Enable Osaka on Chiado by @Marchhill in #10727