github NethermindEth/nethermind 1.26.0-exp.4
v1.26.0-exp.4

latest releases: 1.29.1, 1.29.0, 1.29.0-rc...
pre-release7 months ago

Release notes

Major highlights

State Design Upgrade - HalfPath

This version introduces a new approach to the State database - HalfPath. It replaces the previous approach which for a purpose of these notes we will call “Hash”.

The goal of HalfPath is to improve performance of the existing database without major codebase changes. It is a middleware between Hash design and a full Path-based design (on which we are currently working on). It is mostly aimed for validators performance (observed major effectiveness improvement) and as a side effect improve archive nodes sync.

Major achievements:

  1. Block Processing time faster by about 30-50% (depends on hardware setup but observed that it gives more improvement on weaker setups so cost of hosting node using Nethermind software can be decreased).
  2. State Database size smaller by about 25% (previous approach is now close to 200GB while HalfPath is around 150GB). This is only for StateDB - Entire Database will decrease by this 50GB but will still hover around 900GB after SnapSync.
  3. State Database growth is significantly reduced - the slower database is growing, the smaller amount of maintenance around node is needed.
    We are still observing the exact numbers and applying some optimizations to make it as close as possible to “Live pruning” but database should grow about 10-20 times slower (to see the full effect of that it may need 1 or 2 weeks - growth ratio will be dropping after that time).
  4. Archive Node sync faster - as HalfPath is not meant to be the optimization for Archive nodes we observe that it is faster than previous implementation (8mln blocks processed about 30-40% faster and gap was only increasing - more tests around that are to be conducted).
  5. Archive Node Database size smaller - as above HalfPath major goal wasn’t to make archive node smaller but what was observed is (2.4TB vs 1.7TB at 8mln blocks checkpoint - and gap was getting bigger - we are checking now the final numbers).

Decisions made by the team to make a transition to HalfPath as smooth as possible:

  1. All newly synced nodes will use a HalfPath as default state design. If for any reason node operator would like to use previous approach there is a option to specify a flag Init.StateDbKeyScheme=Hash .
  2. All existing nodes which are synced with old Hash approach will remain on it (so will not get advantage of HalfPath).

Migration to HalfPath can be done in two ways:

  1. Full Resync - This is the simplest yet the most effective way to migrate. As Nethermind syncs very fast back to the head it may take just 1-2 hours to be back on track.
  2. Full Pruning migration - There is an option to migrate while staying online using the Full pruning functionality. The downside of that approach is that pruning will take much longer to finish and users to be able to prune with it will need to restart their nodes with flag Init.StateDbKeyScheme=HalfPath - without it pruning will behave as before so will recreate state with previous DB approach. User should increase the default full pruning memory budget to at least 8GB (—Pruning.FullPruningMemoryBudgetMb 8000) to reduce slowdown.

Upgrading from previous version to 1.26.0 will result with:

  1. Upgrade from 1.25.4 → Node will remain on previous Hash design. To migrate to HalfPath please refer to Migration guide above. If node operator does not want to migrate, it is completely fine staying on Hash design as it will be still fully supported.
  2. Upgrade from 1.26.0-exp.3 → Node will remain on HalfPath design. No resync is needed between 1.26.0 experimental and current version - all optimizations and bugfixes should be automatically applied.

Learn more

More details about HalfPath and other state redesigns which we are still exploring can be found in this [Medium blogpost](https://medium.com/nethermind-eth/nethermind-client-3-experimental-approaches-to-state-database-change-8498e3d89771).
Also please refer to this [Pull Request](#6331) which contains all of the changes around HalfPath and more in-depth details about specific performance metrics.

Snap Serving

We're excited to share that Nethermind now supports Snap Sync, a capability previously unique to Geth. This is a big step for Ethereum's ecosystem, offering redundancy and easing the considerable responsibility Geth has held in maintaining network health.

This achievement doesn't diminish Geth's critical role but reinforces our shared goal of a resilient Ethereum. We see this as an opportunity to distribute the workload, ensuring the network's strength through diversity.

The feature was previously present, but it required a change to the database layout for efficient performance.

Nodes running on old Hash approach will not have a SnapServing enabled by default. Performance of SnapServing is very bad on this design and may overall performance of a node.

If for any reason node operator wants to enable it on Hash db, there is a flag Sync.SnapServingEnabled=true which will make it possible but is not advised.

Important
During snap serving for other nodes in network overall performance of node may be slightly worse. Please reach to the team on Discord with all observations out there so more optimizations around it can be discovered and applied - at the same time it is advised to keep it enabled to keep the network more healthy.

Changelog

New features

Optimism

Performance

Bug fixes and stability

Other changes

New Contributors

Full Changelog: 1.25.4...1.26.0-exp.4

Don't miss a new nethermind release

NewReleases is sending notifications on new releases.