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 before the final 1.21.0 version is released.
- Removed obsolete xDai configs
- Please make sure that you switched from
xdai.cfg
andxdai_archive.cfg
tognosis.cfg
andgnosis_archive.cfg
- Please make sure that you switched from
- Trie Recovery functionality
- This is a new mechanism that 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 #5879
- Fix required number in logs by @deffrian in #5947
- Include block count when processing multiple blocks by @benaadams in #5892
Peering improvements
- Allow setting bucket size to 16 or higher which results in improved peer discovery at initial phases of sync by @asdacap in #5964
- Perf/randomly drop discovery bucket entry by @asdacap in #5966
- Feature/feed DNS to discv4 by @asdacap in #6035
- Dont stop peer connection on any exception by @asdacap in #6038
Other changes
- MaxDegreeOfParallelism defaults for full pruning by @MarekM25 in #5662
- Add MCopy to Evm by @Demuirgos in #5791
- Remove ropsten by @MarekM25 in #5874
- Add more gnosis bootnodes by @MarekM25 in #5910
- Added example value of TraceTypes in TraceModule by @Demuirgos in #5917.
- Rename SHA3 opcode to KECCAK256 by @Demuirgos in #5929
- Perf/compaction readahead which reduces IOPS requirement during snap sync by @asdacap in #5875
- Add NewPayload timoeut based on config by @kamilchodola in #5970
- New parameter which allows to manipulate maximum time to process
engine_newPayload
requests.
Current default value is 7 seconds.
Usage example:
--Merge.NewPayloadTimeout=10
- New parameter which allows to manipulate maximum time to process
- Make pivot update attempts infinite by @marcindsobczak in #5988
- Previously
UpdatingPivot
stage was enabled for first 15 minutes but now considering it stable we decided to enable it as a default strategy - can be disabled using--Sync.MaxAttemptsToUpdatePivot=0
- Previously
- Implement
debug_standardTraceBlockToFile
method by @rubo in #5501 - Remove wit configs - wit.json/wit.cfg by @MarekM25 in #6010
- Remove
Data
field from serialized Transactions by @emlautarom1 in #6079 - Rerun logging setup on NLog config change by @emlautarom1 in #6051
New Contributors
- @Frenzoid made their first contribution in #5862
- @JKincorperated made their first contribution in #5963
- @brbrr made their first contribution in #6087
Full Changelog: 1.20.3...1.21.0