Releases: NethermindEth/nethermind
v1.25.3
Release notes
⚠️ This release is a mandatory upgrade for all nodes operating on the following chains: Sepolia, Holesky, and Chiado.
Please update your node to this version to ensure correct node functionality.
Major highlights
Sepolia Dencun hard fork
The Sepolia Dencun hard fork is scheduled on Jan 30, 2024 at 22:51:12 UTC (epoch 132608)
Chiado Dencun hard fork
The Chiado Dencun hard fork is scheduled on Jan 31, 2024 at 18:15:40 UTC (epoch 516608)
Holesky Dencun hard fork
The Holesky Dencun hard fork is scheduled on Feb 07, 2024 at 11:34:24 UTC (epoch 29696)
Full Changelog: 1.25.2...1.25.3
v1.25.2
Release notes
This hotfix addresses the consensus issue in Nethermind that was introduced in v1.23.0. This release is mandatory for all Nethermind users.
No resync required. A consensus client restart is required without the need to resync it.
The v1.22.0 and below weren't affected.
A full postmortem will be published soon.
v1.25.1
⛔ THIS VERSION HAS A CONSENSUS ISSUE. Use v1.25.2 or later instead.
Release notes
Major highlights
Goerli Dencun hard fork
⚠️
This version supports the upcoming Goerli Dencun hard fork that is scheduled on Jan 17, 2024 at 06:32:00 UTC (epoch 231680)
Please update your node to this version to ensure correct node functionality.
Chiado Dencun hard fork
⚠️
This version supports the upcoming Chiado Dencun hard fork that is scheduled on Jan 31, 2024 at 18:15:40 UTC (epoch 516608)
Please update your node to this version to ensure correct node functionality.
Fixed eth_syncing
invalid behavior
In v1.25.0, the eth_syncing
method misbehaves for those who upgraded from the older version to the latest one (returned "syncing" when a node was fully synced). This version addresses this issue, so it properly returns the sync status.
Fixed extra bodies and receipts downloaded for the Mainnet after upgrading the long-living node
In v1.25.0, in some cases, the old bodies and old receipts started to download even though it should not have been the case on the synced nodes. This usually happens for older nodes that were synced a long time ago without any resync in the meantime.
Full Changelog: 1.25.0...1.25.1
v1.25.0
⛔ THIS VERSION HAS A CONSENSUS ISSUE. Use v1.25.2 or later instead.
Release notes
Major highlights
Goerli Dencun hard fork
⚠️
This version supports the upcoming Goerli Dencun hard fork that is scheduled on Jan 17, 2024 at 06:32:00 UTC (epoch 231680)
Please update your node to this version to ensure correct node functionality.
Optimism Canyon hard fork
The initial support of the OP in Nethermind was implemented right before the Canyon hard fork happened. Because of that, Nethermind nodes could not follow the chain after Canyon activation. Since this version, Nethermind supports Canyon hard fork on all OP-related chains.
Improved JSON serialization
We replaced the famous Json.NET library with the System.Text.Json implementation. As a result, we drastically reduced the memory overhead, improved the block processing time, and sped up JSON-RPC handling in general.
JavaScript tracers
The debug_trace*
JSON-RPC methods now support custom tracers written in JavaScript. This allows custom tracing logic and is in line with the Geth implementation.
Improved concurrency and reduced lock contention
- Changed to more scalable locks for both the transaction pool and LRU caches, ensuring better scalability on systems with high core counts.
- Used more scalable priority locks where block production and other tasks cross to give precedence to block production, optimizing performance in critical areas.
- During signature recovery, it was changed to access the transactions from the pool serially to reduce lock contention on the transaction pool while maintaining parallel processing for ECDSA and Keccak calculations for faster throughput.
New JSON-RPC methods
eth_getBlockReceipts
that is based on the previous Parity implementation and gives an easier way to get all receipts for transactions within a specified blockdebug_getRawBlock
debug_getRawReceipts
debug_getRawHeader
debug_getRawTransaction
These methods have been added to have a possibility to analyze encoded block/receipt/header/transaction
Downloading all historical bodies and receipts by default
On newly synced nodes, instead of using barriers set for a block with deposit contract for beacon chain (11052984), the node will sync all bodies and receipts till genesis:
- Healthier for the entire network
- Makes the database size bigger for freshly synced nodes (about 200 GB extra space will be needed)
- The change is made in a way that already synced nodes that are synced till the ancient barrier 11052984 will not sync anything in addition (to sync all of them, resync from scratch is required)
- This may be revisited as part of EIP-4444
Other performance improvements
With the migrations to .NET 8, we got a performance boost in various areas and reduced memory usage, which is especially beneficial for validators.
Changelog
New features
- Implemented eth_getBlockReceipts by @Marchhill in #6281
- Feature/ratelimit discovery messages by @asdacap in #6265
- Feature/javascript tracers by @LukaszRozmej in #6217
- [Config] Change default barriers of mainnet to 0 by @smartprogrammer93 in #6225
- Improved Json Serialization by @benaadams in #6152
- Add new RPC methods debug_getRawBlock, debug_getRawReceipts, debug_getRawHeader, debug_getRawTransaction by @Demuirgos in #6368
- Feature/exit on blocknumber by @asdacap in #6428
- Change locks to reduce lock contention by @benaadams in #6417
Cancun
- [Cancun]{Spec} Goerli config and fix for
ChainSpecBasedSpecProvider
by @smartprogrammer93 in #6409 - [cancun] fix
BlobBaseFee
not consistent with geth whenExcessBlobGas
is null by @smartprogrammer93 in #6320 - Blob txs reorgs by @marcindsobczak in #6254
- Enable blob txs support in goerli configs by @marcindsobczak in #6430
Optimism
Performance
- Serialize Json direct to Http stream rather than through intermediary buffers; further increasing performance and reducing latency of Json RPC by @benaadams in #6369
- Fix double write during full pruning by @asdacap in #6415
- Return error codes in Evm rather than throwing more expensive exceptions by @benaadams in #6406
- Reduce memory for GetPayloadBodiesByRangeV1 and GetPayloadBodiesByHashV1 by streaming the results immediately rather than building up the total response and then sending it all at once by @benaadams in #6287
- Don’t throw exceptions for missing nodes when searching for them (missing nodes) during sync by @benaadams in #6425
- Remove duplicate calls to FindHeader in eth_getLogs by @benaadams in #6421
- Remove Duplicate call to TryGetPendingTransaction in RPC by @benaadams in #6420
- RateLimiter: Remove unneeded async statemachine by @benaadams in #6418
- Increase regex cache size; which reduces memory usage in logging by @benaadams in #6408
- Reduce dictionary lookups by @benaadams in #6373
- Fix excessive timer allocation in rate limiter by @benaadams in #6354
- Use TryGetValue to halve Dictionary lookups by @benaadams in #6352
- Use runtime throw helpers to increase hot code (reduce cold code) in processor cache by @benaadams in #6348
- Broadcast local txs only if MaxFeePerGas is equal at least 70% of current base fee by @marcindsobczak in #6350
Metrics
- added metrics for bad blocks by @Marchhill in #6270
Logging
Bug fixes and stability
- [Fix] Potential fix to missing tx index sometimes (related to reorgs) by @smartprogrammer93 in #6422
- fix(db, rocks): total table size should include blobs by @shekhirin in #6289
- Fix missed release span on column db by @asdacap in #6302
- Fixed FinalTotalDifficulty based on genesis by @MarekM25 in #6435
Other changes
- Migrate to .NET 8 by @rubo in #6150
- Unify reputation settings by @asdacap in #6242
- Update Gnosis bootnodes by @4rgon4ut in #6329
- Refactor/state cleanup by @asdacap in #6260
- Skip signature only for TxType.DepositTx by @LukaszRozmej in #6349
- fix: typos in comment by @AdventureSeeker987 in #6360
- chore(src/Nethermind): typo fix by @dzizazda in #6363
New Contributors
- @Marchhill made their first contribution in #6281
- @shekhirin made their first contribution in #6289
- @4rgon4ut made their first contribution in #6329
- @shashankshampi made their first contribution in #6301
- @AdventureSeeker987 made their first contribution in #6360
- @dzizazda made their first contribution in #6363
Full Changelog: 1.24.0...1.25.0
v1.24.0
⛔ THIS VERSION HAS A CONSENSUS ISSUE. Use v1.25.2 or later instead.
Release notes
⚠️ WARNINGThis version cannot be downgraded. Once you upgrade to this version or sync from scratch with it, you cannot downgrade to any previous version.
Major highlights
-
Improvements to the headers database
- Reduce IOPS and bandwidth requirements during sync by up to 200Mbps or ~8% of overall bandwidth during sync
- Reduce IOPS and bandwidth requirements when serving headers to peers
- Require an additional 800MB of metadata database for the Mainnet
-
Supported networks adjustments
- Added OP Sepolia and Base Sepolia support
- Added archive configuration support for both Optimism and Base
For more info, see the
-c, --config <value>
flag and supported networks.For Optimism networks, ensure that networking is disabled to reduce unnecessary hardware usage.
Changelog
New features and important changes
Optimism
- Remove syncing check from ReviewBlockTree step by @jmederosalvarado in #6332
- Disable networking on OpStack configs by @jmederosalvarado in #6334
- Fix / Add OP configs by @jmederosalvarado in #6364
Bug fixes and stability
- Skip signature only for TxType.DepositTx by @LukaszRozmej in #6349
- Use Kestrel on Windows for metrics by @benaadams in #6326
Full Changelog: 1.23.0...1.24.0
v1.23.0
⛔ THIS VERSION HAS A CONSENSUS ISSUE. Use v1.25.2 or later instead.
Release notes
Major highlights
-
Optimism Support
-
Nethermind can now be used as an execution client for OP Stack chains, including Optimism and Base mainnets.
-
OP Stack network have a EL and CL concepts similar to Ethereum. Nethermind works as EL client, refer to optimism’s docs for how to run
op-node
as your CL client. -
Just run
nethermind -c op-mainnet
ornethermind -c base-mainnet
and you’re ready. -
The Canyon upgrade went live in Optimism and Base testnets very recently. Support for this upgrade is being worked on at the moment and will land in a future release, so if you try to sync this networks you won’t be able to go past the hardfork block.
💡 Some OP Stack networks (e.g. Op Mainnet and Op Goerli) have some legacy state that you need to download before actually running the client. We are hosting this legacy data as a snapshot file in our servers. The Nethermind client will automatically download and decompress it when you run it for the first time on Optimism Mainnet, no need for manual downloads. Refer to the snapshot plugin docs for more info.
-
-
Initialize Database from Snapshot
- There is now support for initializing the nethermind database from a
.zip
snapshot file. - This will be useful if you want to have backup copies of your node’s database for faster setup.
- For more information refer to the plugin docs.
- There is now support for initializing the nethermind database from a
-
Reduced memory usage spikes when node overloaded with CL requests
- Over the past few weeks, we've noticed a spike in memory usage on nodes, primarily due to numerous simultaneous GetPayloadBodiesByRangeV1 requests from CL clients.
- Our developers have identified an opportunity for optimization. Through these improvements, we've managed to significantly reduce memory consumption in high-stress scenarios. During our stress tests, we observed a reduction in additional RAM usage from 12GB to just 1-1.5GB.
- Furthermore, this memory is quickly freed up, allowing the node to return to its normal usage levels.
Changelog
New features and Important changes
- Optimism plugin by @deffrian in #6146
- Initialize database from snapshot by @jmederosalvarado in #6177
- Activate (most) JsonRPC endpoints before BlockReprocessing by @Demuirgos in #6143.
- Reduce memory for GetPayloadBodiesByRangeV1 and GetPayloadBodiesByHashV1 by @benaadams in #6287
Cancun
- TxPool: refactoring for blob txs by @marcindsobczak in #5953
- Make EIP-4844 parameters configurable by @rubo in #6192
- Rename EIP-4844 chain spec parameters by @rubo in #6205
- Upgrade ckzg which uses the final setup by @flcl42 in #6208
- Announce txs to newly connected peer only when we are synced by @marcindsobczak in #6202
- Use blob gas instead of count by @flcl42 in #6229
Gnosis
Bug fixes and stability
- Fix unable to decode auth message with invalid version by @asdacap in #6180
- Fix on handshake failure not disconnecting connection by @asdacap in #6179
- Fix tx index was removed during reorg by @asdacap in #6188
- Fix Antithesis NullPointerException in Evm by @Demuirgos in #6191
- Fix incorrect exitcode in SIGTERM and SIGINT. by @asdacap in #6215
- Fix max write buffer number is 0 on holesky. by @asdacap in #6216
- Handle concurrent WebSockets messages by @emlautarom1 in #6210
- Fix old blocks hang on insert failure by @asdacap in #6233
- Fix/nethermind not sending hello on disconnect by @asdacap in #6241
- Fix/gas estimations precompile error by @LukaszRozmej in #6259
Performance
- Perf/prefix block key with blocknum by @asdacap in #6158
- Perf/NoWAL during OldBodies by @asdacap in #6227
Logging
- Fix typos in logs and comments by @xiaolou86 in #6228
- BlockDownloader - client type in logs by @MarekM25 in #6240
Other changes
- Feature/more diagnostics bad blocks by @LukaszRozmej in #6207
- Blob test tool files moved by @ak88 in #6168
- rename keccak by @tanishqjasoria in #6197.
- Extract revert messages by @emlautarom1 in #6226
- Remove
Rinkeby
testnet by @emlautarom1 in #6273 - Select proper drive when using
VolumeFreeSpace
trigger by @emlautarom1 in #6269
New Contributors
- @ak88 made their first contribution in #6168
- @xiaolou86 made their first contribution in #6228
Full Changelog: 1.22.0...1.23.0
v1.22.0
Release notes
⚠️ IMPORTANTSince v1.21.0, the Nethermind executable has been renamed from
Nethermind.Runner
tonethermind
.
Please update your setups accordingly, if any.
Major Highlights
- Memory management improvement
- With few optimizations added to the client, we are observing now dropped and more stable memory usage in the client's lifetime.
- Long-running mainnet validator nodes reported around 25% memory consumption reduction.
- Cancun preparation moving forward
- Adjusting our code to hive test findings
- TxPool refactor to work well with blob transactions
- Library loading issue resolved for MacOs when building from source
- Holesky adjustments
- After the Holesky launch, a few minor things were discovered - all of the problems were addressed, and now the Holesky experience should be better
Changelog
Cancun
- eip-7516: BLOBBASEFEE opcode added by @smartprogrammer93 in #6096
- Eip4788 : Update address and buffer size (Post audit) by @Demuirgos in #6098
- Partially validate block with unknown parent by @flcl42 in #6085
- Set head according to fcuState even when attributes are incorrect by @flcl42 in #6144
- Load ckzg properly by @flcl42 in #6159
- TxPool: refactoring for blob txs by @marcindsobczak in #5953
Performance improvements
- Perf/set malloc ops by @asdacap in #6110
- Perf/Malloc trimmer by @asdacap in #6111
- Perf/buffersize adjustment by @asdacap in #6122
- Perf/sorted batch by @asdacap in #6142
- Perf/improve writebatch parallelism by @asdacap in #6151
- Perf/Reduce number of files in DB. by @asdacap in #6165
Holesky
- Holesky FinalTotalDifficulty to be equal to genesis block's one by @flcl42 in #6190
- Fix
eth_syncing
in young chains by @emlautarom1 in #6181
Other changes
- Fix
eth_getLogs
filtering for empty addresses list by @emlautarom1 in #6094 - Ensure
ChainId
is always set in 2930 and 1559 txs by @emlautarom1 in #6061 - Remove HTTP log spam on default settings by @emlautarom1 in #6097
- Remove mining methods by @bitcoinbrisbane in #6106
- Don't override
HealthCheckService
log levels by @emlautarom1 in #6109 - Fix symlinks for macOS packages by @rubo in #6095
- Reject non-nullable aggregate types when deserializing method parameters by @emlautarom1 in #6104
- fix AggregateException being thrown instead of TimeoutException by @LukaszRozmej in #6123
- Fix typos by @AKABABA-ETH in #6137
- Support configurable
ethstats
update interval by @emlautarom1 in #6147 - Properly handle duplicates in
accessList
by @emlautarom1 in #6145 - Use
TimeoutException
onLoadGenesisBlock
by @emlautarom1 in #6160 - Fix
eth_syncing
in young chains by @emlautarom1 in #6181 - Handle concurrent WebSockets messages by @emlautarom1 in #6210
New Contributors
- @AKABABA-ETH made their first contribution in #6137
Full Changelog: 1.21.1...1.22.0
v1.21.1
Release notes
This hotfix release is a recommended update for all network operators and addresses the invalid block production issue initially reported on the Gnosis chain from October 19 to 20.
⚠️ IMPORTANTSince v1.21.0, the Nethermind executable has been renamed from
Nethermind.Runner
tonethermind
The Docker images entry points have been updated accordingly.
Please update your setups accordingly, if any.The obsolete
--config xdai
option has been deprecated in favor of--config gnosis
.
Also, to avoid syncing from scratch, rename the "xdai" directory to "gnosis" in the Nethermind database directory (by default, "nethermind_db").
Changelog
- Bad blocks - potential fix by @MarekM25 in #6212
- Fix on handshake failure not disconnecting connection by @asdacap in #6179
Full Changelog: 1.21.0...1.21.1
v1.21.0
Release notes
⚠️ IMPORTANT
- The Nethermind executable has been renamed from
Nethermind.Runner
tonethermind
- The Nethermind Launcher executable has been renamed from
Nethermind.Launcher
tonethermind-launcher
- The Nethermind CLI executable has been renamed from
Nethermind.Cli
tonethermind-cli
The Docker images entry points have been updated accordingly.
Please update your setups accordingly, if any.
Major highlights
-
Unified Nethermind executable names
As per the above warning — Nethermind executable names have been changed to be the same across all distribution channels. This may be a breaking change, so please pay extra attention and ensure your scripts are adjusted accordingly. -
Removed obsolete xDai configs
The configuration options--config xdai
and--config xdai_archive
has been removed in favor of--config gnosis
and--config gnosis_archive
accordingly.⚠️
Users still using the obsoletexdai
moniker also need to rename thexdai
directory tognosis
that is located in the Nethermind database directory (by default, nethermind_db) to avoid syncing from scratch. -
Trie Recovery functionality
- This new mechanism should recover a database when there is a recognized case with a missing node. It will download necessary data from the network, and after a very short downtime database should be repaired.
- Please read more at #5861
-
Throttling for JSON-RPC calls to ensure the stability of a node under a high-load
- Together with the Gateway team, which uses plenty of Nethermind clients to serve JSON-RPC for Gnosis, we noticed that when flooding with RPC calls that take long to execute, the call queue gets clogged, causing the client to stall.
- Added new configuration option:
--JsonRpc.RequestQueueLimit
with the default value of 500, which causes all requests above that limit to be canceled immediately. This may result in some limitations on requests queued (can be adjusted accordingly to your needs), but in our internal testing, it allowed the node to process successfully twice as many calls because of reduced traffic on a single node. - At first, PR applied for
eth_*
calls and later expanded to all JSON-RPC calls.
-
Significant reduction of OldBodies sync time
- During our internal testing, we found out that one of the configuration options wasn’t properly enabled.
- Enabling it caused SIGNIFICANT improvements in OldBodies phase. Examples below:
- Linux AMD machine (high-end) - 3h 45min to 1h 40min
- Arm AWS Graviton3 machine - 19h to 2h
- Windows BareMetal machine with limited network bandwidth - From 14h for 65% OldBodies (and crashed) to 3,5h in total
-
Improved sync time with better DB tuning option
- Old Headers sync faster on AMD machine by 18,8% and on ARM by 18,9%
- Snap Sync faster on AMD machine by 27,8% and on ARM by 52%
- Old Receipts faster on AMD machine by 12,5% and o ARM by 16,3%
-
Cancun progress update
- Majority of implementation is already merged into master branch
- Team is transitioning into more testing-oriented approach focusing on devnets and better tooling for internal/external testing of Cancun EIPs
-
Support for new Holesky chain
- This release supports the new testnet in space: Holesky. More details can be found here: https://github.com/eth-clients/holesky
- To run Nethermind on new chain use:
- For a Snap Sync node
--config holesky
. - For an archival mode setup
--config holesky_archive
.
- For a Snap Sync node
Changelog
New features and Important changes
- Unify Nethermind executable name by @rubo in #5908
- Improve Nethermind executable rename handling by @rubo in #6039
- Trie recovery by @LukaszRozmej in #5861
- Throttle all RPC modules by @MarekM25 in #5957
- Throttle Eth_ module queue by @MarekM25 in #5945
- Remove xDai configuration by @rubo in #5978
Cancun
- Update BLS12-381 and EIP-4844 precompiles by @flcl42 in #5857
- Add shard blob tx gas calculations by @flcl42 in #5596
- Cancun fixes + EIP 4788 by @MarekM25 in #6009
- EIP-6780: SELFDESTRUCT only in same transaction by @smartprogrammer93 in #4704
- Decrease
MaxSizeOfTxForBroadcast
from 128KB to 4KB by @marcindsobczak in #5871 - [cancun] [eip6780] apply danno's clarification: disable eth burn on preexisting contract when inheritor equals contract address by @smartprogrammer93 in #6006
- Fix length calculations of blob-type txs by @marcindsobczak in #5884
- Update TSTORE and TLOAD opcode values to match Eip1153 updates by @Demuirgos in #5839
- Make Engine *V3s handle V3 requests only by @flcl42 in #5845
selfdestruct
in initcode should destroy by @smartprogrammer93 in #5913- Rename data gas to blob gas by @flcl42 in #5967
Bug fixes and stability
- Add missing peer types to limits by @benaadams in #5838
- Fix/fix json stats report by @LukaszRozmej in #5831
- Fix/receipt migration not working with compact receipt by @asdacap in #5828
- Perf/smoother peer discovery by @asdacap in #5846
- Fix/disconnect deserialize exception by @asdacap in #5866
- Fix RocksDB dependency issues on macOS x64 by @rubo in #5883
- Optimize, clean up data gas calculations by @flcl42 in #5891
- Fix gas estimations by @emlautarom1 in #5973
- Fix receipt recovery & migration by @emlautarom1 in #5989
- Fix sync pivot not set when dbload by @asdacap in #6080
- Fix old blocks downloaded beyond old barrier by @asdacap in #6059
- SecondsPerSlot in eth_estimateGas by @MarekM25 in #6037
- Fix fast header may miss a retried batch by @asdacap in #6066
- Fix
accesList
handling on Transactions by @emlautarom1 in #6031 - Return full REVERT error message by @emlautarom1 in #6030
- Fix/missing state root on start by @asdacap in #6055
- [Fix][PivotUpdator] Update receipts and bodies Barriers by @smartprogrammer93 in #6054
Performance
- Reduce Evm Stackspace clearing by @benaadams in #5826
- Adjust snap request threshold by @asdacap in #5842
- Prefer code from code cache for Create by @benaadams in #5854
- Pass ProcessingBranch via in by @benaadams in #5858
- Skip alloc for zero sstore by @benaadams in #5867
- Receipt clean up in batch by @benaadams in #5870
- Use ready to run by @benaadams in #5873
- Feature/disable tx gossip during sync by @LukaszRozmej in #5850
- Evm optimisations by @benaadams in #5877
- Use AllocateUninitializedArray for LargerArrayPool by @benaadams in #5909
- Feature/bodies and receipts request sizer by @asdacap in #5994
- Perf/optimize old bodies memory by @asdacap in #6008
- Fix blob files not enabled by default by @asdacap in #6060
Logging
- Don't use decimal percentages in peers report by @benaadams in #5841
- Only output Changing state if state actually changes by @benaadams in #5840
- Use better processing timer for logging by @benaadams in #5843
- Don't use DarkGray by @benaadams in #5849
- Even more logging improvements. by @LukaszRozmej in #5851
- Remove warning in failed JSON RPC call, when still syncing relevant data by @LukaszRozmej in #5853
- Make missing root hash exception clearer by @asdacap in https://github.com/Nether...
v1.20.4
Release notes
This release supports the new testnet in space: Holesky
Due to the unsuccessful initial launch of the Holesky network, the date has been rescheduled. Below are the updated details:
- Launch date: September 28, 2023, 12:00 UTC
- Epoch time: 1695902400
- Network id: 17000
More details can be found here: https://github.com/eth-clients/holesky
To use Nethermind with this new network, follow these steps:
-
Run Nethermind with new config:
- For a Snap Synced node, use the flag
--config holesky
. - For an archival mode setup, use the flag
--config holesky_archive
.
- For a Snap Synced node, use the flag
-
Run a consensus client that supports the Holesky network.
Changelog
Holesky
- [Fix][Holesky] timestamps and genesis updates by @smartprogrammer93 in #6112
Full Changelog: 1.20.3...1.20.4