github NethermindEth/nethermind 1.39.0
v1.39.0

4 hours ago

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 UpdatingPivot for 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.StaticSnapPivot option 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 CompactionOffset config 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_* and trace_* (#11693, #11755, #11781) with a synchronous-wait fix (#12006)
  • Correctness batch: eth_estimateGas zero/revert semantics (#11780, #11783), reject EIP-1898 blockHash+blockNumber (#11777), reject oversized blob calls (#11782), eth_simulateV1 fixes (#11506, #11665, #11841), eth_createAccessList reverted-frame accesses (#11431), omit non-spec error field from receipts (#11454), zero hashes for absent eth_getProof accounts (#11912)
  • Route eth_call through 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 CALL hot 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 int32 overflow 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

⚠️ Breaking / behavior changes

  • Legacy BloomStorage removed (#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 error field removed from transaction receipts in JSON-RPC responses (#11454).
  • IPC socket is restricted to owner-only permissions when configured (#9449).

What’s Changed

New Contributors

Full Changelog: https://github.com/NethermindEth/nethermind/compare/1.38.1…1.39.0

Build signatures

The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E

Build signatures

The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E

Don't miss a new nethermind release

NewReleases is sending notifications on new releases.