Releases: NethermindEth/nethermind
v1.18.0
Release notes
Major highlights
- Significant memory usage reduction
Check out the graph below for v1.18.0 vs previous versions
- A new experimental full pruning method
This significantly reduces full pruning time at the expense of RAM. It can be turned on via--Pruning.FullPruningMemoryBudgetMb <memory budget>
. Internal testing shows a 2-4x reduction in pruning time with 4000 MB of memory budget and a 4-7x reduction with 8000 MB with a diminishing return above 16000 MB. - Important stability fixes
We fixed edge case bugs during full pruning that could result inTrieException
errors. We also improved the stability of the client by auto repair from the "invalid best state calculation" error. In some setups, Nethermind used to require root permissions because of the current implementation. Issues related to missing total difficulty on archive nodes are also fixed. Check the full changelog for details. - Improved sync time and block processing
In our internal tests with a good network and hardware, Nethermind v1.18.0 can start attesting blocks on the Ethereum Mainnet in just over an hour. After 4 hours, the full download (including bodies and receipts) is completed leading to a steady state and improved attestations. - Progress toward the next hard-forks
We merged @gnosischain withdrawals and started merging 4844-related PRs.
New features
-
Disk space savings for non-validator nodes
You can significantly save disk space if you don't need chain history -- old bodies and receipts. Validators shouldn't enable this setting, because consensus clients require history to sync deposits. With these settings turned on, you will save around 450 GB of disk space for Ethereum Mainnet. To enable this feature, set--Sync.NonValidatorNode true --Sync.DownloadBodiesInFastSync false --Sync.DownloadReceiptsInFastSync false
-
Configurable startup disk space check
Added a new check for free disk space during node startup (Health Checks plugin). By default, the node will shut down if available space is less than twice the shutdown threshold or half of the warning threshold (if specified). A new flag--HealthChecks.LowStorageCheckAwaitOnStartup true
can suspend initialization until enough free disk is available for safe node operation.Change is provided especially to address cases when a node is hosted in an environment with automatic restart, e.g. docker-compose with restart policy.
-
Pass-through RocksDB options
Allows specifying arbitrary RocksDB settings. The setting must be dynamically configurable. It can be passed as JSON to the--Db.AdditionalRocksDbOptions
ofDbConfig
. -
Additional metrics output
A new option of publishing the metrics that can be gathered viadotnet-counters
. To enable counters to pass, set--Metrics.CountersEnabled true
.
They can be collected from a running Nethermind process usingdotnet-counters collect -n Nethermind.Runner
.
Experimental features
- Flags to tune RocksDB during sync to minimize write amplification at the expense of read amplification (during sync only) saving some SSD write endurance. It can be turned on via
--Sync.TuneDbMode <level>
where<level>
isWriteBias
,HeavyWrite
, orAggressiveHeavyWrite
. Some users may use this to reduce sync time while others may use it to increase it.
Changelist
Cancun
Gnosis
- Added support for Gnosis beacon chain push withdrawals @rubo [#5160]
- Added timestamp activation for EIP-170 and EIP-2537 by @deffrian [#5338]
- Fixed the block lookup issue for the Chiado archive configuration by turning off pruning by default by @MarekM25 [#5616]
- Renamed "xDAI" to "Gnosis" on client startup by @MarekM25 [#5502]
JSON-RPC
- Added
eth_getAccount
endpoint by @Demuirgos [#5352] - Improve
eth_getFilterChanges
error codes by @LukaszRozmej [#5513] - Added Geth-compatible boolean flags for transaction inclusion for the
newPendingTransactions
andnewHeads
options ofeth_subscribe
JSON-RPC method [#5299]
Metrics
- Introduction of System.Diagnostics.Metrics by @Scooletz [#5441]
- Add missing metric
PendingTransactionsHashesSent
in eth68 handler by @marcindsobczak [#5478]
Bug fixes and stability
- Fix crash after full pruning complete by @asdacap [#5458]
- Fix random trie exception after pruning by @asdacap [#5471]
- Auto repair for Invalid Best State Calculation by @MarekM25 [#5617]
- Fix required root access to some directories by @deffrian [#4320]
- Fix edge case with Total Difficulty during archive-sync by @MarekM25 [#5566]
- Fix issues related to total difficulty by @deffrian [#5152] [#5439]
- Fix/statesync stuck on bad peer by @asdacap [#5131]
- Check free disk space during startup by @damian-orzechowski [#5153]
- Fix occasional start-up hang or crash by @benaadams [#5547]
- Disconnect Peers based on ForkId validations by @smartprogrammer93 [#5172]
- Feature/max open files flag and write rates limit by @asdacap [#5287]
- Don't disconnect peers on fast sync criteria by @LukaszRozmej [#5293]
- Add missing ReportActionEnd on pre-Homestead blocks by @LukaszRozmej [#5316]
- Sleep peer if can't get account range by @asdacap [#5323]
- TraceStore - Check depth when serializing by @LukaszRozmej [#5344]
- Fix Allocated report by @LukaszRozmej [#5351]
- Fix exception from concurrent use of List by @benaadams [#5385]
- Fix SnapSync warning by @tanishqjasoria [#5388]
- Stronger guarantees of state return during failures by @benaadams [#5389]
- Fix missing db statistics for column family by @asdacap [#5428]
- Fix fast header disconnecting peers sometimes by @asdacap [#5434]
- Handle TaskCancelledException on startup by @smartprogrammer93 [#5492]
- Fix column families config by @asdacap [#5545]
- Fix arraypool hangs when capacity is 0 by @asdacap [#5562]
Plugin development
To make Nethermind plugin development easier, we published Nethermind reference assemblies as Nethermind.ReferenceAssemblies
NuGet package and as a separate archive to GitHub Releases [#5496]
Logging
- Print version on startup by @deffrian [#5467]
- Fix "Parent wasn't processed" in logs by @Demuirgos [#5354]
- Cleanup in logs. Changed false positive warnings to info by @MarekM25 [#5297] [#5493]
- Fix missing jwt warning by @julio4 [#5362]
- Fix processing speed is -1. by @asdacap [#5551]
Performance
- Disable OldBodies/Receipts for non validator nodes by @deffrian [#4755]
- Upgrade to RocksDB v8 by @rubo [#5557]
- Remove IMessageSerializer, use IZeroMessageSerializer for all messages by @tanishqjasoria [#5114]
- Perf/idb uses span as key by @asdacap [#5155]
- StorageCell byref by @Scooletz [#5265]
- Skip intermediate MemoryStream in EciesCipher.Encrypt by @benaadams [#5269]
- Use input buffer directly for Sha256Precompile by @benaadams [#5270]
- Only re-snapshot SortedPool on changes by @benaadams [#5272]
- Make ArrayPoolList.GuardIndex inlinable by @benaadams [#5275]
- .AsSpan().Slice(x,y) => .AsSpan(x,y) by @benaadams [#5277]
- Refactor tx filtering by @marcindsobczak [#5281]
- StorageTree opitimization by @Scooletz [#5283]
- Dispose ArrayPoolList after use by @benaadams [#5285]
- Multi-threaded block signature recovery by @LukaszRozmej [#5288]
- Filter low gas txns early by @benaadams [#5290]
- BouncyCastle.KeccakDigest => Nethermind.KeccakHash by @benaadams [#5291]
- Remove 14MB from RunPeerCommit allocations by @benaadams [#5294]
- Release non-null empty spans by @benaadams [#5308]
- Remove 28MB of permanent allocations from SyncStatusList (32MB -> 8MB) by @benaadams [#5309]
- Remove 15MB of string allocations in SimpleDb.LoadData by @benaadams [#5310]
- ValidateSignature move from BigInteger to UInt256 by @benaadams [#5315]
- Remove 35MB of allocations in TypeDiscovery by @benaadams [#5312]
- Perf/improve snap request concurrency by @asdacap [#5342]
- Remove obsolete ToArrays by @LukaszRozmej [#5358]
- Vectorize some Bytes operations by @benaadams [#5359]
- Non-blocking SortedPool.TryGetLast and IsFull by @LukaszRozmej [#5360]
- Optimize RlpStream.DeserializeLength by @benaadams [#5363]
- Optimize EvmStack by @benaadams [#5364]
- Remove unused runtime features by @benaadams [#5380]
- LruCache faster snapshot by @Scooletz [#5397]
- Use concrete dictionary rather than interface by @benaadams [#5398]
- ZeroPaddedSpan to readonly ref by @benaadams [#5400]
- Perf/pool trie store by @asdacap [#5401]
- Reduce VirtualMachine.Execute call stack by @benaadams [#5402]
- Make TraverseContext readonly and pass via in by @benaadams [#5405]
- In FastHeadersSyncFeed change ConcurrentDictionary to ConcurrentHashSet by @LukaszRozmej [#5407]
- ValueKeccak by @benaadams [#5416]
- Switch off DotNetty ResourceLeakDetector by @benaadams [#5421]
- Only clear NetworkNode cache on changes by @benaadams [#5426]
- Better address GetHashCode by @benaadams [#5431]
- Migrate To use BitOperation Class for BinaryOperations by @Demuirgos [#5432]
- Reduce state access for TxPool by @benaadams [#5433]
- Slightly smoothen out fast header dispatch by @asdacap [#5435]
- Fix memory hint not applied to database sometimes by @asdacap [#5390]
- Feature/sync db tuner by @asdacap [#5410]
- Don't resend tx hashes that were sent to us by @LukaszRozmej [#5449]
- Use write batch for full pruning write by @asdacap [#5459]
- Perf/get with options by @asdacap [#5463]
- Perf/batched trie visitor by @asdacap [#5475]
- Remove unnecessary GC finalization by @benaadams [#5479]
- Pause Garbage Collection during block processing by @LukaszRozmej & @benaadams [#5504]
- Vectorize HexConverter.TryDecodeFromUt...
v1.17.4
Release notes
This is a low-priority release. Bigger changes will come with the release of v1.18.0 that we're currently testing.
This release is intended only for nodes that are syncing from scratch. If a node is already synced with v1.17.3, upgrade is unnecessary.
Changes
v1.17.3
Release notes
This is the Shapella-ready release for the upcoming hard fork on Mainnet.
This release is a mandatory upgrade for all users running Mainnet nodes -- all previous versions will stop working on the transition.
No configuration changes are required on the Nethermind side to work properly on the Shapella hard fork.
Please ensure your consensus client is also upgraded to a Shapella-ready version to ensure a smooth transition.
You can check the status of readiness to the Mainnet hard fork of each consensus client here.
The Mainnet Shapella hard fork is scheduled for 10:27:35 PM UTC on April 12, 2023.
Shanghai
Updated the chain spec to Shapella-ready for the Mainnet [#5455]
v1.17.2
Release notes
This version is a hotfix addressing an edge-case issue with occasional bad block production which was spotted mostly on Ethereum testnets and the Gnosis chain.
Block production
Fixed bad block production. The issue appeared only whenever an empty block was scheduled to be created. [#5411]
v1.17.1
Release notes
This release is mandatory for those who have a node running on Goerli -- previous versions would not work properly in there.
For others, this release can be treated as optional.
Goerli Shapella hardfork to happen at March 14, 2023 10:25:36 PM UTC.
Shanghai
- Updated the chain spec for Goerli (Shapella ready) [#5366]
engine_getPayloadBodiesBy*
methods marked as optional capabilities. This will remove warnings that can be displayed whenever the consensus client is not using those endpoints yet. [#5346]
Proto-Danksharding
- Enabled
eth68
: Adds the transaction type and size to tx announcement messages in the wire protocol [#5356]
v1.17.0
Release notes
In this release, you can find the first version of withdrawals which is currently used on the Zhejiang network (configs are added in this release, check below for more details.
Also, there are plenty of performance/stability improvements to make our node faster and even more predictable.
Additionally, Sepolia configs including timestamp for Shanghai hardfork are added. This version is mandatory for those who have a node running on Sepolia - previous versions would not work properly in there.
Sepolia Shapella hardfork to happen at: 2/28/2023 4:04:48 AM UTC
Shanghai
- Withdrawals implementation ready and under testing on Zhejiang public testnet [#4731][#5139]
engine_getPayloadBodiesByHashV1
andengine_getPayloadBodiesByRangeV1
adjusted to the latest spec [#5210]- Configs for Zhejiang network (Shanghai public testnet. [#5240]
Here is a tweet from our core dev @MarekM25 about how to use it and start experimenting with the post-Shapella testnet today! - Unify Engine API failure responses [#5154]
- Fixes for EIP-3860 [#5081] [#5147]
- Introduced
null
value forlatestValidHash
when a latest VALID ancestor is unknown + makes semantically equal response with CLs forengine_newPayloadV1
[#5203] - Implemented
engine_exchangeCapabilities
method as specified in the spec [#5212] - Integrate
engine_exchangeCapabilities
in health-checks (Issue #5185) [#5244]
Proto Danksharding
- Added the possibility to set different chainId and networkId in chain spec [#4850]
- Limit size of
TransactionMessage
by data size instead of tx count [#4917] - Added specification, configs, new transaction type and header fields [#4867]
- Added DATAHASH opcode [#4894]
- Added Point evaluation precompile for EIP-4844 [#4890]
JSON-RPC
trace_block
Add zero reward post-merge similarly to pre-merge (Issue #4616) [#5054]- Reduced RAM consumption for
trace_block
[#5090] - Increase JsonRpc.MaxBatchSize to 1024. Together with Prysm team we noticed, that there is a small issue where Prysm can send a little bit more than 1000 requests in single batch so we want to adjust that behavior for them until PR: prysmaticlabs/prysm#11982 will be released. [#5286]
Sync & Networking
- Fix edge case on BeaconHeaders stage causing sync to hang until a better peer is found [#5102]
- Improvements of OldHeaders processing on node restart [#5112][#5119]
- Fixes node disconnection from peers due to error in initial sync, specifically empty receipt received [#5120]
- Added session direction to sync peer report. It simplifies the information if the peer is an incoming or outgoing connection. [#5258]
- Fix establishing a connection on eth/67 [#5113]
- Fix edge case when transitioning from fast sync [#5146]
TxPool
- Fix edge case scenario with Nonce incrementation when
eth_sendTransaction
is executed multiple times (Issue #4845). [#4926]
Configs
- Updated Chiado bootnodes [#5239]
- Removed Kiln testnet configs [#5181]
- Removed sokol chain and all related items/tests/configs/chainspecs [#5243]
- Sepolia Shanghai configs added. Hardfork on Sepolia chain will happen at 2/28/2023 4:04:48 AM UTC. [#5280]
Performance
- Great performance improvements by @benaadams [#5186][#5196][#5206][#5216][#5251]
- Force garbage collections when visiting state trie to reduce memory pressure, e.g. in full pruning (Issue #4698) [#4699]
- Force garbage collections after finishing sync stages to reduce memory pressure [#5089]
- Reduce memory allocations when serving headers, bodies, and receipts [#5145]
- Limit memory allocations in networking code on CPU's with high core counts [#5236]
- Other code optimizations [#5213][#4623]
Gnosis
-
Fixed the issue when Aura validators sometimes fork off the chain on restarts [#4679]
-
Renamed xDai to Gnosis. This includes existing chain specs and configuration files. For new nodes recommended option is now
-c gnosis
. Old-c xdai
is still supported. [#5057]⚠️
If you want to use an existing node with a new name, you need to move the database from the old directory to the one used in the
gnosis.cfg
. For example,<datadir>/nethermind_db/xdai
should be moved to<datadir>/nethermind_db/gnosis
.
Same procedure applies for archive nodes, usinggnosis_archive.cfg
config.
v1.16.1
Release notes
This release brings important stability fixes and performance improvements, including:
- Background pruning: Reduces node latency spikes when processing blocks, leading to better attestation performance on Validator nodes
- Health check: Users will now be notified about low disk space
- Memory and performance: Performance boost and memory consumption reduction due to upgrade runtime and database engine
JSON-RPC
-
Improved JsonRPC batch calls. Batch results will now be streamed. This reduces memory usage during batched calls. [#5134]
New flags are introduced to be able to limit batched calls on node:--JsonRpc.MaxBatchSize
- Limits batch size for batched JSON-RPC call. The default value is 1000.--JsonRpc.MaxBatchResponseBodySize
- Limits max response body size when using batch requests. Subsequent requests are trimmed
with an error response. The default value is 30MB.
⚠️ IMPORTANT
We noticed that this limit is enough for most of the CL clients but there are still some unexpected behaviors with Prysm client.
Working together with Prysm Developers to fix this since issue needs to be fixed on both sides, but there is simple workaround for this problem.
If you will notice in Your Prysm logs warning like:
Unable to cache headers for execution client votes" error="json: cannot unmarshal object into Go value of type []rpc.jsonrpcMessage
restart Nethermind node using--JsonRpc.MaxBatchSize
with value set to 10000.
-
New
engine_getPayloadBodiesByRange
Engine API endpoint as a part of Shanghai hardfork. Consensus clients can use this endpoint for better performance instead ofeth_getBlockByNumber
[#4939] -
Fixed logs ordering of
eth_getLogs
when blooms are disabled [#5033] -
Fixed the
trace_transaction
not to contain precompile sub-traces [#4410]
Sync & Networking
- Improved state sync performance with better parallelism. This results in performance improvement -- observed state sync executes a few times faster than before. [#4921]
- Fixed issue causing a snap sync stage on Sepolia to hang on 0% for a long time [#5059]
- Fixed edge case when sync is stuck and unable to proceed further until the node was restarted [#5055]
Pruning
- In previous versions, pruning blocks block processing which can lead to increased latency from time to time on the block. In this version, pruning is moved to a background thread. This change should reduce block processing latency spikes leading to better attestation performance on Validator nodes. [#4626]
Gnosis
- Renamed xDai to Gnosis. This includes existing chain specs and configuration files. For new nodes recommended option is now
-c gnosis
. Old-c xdai
is still supported. [#5057]
⚠️
If you want to use an existing node with a new name, you need to move the database from the old directory to the one used in thegnosis.cfg
. For example,<datadir>/nethermind_db/xdai
should be moved to<datadir>/nethermind_db/gnosis
.
Same procedure applies for archive nodes, usinggnosis_archive.cfg
config.
Runtime and database
- Updated to .NET 7 [#4889]
- Updated to RocksDB v7.7. Solves issues with syncing on specific ARM CPUs. [#5065]
Health check
Added free disk space checks for the drives configured as DB locations to prevent data corruption due to disks being full. Two configurable thresholds added [#4837]:
HealthChecks.LowStorageSpaceWarningThreshold
: The percentage of free disk space below which a warning is added to the console as well as to the health checks. The default value is 5 (5% of free space).HealthChecks.LowStorageSpaceShutdownThreshold
: The percentage of free disk space below which the client shuts down. The default value is 1 (1% of free space)
Other changes
- Added logging CPU type at startup [#5016]
- Disabled color output for CLI [#4785]
- Added Exosama network support [#5008]
- Dropped support of obsolete configurations [#5064]
- Various performance improvements (thank you @benaadams) [#5027] [#5009] [#5030] [#5079]
We'd love to hear from you, so if you encounter an issue or have any feedback, please open an issue or contact us on Discord.
v1.16.0
We found out that default value for --JsonRpc.MaxBatchSize
was too low, so we decided to release a new version 1.16.1.
Please use fixed version for Your nodes.
Release notes
This release brings important stability fixes and performance improvements, including:
- Background pruning: Reduces node latency spikes when processing blocks, leading to better attestation performance on Validator nodes
- Health check: Users will now be notified about low disk space
- Memory and performance: Performance boost and memory consumption reduction due to upgrade runtime and database engine
JSON-RPC
- Improved JsonRPC batch calls. Batch results will now be streamed. This reduces memory usage during batched calls. [#5134]
New flags are introduced to be able to limit batched calls on node:--JsonRpc.MaxBatchSize
- Limits batch size for batched JSON-RPC call. The default value is 100.--JsonRpc.MaxBatchResponseBodySize
- Limits max response body size when using batch requests. Subsequent requests are trimmed with an error response. The default value is 30MB.
- New
engine_getPayloadBodiesByRange
Engine API endpoint as a part of Shanghai hardfork. Consensus clients can use this endpoint for better performance instead ofeth_getBlockByNumber
[#4939] - Fixed logs ordering of
eth_getLogs
when blooms are disabled [#5033] - Fixed the
trace_transaction
not to contain precompile sub-traces [#4410]
Sync & Networking
- Improved state sync performance with better parallelism. This results in performance improvement -- observed state sync executes a few times faster than before. [#4921]
- Fixed issue causing a snap sync stage on Sepolia to hang on 0% for a long time [#5059]
- Fixed edge case when sync is stuck and unable to proceed further until the node was restarted [#5055]
Pruning
- In previous versions, pruning blocks block processing which can lead to increased latency from time to time on the block. In this version, pruning is moved to a background thread. This change should reduce block processing latency spikes leading to better attestation performance on Validator nodes. [#4626]
Gnosis
- Renamed xDai to Gnosis. This includes existing chain specs and configuration files. For new nodes recommended option is now
-c gnosis
. Old-c xdai
is still supported. [#5057]
⚠️
If you want to use an existing node with a new name, you need to move the database from the old directory to the one used in thegnosis.cfg
. For example,<datadir>/nethermind_db/xdai
should be moved to<datadir>/nethermind_db/gnosis
.
Same procedure applies for archive nodes, usinggnosis_archive.cfg
config.
Runtime and database
- Updated to .NET 7 [#4889]
- Updated to RocksDB v7.7. Solves issues with syncing on specific ARM CPUs. [#5065]
Health check
Added free disk space checks for the drives configured as DB locations to prevent data corruption due to disks being full. Two configurable thresholds added [#4837]:
HealthChecks.LowStorageSpaceWarningThreshold
: The percentage of free disk space below which a warning is added to the console as well as to the health checks. The default value is 5 (5% of free space).HealthChecks.LowStorageSpaceShutdownThreshold
: The percentage of free disk space below which the client shuts down. The default value is 1 (1% of free space)
Other changes
- Added logging CPU type at startup [#5016]
- Disabled color output for CLI [#4785]
- Added Exosama network support [#5008]
- Dropped support of obsolete configurations [#5064]
- Various performance improvements (thank you @benaadams) [#5027] [#5009] [#5030] [#5079]
We'd love to hear from you, so if you encounter an issue or have any feedback, please open an issue or contact us on Discord.
v1.16.0-unstable
Release notes
This is our very first public preview (pre-release). We encourage trying this version on your nodes as it brings stability improvements and a handful of new features making your node perform even better.
To begin, you can either:
- Download the respective binary for your platform
- Use either of Docker images below:
nethermind/nethermind:unstable
-- Always points to the latest unstable (pre-release) versionnethermind/nethermind:1.16.0-unstable
We'd love to hear from you, so if you encounter an issue or have any feedback, please open an issue or contact us on Discord.
JSON-RPC
- New
engine_getPayloadBodiesByRange
Engine API endpoint as a part of Shanghai hardfork. Consensus clients can use this endpoint for better performance instead ofeth_getBlockByNumber
[#4939] - Fixed logs ordering of
eth_getLogs
when blooms are disabled [#5033] - Fixed the
result
oftrace_transaction
to match the trace oftrace_replayTransaction
[#4410]
Sync & Networking
- Added support for eth/68. This is used for shard blob transactions. [#4866]
- Improved state sync performance. Use read-write lock instead of plain lock on state sync. This results in great performance improvement (on Goerli, observed state sync executes ~2 times faster than before) [#4921]
- Fixed the issue causing a snap sync stage on Sepolia to hang on 0% for a longer time (runs as expected after some time) [#5059]
- Fixed an edge case on Goerli when sync is stuck and unable to proceed further until the node was restarted [#5055]
Pruning
Currently, pruning blocks block processing which can lead to increased latency from time to time on the block. In this version, pruning is moved to a background thread. This also lowers latency on heavy pruning with multiple spins of a loop by allowing block processing to go in-between loop spins. Overall this change should reduce block processing times and make it more stable which results in better attestations. [#4626]
Gnosis
Renamed xDai to Gnosis. This includes existing chain specs and configuration files. The recommended option is now -c gnosis
while the old -c xdai
will be supported for some time. [#5057]
⚠️
To migrate without full resync, you need to move the database from the old directory to the one used in thegnosis.cfg
. For example,<datadir>/nethermind_db/xdai
should be moved to<datadir>/nethermind_db/gnosis
.
Runtime and database
- Updated to .NET 7 [#4889]
- Updated to RocksDB v7.7 (solves issues with syncing on specific CPU architectures) [#5065]
Health check
Added free disk space checks for the drive configured as DB location. There are 2 configurable thresholds added [#4837]:
HealthChecks.LowStorageSpaceWarningThreshold
: The percentage of free disk space below which a warning is added to the console as well as to the health checks. The default value is 5 (5% of free space).HealthChecks.LowStorageSpaceShutdownThreshold
: The percentage of free disk space below which the client shuts down. The default value is 1 (1% of free space)
Other changes
v1.15.0
What changed?
In this version there are plenty of new changes You may find interesting like:
- TraceStorePlugin
- ETH/67
- Shanghai hardfork preparation
- Improvements & fixes in JSON-RPC, sync, metrics, networking, recovering from corruption, and more!
JsonRpc
- Add Sync stages endpoint Adds JsonRPC Debug endpoint
debug_getSyncStage
that reports sync stage. - Fix eth_sendRawTransaction. returns insufficient funds when executed twice. Resolves #4829
- Fix eth_call/eth_estimateGas/eth_createAccessList to use PREVRANDAO value from specified block.
Synchronization & Networking
- eip-4938: eth/67 Add support for
eth/67
. - Optimized Eth/66 implementation Use requestId instead of waiting for response from the peer. Resolves #4714
- Snap Healing Support healing of state trie during sync with snap protocol. Preparation to decommision of
GetNodeData
message and pre-eth/67
protocol versions on mainnet. Resolves #4324 - Fix rare issue causeing State Sync corruption. Resolves #4776
- Fix rare issues causing peers to deadlock.
- Fix Headers sync hang with negative progress.
- Fix rare issue with all peers disconnecting.
- Fix GetBlockHeaders reversed search Fix gapless reverse blockheader search. Resolves #5017
- Avoid excessive logs during Headers sync.
- Added
Network.DiscoveryDns
configuration option: Use tree is available through a DNS name. Keep it empty for the default of{chainName}.ethdisco.net
. Resolves #4321
Shanghai hardfork preparation
- Timestamp Based Fork Activation Allows for post-merge forks to use timestamp from CL client for fork activation. Resolves #4605
- EIP-3860: Limit and meter initcode Limit the maximum size of initcode to 49152 and apply extra gas cost of 2 for every 32-byte chunk of initcode. Resolves #4588
- Add engine_getPayloadV2 Add block value to engine_getPayloadV2 result. This change allows CL clients to compare locally produced block value with builder block value, allowing for CL client to compare locally created blocks with MEV-Boost ones. Spec: ethereum/execution-apis#314
Gnosis chain
- Gnosis bootnodes Update Gnosis bootnodes to be able to sync properly on new nodes.
Plugins
- TraceStore plugin Allows to save parity like traces (
trace
JSON RPC module) to database during block processing and later serving them without having the state data. Makes serving relevent trace methods orders of magnitudes faster. Takes disk space. Affected methods:trace_filter
,trace_block
,trace_transaction
,trace_get
,trace_replayTransaction
,trace_replayBlockTransactions
. Resolves #4205 and #4143. Related PRs: #4971 Add TraceStoreConfig.DeserializationParallelization- Configuration:
TraceStore.Enabled
- Defines whether the TraceStore plugin is enabled, iftrue
traces will come from DB if possible. DefaultValuefalse
.TraceStore.BlocksToKeep
- Defines how many blocks counting from head are kept in the TraceStore, if0
all traces of processed blocks will be kept. DefaultValue10000
. Default value was chosen to have neglegible disk usage. Keep in mind that keeping full trace history on disk will take a lot of space.TraceStore.TraceTypes
- Defines what kind of traces are saved and kept in TraceStore. Available options are:Trace
,Rewards
,VmTrace
,StateDiff
and combinations of them or justAll
. DefaultValueTrace, Rewards
. Default value will suffice to fully supporttrace_filter
,trace_block
,trace_transaction
,trace_get
methods and partial calls totrace_replayTransaction
,trace_replayBlockTransactions
methods. Non-default values that will includeVmTrace
orStateDiff
will increase resource usage by a lot!TraceStore.DeserializationParallelization
- Maximum parallelization when deserializing requests fortrace_filter
.0
defaults to logical cores, set to something low if you experience too big resource usage. DefaultValue '0'. Recommended to set to1
or2
on low-core public JSON RPC endpoints.
- Configuration:
Metrics
- Gas Usage Metrics Added metrics for gas usage: GasUsed, GasLimit
- Version Metrics Added better version metric. Resolves #4860
- EIP-2159 metrics Added 4 new metrics that follow eip-2159 (ethereum_blockchain_height ethereum_best_known_block_number ethereum_peer_count ethereum_peer_limit). Resolves #4842
- Fixed Building Gauge Names.
- Fixed main metrics being wrongly updated through JSON RPC call. Resolves #4943
CLI
- Fix eth.syncing command.. Resolves #4537
TxPool
Other fixes
- Fix enode parsing when it contains
DiscoveryPort
. Resolves #4876 - Block Config and Mining Config separation Added separate Block creation configuration settings. Deprecated Mining configuration with added descriptions. Resolves #4836
- Fix edge case in debug_trace when memory tracing is enabled.
- DB repair on corruption Nethermind will now attempt to fix RocksDb file corruption. Requires restart.
Running Nethermind:
Nethermind Launcher is a self-contained app - you do not need to install .NET separately to run it.
PPA
(Tested on Ubuntu Series: Focal
, Bionic
, Xenial
and Trusty
)
sudo add-apt-repository ppa:nethermindeth/nethermind
sudo apt install nethermind
- To execute the launcher
nethermind
- To execute the runner
nethermind --config mainnet
Homebrew
brew tap nethermindeth/nethermind
brew install nethermind
- To execute the launcher
nethermind-launcher
- To execute the runner
nethermind --config mainnet
Docker
docker pull nethermind/nethermind
docker run -it nethermind/nethermind
Linux
sudo apt-get update && sudo apt-get install libsnappy-dev libc6-dev libc6 unzip
wget https://github.com/NethermindEth/nethermind/releases/download/1.15.0/nethermind-linux-amd64-1.15.0-2b70876-20221228.zip
unzip nethermind-linux-amd64-1.15.0-2b70876-20221228.zip -d nethermind
cd nethermind
./Nethermind.Launcher
- select desired configuration
Linux Arm64
sudo apt-get update && sudo apt-get install libsnappy-dev libc6-dev libc6 librocksdb5.17 unzip
wget https://github.com/NethermindEth/nethermind/releases/download/1.15.0/nethermind-linux-arm64-1.15.0-2b70876-20221228.zip
unzip nethermind-linux-arm64-1.15.0-2b70876-20221228.zip -d nethermind
cd nethermind
./Nethermind.Launcher
- select desired configuration
Windows
- download windows package
nethermind-windows-amd64-1.15.0-2b70876-20221228.zip
- unzip the file
- run
Nethermind.Launcher.exe
- select desired configuration
macOS
brew install rocksdb
- download darwin package
nethermind-darwin-amd64-1.15.0-2b70876-20221228.zip
- unzip the file
- run
Nethermind.Launcher
- select desired configuration