Releases: NethermindEth/nethermind
v1.33.1
Release notes
Note
This release replaces v1.33.0 and addresses important issues reported for that version, specifically around eth_config and Receipts handling.
- Receipts fix: Corrects an issue where receipts were being removed for blocks beyond
TxLookupLimiteven when History pruning was disabled. See PR #9231. eth_configfix: Resolves a configuration issue reported by the EF Testing team. See PR #9233.
These changes improve stability and consistency for users relying on long-term history and accurate transaction receipts.
For further details, please review the full changelog and linked PRs below.
Full Changelog: 1.33.0...1.33.1
v1.33.0
Release notes
This release brings over 340 improvements across 2012 files, ranging from performance enhancements, protocol upgrades, and node-runner improvements.
Nethermind UI (initial release)
This version introduces the first iteration of the Nethermind UI (#9090), providing an integrated interface to interact with and monitor your node. This marks the beginning of a more user-friendly experience for running Nethermind.
The UI is enabled when UI health checks UI is enabled: --healthchecks-enabled --healthchecks-uienabled
If you wish to expose only the UI and not RPC externally, then you can do this using capabilities on HTTP endpoints with the JsonRpc.AdditionalRpcUrls parameter.
For example, if your consensus client is running locally (running in the same instance) and your external IP is 10.4.0.4, then you can expose only the UI using just the http|health capabilities on the external IP binding and want it enabled at HTTP port 80, then binding the other capabilities needed by the consensus client to localhost:
--jsonrpc-additionalrpcurls "[http://10.4.0.4:80|http|health,http://localhost:8551|http;ws|net;eth;subscribe;engine;web3;client]"
This ensures you don't additionally enable your node as a public RPC endpoint while also enabling the UI.
Historical data live pruning
We’ve added automatic history pruning capabilities (#8040), giving operators the ability to keep disk usage under control by pruning historical chain data as the node runs. This feature is disabled by default but can be enabled via configuration. It is an experimental feature, not yet recommended for use on production nodes.
History pruning can be enabled by passing the flag --history-pruning UseAncientBarriers. This will automatically prune any blocks older than the ancient barriers cutoff.
Alternatively, pruning can be enabled in rolling window mode with the flag --history-pruning Rolling. This will prune any blocks older than 82125 epochs, which is around 1 year on the Ethereum Mainnet. The specific number of epochs can be configured with the flag --history-retentionepochs <value> -- the number of epochs must be a minimum of 82125.
History pruning can be disabled with the flag --history-pruning disabled -- currently this is the default behavior, but this may change in the future.
Peering improvements for OP Stack
Several improvements were made to Optimism and OP Stack, including:
- better handling of finalized/safe blocks #8658
- a dedicated
optimismRPC namespace #8667 - refined peer management to improve stability and sync performance #8684, #8960
Performance improvements
A wide range of EVM and networking optimizations were introduced, including:
- Reduced allocations in opcode execution #8687, #8740 and transaction sender recovery #8781, #8824.
- Warmup and precomputation improvements for EVM instructions #8699, #8836.
- Faster logging and RPC handling #8879, #8976.
- RocksDB upgrades and optimizations #8640, #9059.
These changes collectively reduce CPU and memory usage while improving throughput and responsiveness.
Other improvements
Additionally, this release includes important fixes and feature updates:
- EIP implementations:
- EIP-7823: Gas accounting #8649
- EIP-7825: Transaction gas limit cap #8663
- EIP-7883: ModExp changes #8489, #8964
- EIP-7907: Contract code size metering #8845
- EIP-7910:
eth_config#8956 - EIP-7918: Blob base fee updates (#8656, #8935
- EIP-7934: Execution block size limit #8815
- EIP-7939: CLZ instruction #8759
- EIP-7951: RIP-7212 renamed & enabled in Osaka #8753
- Consensus layer & OP-CL: Split finalized/safe blocks #8658, new RPC methods for Taiko and OP #8874, and refined health checks #8755.
- Discovery & peering: Faster removal of inactive peers #9037, improved gossip prioritization for peers on the same fork #9043, and fixes for discv4/discv5 edge cases #9046, #9113.
- Testing & tooling: Revamped Hive/Assertoor test integrations #8711, #8862, new worldstate benchmarks #9051, and initial support for HTML and Grafana reporting #9074, #8960.
What's Changed
- Fix infinite loop in tx pool by @asdacap in #8632
- Fix filter timeouts, set to 15m by @LukaszRozmej in #8633
- Update System.CommandLine package by @rubo in #8639
- Remove SkipLocalsInit to avoid garbage in first bytes of hash by @wurdum in #8634
- add surge hoodi chainspec by @smartprogrammer93 in #8643
- Fix for
Block.AccountChangesnot being disposed in some cases by @alexb5dh in #8647 - taiko alethia pacaya fork activation by @smartprogrammer93 in #8642
- Revert wrong code on missing receipt by @LukaszRozmej in #8653
- Set default
LegacyTransactionForRpcgas price to zero by @Hyodar in #8630 - Fix #8648 - eth_getTransactionByBlockNumberAndIndex out of bounds by @LukaszRozmej in #8654
- Update RocksDB package by @rubo in #8640
- Kute: order by filename by @benaadams in #8657
- PatriciaTree ignoreMissingDelete is not used by @MarekM25 in #8646
- Implement Eip7823 by @benaadams in #8649
- Sync OP chains after Isthmus by @emlautarom1 in #8638
- Use RocksDB PinnableSlice when available by @benaadams in #8661
- Optimize RlpStream.Encode(ulong) by @benaadams in #8660
- Slight discovery refactor. by @asdacap in #8664
- Mild performance tweaks by @benaadams in #8674
- Remove TD based peer allocation strategy by @asdacap in #8670
- Improve WebSocketMessageStream by @benaadams in #8676
- Optimism CL: Split finalized/safe blocks by @deffrian in #8658
- Fix ClockCache.Set by @benaadams in #8679
- Implement EIP-7825: Transaction Gas Limit Cap by @Marchhill in #8663
- Implement OP CL
optimismRPC namespace by @emlautarom1 in #8667 - Hide OP-CL specific options by @emlautarom1 in #8684
- Reduce
Forward header starting block number did not changed.exception to log. by @asdacap in #8683 - Refactor/Reduce
AuraNethermindApiusage. by @asdacap in #8686 - Optimize 12 x 20byte & 32byte OpCodes by @benaadams in #8687
- Perform stack writes as single 32 byte vector by @benaadams in #8691
- Reintroduce Jit time branch elimination by @benaadams in #8692
- Fixes one discv5 test by @ak88 in #8635
- Migrate to Microsoft.Testing.Platform by @rubo in #8190
- Fix/aura hive startup by @asdacap in https://github.com/N...
v1.33.0-rc
Release notes
This release brings over 341 improvements across 2012 files ranging from performance enhancements, protocol upgrades, and node-runner improvements.
Nethermind UI (initial release)
This version introduces the first iteration of the Nethermind UI #9090, providing an integrated interface to interact with and monitor your node. This marks the beginning of a more user-friendly experience for running Nethermind.
The UI is enabled when UI health checks UI is enabled --HealthChecks.Enabled true --HealthChecks.UIEnabled true
If you wish to expose only the UI and not RPC externally then you can do this using capabilities on http endpoints with JsonRpc.AdditionalRpcUrls parameter.
For example if your CL is local (running in same instance) and your external IP was 10.4.0.4 then you can expose only the UI using just the http|health capabilities on the external ip binding and want it enabled at port 80 (http) then binding the other capabilities needed by the CL to localhost:
--JsonRpc.AdditionalRpcUrls "[http://10.4.0.4:80|http|health,http://localhost:8551|http;ws|net;eth;subscribe;engine;web3;client]"
This ensures you don't additionally enable your node as a public RPC endpoint while also enabling the UI.
Historical data live pruning
We’ve added automatic history pruning capabilities #8040, giving operators the ability to keep disk usage under control by pruning historical chain data as the node runs. This feature is disabled by default but can be enabled via configuration. It is an experimental feature, not yet recommended for use on production nodes.
History pruning can be enabled by passing the flag History.Pruning=UseAncientBarriers. This will automatically prune any blocks older than the ancient barriers cutoff.
Alternatively, pruning can be enabled in rolling window mode with the flag History.Pruning=Rolling. This will prune any blocks older than 82125 epochs, which is around 1 year on Ethereum mainnet. The specific number of epochs can be configured with the flag `History.RetentionEpochs=...' - the number of epochs must be a minimum of 82125.
History pruning can be disabled with the flag History.Pruning=Disabled - currently this is the default behaviour, but this may change in future.
Peering improvements for OP Stack
Several improvements were made to Optimism and OP Stack network support, including:
- better handling of finalized/safe blocks #8658,
- a dedicated
optimismRPC namespace #8667, - refined peer management to improve stability and sync performance #8684, #8960.
Performance improvements
A wide range of EVM and networking optimizations were introduced, including:
- Reduced allocations in opcode execution #8687, #8740 and transaction sender recovery #8781, #8824.
- Warmup and precomputation improvements for EVM instructions #8699, #8836.
- Faster logging and RPC handling #8879, #8976.
- RocksDB upgrades and optimizations #8640, #9059.
These changes collectively reduce CPU and memory usage while improving throughput and responsiveness.
Other improvements
Additionally, this release includes important fixes and feature updates:
- EIP implementations:
- EIP-7823: Gas accounting #8649
- EIP-7825: Transaction gas limit cap #8663
- EIP-7883: ModExp changes #8489, #8964
- EIP-7907: Contract code size metering #8845
- EIP-7910:
eth_config#8956 - EIP-7918: Blob base fee updates (#8656, #8935
- EIP-7934: Execution block size limit #8815
- EIP-7939: CLZ instruction #8759
- EIP-7951: RIP-7212 renamed & enabled in Osaka #8753
- Consensus layer & OP-CL: Split finalized/safe blocks #8658, new RPC methods for Taiko and OP #8874, and refined health checks #8755.
- Discovery & peering: Faster removal of inactive peers #9037, improved gossip prioritization for peers on the same fork #9043, and fixes for discv4/discv5 edge cases #9046, #9113.
- Testing & tooling: Revamped Hive/Assertoor test integrations #8711, #8862, new worldstate benchmarks #9051, and initial support for HTML and Grafana reporting #9074, #8960.
What's Changed
- Fix infinite loop in tx pool by @asdacap in #8632
- Fix filter timeouts, set to 15m by @LukaszRozmej in #8633
- Update System.CommandLine package by @rubo in #8639
- Remove SkipLocalsInit to avoid garbage in first bytes of hash by @wurdum in #8634
- add surge hoodi chainspec by @smartprogrammer93 in #8643
- Fix for
Block.AccountChangesnot being disposed in some cases by @alexb5dh in #8647 - taiko alethia pacaya fork activation by @smartprogrammer93 in #8642
- Revert wrong code on missing receipt by @LukaszRozmej in #8653
- Set default
LegacyTransactionForRpcgas price to zero by @Hyodar in #8630 - Fix #8648 - eth_getTransactionByBlockNumberAndIndex out of bounds by @LukaszRozmej in #8654
- Update RocksDB package by @rubo in #8640
- Kute: order by filename by @benaadams in #8657
- PatriciaTree ignoreMissingDelete is not used by @MarekM25 in #8646
- Implement Eip7823 by @benaadams in #8649
- Sync OP chains after Isthmus by @emlautarom1 in #8638
- Use RocksDB PinnableSlice when available by @benaadams in #8661
- Optimize RlpStream.Encode(ulong) by @benaadams in #8660
- Slight discovery refactor. by @asdacap in #8664
- Mild performance tweaks by @benaadams in #8674
- Remove TD based peer allocation strategy by @asdacap in #8670
- Improve WebSocketMessageStream by @benaadams in #8676
- Optimism CL: Split finalized/safe blocks by @deffrian in #8658
- Fix ClockCache.Set by @benaadams in #8679
- Implement EIP-7825: Transaction Gas Limit Cap by @Marchhill in #8663
- Implement OP CL
optimismRPC namespace by @emlautarom1 in #8667 - Hide OP-CL specific options by @emlautarom1 in #8684
- Reduce
Forward header starting block number did not changed.exception to log. by @asdacap in #8683 - Refactor/Reduce
AuraNethermindApiusage. by @asdacap in #8686 - Optimize 12 x 20byte & 32byte OpCodes by @benaadams in #8687
- Perform stack writes as single 32 byte vector by @benaadams in #8691
- Reintroduce Jit time branch elimination by @benaadams in #8692
- Fixes one discv5 test by @ak88 in #8635
- Migrate to Microsoft.Testing.Platform by @rubo in #8190
- Fix/aura hive startup by @asdacap in https://github.com/NethermindEth/nethermind...
v1.32.4
Release notes
Fixed the peer discovery issue
After the Geth v1.16.0 release, there was a sudden drop in discovered Nethermind nodes in network crawlers. This version exposed one edge-case issue, which was much more likely to happen, and is now addressed.
Other improvements
Additionally, a few extra improvements were added to the general discovery phase of finding new peers and ensuring a high peer count can be achieved:
- #9046: Ensures we reuse the original request identifier when replying, fixing mismatches in ENR messages.
- #8712: Fixes corrupt snappy message when disconnecting fast due to too many peers.
- #9037: Speeds up how quickly inactive or problematic peers are dropped.
- #9043: Prefers peers on the same blockchain fork for gossiping to improve message propagation.
- #9040: Fixes an issue that could miss some transaction receipts during syncing.
- #9054: Optimizes peer-distance calculations for faster network operations.
Full Changelog: 1.32.3...1.32.4
v1.32.3
Release notes
Important
This release is a mandatory upgrade for all node operators of the Energy Web Chain.
The Zurich hard-fork of EWC is set to the block number 36871000, which is expected to occur in the UTC afternoon of August 5, 2025.
Major highlights
Addressed OOM issues during full and archive sync
More resilient syncing of Archive nodes with better memory management thanks to #8975
Fixed the issue with broken block processing thread when a block is suggested out of order
This is an edge case scenario, but with some consensus clients and under very rare circumstances, it tends to break the processing in #8683
Improved the general performance of a node and its stability
Improved peering and validation performance under heavy P2P demand (snapserving, mempool txs, etc) in #8968
Few extra changes which are improving overall node performance, like #8926, #8947, #8927
Additionally, whenever a node breaks via random database corruption, now Nethermind will shut down to ensure no further corruption of the database is happening, and with proper setup (via Docker, systemd, or in systems like DappNode), it may self-recover in a few minutes; in #8986
Full Changelog: 1.32.2...1.32.3
v1.31.13
Release notes
Important
This release is a mandatory upgrade for all node operators of the Energy Web Chain.
The Zurich hard-fork of EWC is set to the block number 36871000, which is expected to occur in the UTC afternoon of August 5, 2025.
Full Changelog: 1.31.12...1.31.13
v1.32.2
Release notes
Note
This release replaces v1.32.0 and v1.32.1 and addresses Linux and CPU compatibility issues reported for those versions.
Full Changelog: 1.32.1...1.32.2
v1.32.1
Release notes
Warning
Use v1.32.2 instead. This release replaces v1.32.0 and addresses compatibility issues with some Linux distros. However, it still has compatibility issues with some older or low-end CPUs.
Full Changelog: 1.32.0...1.32.1
v1.32.0
Release notes
Warning
Use v1.32.2 instead. This release has compatibility issues with older or low-end CPUs, Ubuntu 22.04, and some other Linux distros.
This release brings over 300 performance enhancements, protocol improvements, and developer-focused upgrades:
- Increase Ethereum Mainnet Gas Limit to 45MGas
- Drop the pre-merge history for Ethereum Mainnet (around 300GB smaller DB)
- Faster block production, sync, and pruning
- New admin RPCs and richer metrics for tracing and debugging
- EIP-4444 and EIP-2935 fixes, plus extended snapshot handling
- Refactors improving stability, modularity, and test coverage
Major highlights
Protocol
- Drop pre-merge history from Ethereum Mainnet
- It gives about 300GB in disk space
- Requires a full resync of a node to have an effect of that
- To preserve them on fresh sync add flags
--Sync.AncientReceiptsBarrier=0and--Sync.AncientBodiesBarrier=0
- RPC error support for EIP-4444 (pruned blocks)
- Fixes for EIP-2935 edge cases
Performance
- A lot of performance improvements which allows now to bump safely gas limit of Ethereum Mainnet to 45 MGas
- Significantly improved local block building and profitability logic
- State sync, pruning, blob fee calc
- Improved memory use by networking and Trie cache
- Parallel block downloading (with rollback safety)
- AVX512 and ARM64-specific boost for 256-bit integer arithmetic
JSON-RPC & metrics
- New JSON-RPC methods:
admin_addTrustedPeer,admin_removeTrustedPeer,admin_peerEvents - More granular metrics:
engine_getBlobsV1, pruning, block stats - Improved Geth-compatible
debug_tracesupport - Default extradata for local building includes Nethermind version (as per Besu, Erigon, Geth)
Chain support
- Updates to OP Superchain, World Chain, Hoodi, Taiko Pacaya
- Snap sync support for Energy Web
- Configuration fixes: deposit contracts, gas limits, ancient block barriers
CLI improvements
Shortened boolean command line option notation. For example, --metrics-enabled true can now be written as --metrics-enabled, omitting the value part. If the value is false, it still must be explicitly specified.
nethermind-cli
nethermind-cli is retired as deprecated. See the docs for suggested replacements.
Other improvements
- Major refactors: pruning, sync, metrics, plugins, discovery
- Plugin system enhancements and modular debug features
Changelog
- Cleanup/move more sync integration tests to DI by @asdacap in #8144
- Update sepolia chain size by @LukaszRozmej in #8155
- Auto-update fast sync settings by @core-repository-dispatch-app in #8149
- standardize BlobTxMissingBlobs error message by @yerke26 in #8129
- Merge eth_simulate_v1 to master by @rjnrohit in #8153
- Fix PivotTotalDifficulty in update configs action by @kamilchodola in #8161
- New filter restricting delegations in txpool by @ak88 in #8022
- Fix wrong parent block due to reorg by @flcl42 in #8159
- Regression test for BLS precompile caching consensus issue by @Marchhill in #8164
- requests validation hotfix by @rjnrohit in #8156
- No warnings with Engine Capabilites from V1 and V2 by @MarekM25 in #8125
- EIP-2935 Contract deployment fix by @MarekM25 in #8166
- Less Prewarmer work per tx (share scope for thread) by @benaadams in #8172
- check requests type validity by @rjnrohit in #8175
- Optimize TryCalculateFeePerBlobGas by @benaadams in #8173
- Proper Transaction
typeforeth_*calls when running Optimism by @emlautarom1 in #8157 - Added Additional Terms section in [Readme.md](http://readme.md/) by @AnavarKh in #8169
- Fix state override accessing state by @LukaszRozmej in #8168
- Make test more reliable by @asdacap in #8177
- Add SnapSync=true to EnergyWeb and Volta by @kamilchodola in #8000
- Cleanup exosoma by @MarekM25 in #8181
- Holesky & Sepolia Pectra by @MarekM25 in #8115
- Fix some unit test by @asdacap in #8184
- Add World Chain to README by @rubo in #8189
- Fix debug module wrong configuration by @asdacap in #8185
- Add Nimbus-eth1 & EthereumJS to client types by @benaadams in #8192
- Cleanup/remove last seen map by @asdacap in #8183
- Automate Superchain Registry chain support by @emlautarom1 in #8105
- Update libp2p by @Marchhill in #7916
- Implement admin_peerEvents for rpc module by @StevenChongHuo in #7999
- Migrate to
.slnxby @rubo in #8195 - Feature/filter setcode tx by @ak88 in #8167
- Init OP deployer account before setting the code by @flcl42 in #8193
- Fix workflow flags for "Update OP Superchain chains" by @emlautarom1 in #8198
- Auto-update fast sync settings by @core-repository-dispatch-app in #8180
- Fix Fast Sync settings in "Update OP Superchain chains" worflow by @emlautarom1 in #8200
- Update OP Superchain chains by @core-repository-dispatch-app in #8201
- Rename
taiko-mainnetconfiguration totaiko-alethiaby @rubo in #8188 - Add github actions scanning to CodeQL workflow by @yevh in #8165
- Cleanup/Deduplicate blockdownloader code by @asdacap in #8147
- Add worldchain to sync supported chains by @stdevMac in #8060
- Various fixes to sync tests by @kamilchodola in #8206
- Implement admin_addTrustedPeer rpc endpoint by @richardgreg in #7891
- Refactor IsBetterThanHead by @LukaszRozmej in #8207
- Fix trusted nodes by @benaadams in #8211
- Shorten boolean command line option notation by @rubo in #8179
- Fix eth stats by @benaadams in #8215
- Update OP Superchain chains by @core-repository-dispatch-app in #8212
- feature: Add support for block validation (flashbots_validateBuilderSubmissionV3) by @rjnrohit in #7335
- Minor fixes for SyncSupported chains by @kamilchodola in #8217
- fix gnosis state / blockchain tests runner by @yerke26 in #8216
- Blockchainprocessor channel use by @benaadams in #8218
- Fix persist cache remove node by @asdacap in #8229
- AuthTuple ChainId 64->256 in test setup by @MarekM25 in #8226
- Split storage ranges to parallelize execution by @damian-orzechowski in #7733
- Reintroduce missing 4844 RPC fields (GasPrice and V) by @LukaszRozmej in #8232
- Refactor ShutterTime to SlotTime by @Marchhill in #8233
- Limit task count in tests by @asdacap in #8231
- Refactor/isolate main transaction processor by @asdacap in #8196
- Fix/initsteps race condition by @ak88 in #8145
- Accept local tx even when syncing by @benaadams in #8242
- Optimise: make SlotTime a class by @Marchhill in #8245
- Skip SLOAD and SSTORE lookups on empty storage by @benaadams in #8248
- Update OP Superchain chains by @core-repository-dispatch-app in #8246
- Fix RecoveryQueueSize Metric (off by 1) by @benaadams in https://github.com/NethermindEt...
v1.31.12
Release notes
Important
This release is a mandatory upgrade for all node operators of the Volta chain.
The Zurich hard-fork of Volta is set to the block number 32597900, which is expected to occur in the UTC afternoon of July 8, 2025.
Changes
Full Changelog: 1.31.11...1.31.12