Major Highlights
Gnosis shutterized transactions
Shutter, a cutting-edge privacy solution leveraging threshold cryptography, is now officially supported in Nethermind 1.30.0. Initially enabled for a selected group of validators, it is now available for everyone. Shutter encrypts transactions in the mempool, keeping transaction details private until finalized on-chain. This ensures protection against frontrunning and supports fair and secure transaction execution on the Gnosis Chain.
Enabling Shutter in Nethermind:
-
Update to Nethermind 1.30.0
-
Generate validator registration files by following the intructions in Shutter Validator Registration repository
-
Configure Nethermind as follows:
--Shutter.Enabled true --Shutter.ValidatorInfoFile /data/execution/validatorInfo.json
-
Run Nethermind with the updated configuration to enable Shutter functionality.
Gigagas performance
We introduced several significant performance enhancements that substantially boosted tip-of-chain processing times. These improvements enabled us to achieve an impressive average processing throughput of 1 Gigagas/s, as recorded on the Base Mainnet chain.
One of the most impactful changes was optimizing and parallelizing in-memory pruning. This process is now significantly faster and no longer interferes with the block processing thread, reducing the likelihood of block processing spikes.
New supported chains
We added support for two new L2 networks: Taiko and Linea. To start with these networks, use the command below configurations:
taiko-mainnet
taiko-hekla
linea-mainnet
linea-sepolia
Additionally, as part of the preparation for Pectra hard-fork, we added support for the Mekong testnet. To run it, use -c mekong
and ensure the respective consensus client version is running alongside.
Optimism improvements
For the Optimism implementation, we introduced support for the new hard-fork, Holocene, which took place on the Sepolia chains.
Additionally, we enabled our AutoPivot mechanism for new nodes starting synchronization. This significantly reduces the duration of the initial sync stage for OP and Base nodes, cutting the total sync time by approximately 30–60 minutes.
CLI updates
As a part of our efforts following Posix CLI conventions for our command line options, we introduced all lowercase dash-separated alternatives for all Nethermind command line options. For instance, --JsonRpc.JwtSecretFile
can be spelled as --jsonrpc-jwtsecretfile
or --Metrics.Enabled
as --metrics-enabled
.
Some option names have been deprecated (while still supported with a warning) in favor of new ones. For instance, -dd, --datadir
is deprecated in favor of --data-dir
.
Also, Nethermind configuration files now have a .json
extension instead of the previous .cfg
one. While this should not cause any issues for our users, we highly recommend not using extensions when specifying config names – always prefer -c mainnet
over -c mainnet.json
, or -c mainnet.cfg
. Note that this does not apply to the cases when the -c
option specifies a path, e.g. -c path/to/mainnet.json
.
For more info, see configuration docs.
Changelog
New features
- Gnosis Shutter by @Marchhill in #7414
- Support for state override parameter in some RPC methods by @alexb5dh in #7362
Pectra
- Pectra EIPs 6110, 7002, 7685 by @MarekM25 in #7421
- Pectra payload bodies by @MarekM25 in #7429
- EIP-4844-Pectra: Blob gas fee collection for Gnosis by @Marchhill in #6866
- EIP-7702 and EIP-7251 by @ak88 in #7459
- Changes for EIP7685, 7002 & 6110: Flat Encoding of requests by @rjnrohit in #7670
New chains
- Add Linea L2 by @jmederosalvarado in #7555
- Taiko by @jmederosalvarado in #7326
- Add configs for mekong testnet by @ak88 in #7713
Performance
- Keccak avx512 by @benaadams in #7660
- fix casting when tracing by @LukaszRozmej in #7464
- Move txPool work from Processing loop event to txPool thread by @benaadams in #7469
- Remove 5 flow control exceptions by @benaadams in #7537
- Perf/Parallelize Pruning by @asdacap in #7541
- 7553 get elapsed time refactoring by @ssonthal in #7558
- Perf/skip commit queue by @asdacap in #7571
- Re Add Malloc Trim by @benaadams in #7587
- Disable txpool if SequencerUrl is set by @benaadams in #7513
- Skip committing state during warmup by @benaadams in #7595
- Reduce branches in HexPrefix.FromBytes by @benaadams in #7596
- Perf/parallelize storage commit by @asdacap in #7605
- Feature/FlushWAL on flush. by @asdacap in #7642
- Optimization/pre warm intra block cache fix nonce collisions by @LukaszRozmej in #7089
- Vectorize Keccak state copy, remove temp array use by @benaadams in #7663
- Avoid expensive Stelem_Ref covariant checks in Trie by @benaadams in #7675
- Perf/faster full tree visit by @asdacap in #7692
- Switch off Response Compression for loopback by @benaadams in #7782
- Perf/statesync use treepath by @asdacap in #7783
- Bls Signature refactoring & performance by @Marchhill in #7678
- Feature/Dont download existing block by @asdacap in #7665
4444
Shutter
- Shutter: P2P improvements by @Marchhill in #7545
- Shutter: validator registry V1 by @Marchhill in #7682
- Shutter: Validator registry v0 backwards compatibility by @Marchhill in #7724
- Shutter: refactor & increase disconnection log timeout by @Marchhill in #7722
- Shutter: p2p logging by @Marchhill in #7735
Optimism
- Remove barriers from OP/BASE mainnet by @kamilchodola in #7624
- Add pivot updator for optimism by @marcindsobczak in #7586
- Add OP Holocene fork by @emlautarom1 in #7761
- Enable Networking on OP/Base archive nodes by @kamilchodola in #7778
Bug fixes and stability
- Fix/discv5 not throttling by @asdacap in #7511
- Fix Blob index locking v2 by @LukaszRozmej in #7572
- Fixes for P2P message disposing by @alexb5dh in #7578
- Fix null pointer in RecoverSignatures by @ak88 in #7564
- Fix recreation of light blob tx collection by @marcindsobczak in #7584
- Fix inacccurate memory metric due to concurrent writes by @asdacap in #7600
- Set metrics consistently before request completion by @benaadams in #7599
- Refactor TransactionForRpc (Alternative) by @emlautarom1 in #7483
- Fix BeaconBlockRootHandler by @yerke26 in #7604
- Block beacon header sync until global pivot is updated by @marcindsobczak in #7614
- Fix json response in engine_getBlobsV1 by @marcindsobczak in #7650
- Fix/allow beacon header sync if pivot update is disabled by @marcindsobczak in #7651
- Adjust Optimism (Mainnet) TotalDifficulty calculation by @emlautarom1 in #7647
- Fix tx registration order by @flcl42 in #7668
- Fix UnsafePivotUpdator by @marcindsobczak in #7673
- Fix + serialization in JSON RPC by @alexb5dh in #7679
- Fix/snap sync edge cases by @asdacap in #7708
- Fix RPC "No state available" when using latest block by @alexb5dh in #7725
- Fix IPC data handling by @rubo in #7714
- Fix/broken storage after snap sync by @asdacap in #7789
- Stop accepting JsonRpc requests during shutdown by @benaadams in #7818
- Stop node if clef init fails by @ak88 in #7649
- Exclude empty proofs; 0x0 for 0 instead of 0x by @flcl42 in #7766
Logging
- Improve logs when tps is above 1k/s by @benaadams in #7548
- Add error details to log when account unlock fails by @LukaszRozmej in #7622
- Show mev and extra data in block logs by @benaadams in #7661
- Reduce log in archive node by @asdacap in #7676
- Log request on invalid RPC JSON by @alexb5dh in #7621
- Don't double log invalid blocks by @benaadams in #7820
Other changes
- Move TrieStoreDirtyNodeCache to its own file. by @asdacap in #7559
- Use BLST for BLS precompile by @Marchhill in #7112
- Hotfix multiple instances of txdecoder usage by @flcl42 in #7496
- Make OnlyStaticPeers load only static peers by @asdacap in #7514
- Add bls precompile metrics by @Marchhill in #7546
- Add clique_proposals & fix JSON Snapshot serialization by @LukaszRozmej in #7478
- BLS precompile native benchmarking & improvements by @Marchhill in #7544
- Opt-in censorship detector by @MarekM25 in #7583
- Update PPA publish prerequisites by @rubo in #7618
- Fix RPC methods marked as not implemented by @alexb5dh in #7644
- Add metrics for engine_getBlobsV1 by @marcindsobczak in #7646
- Replace failure messages with kinda constants in tx processor by @flcl42 in #7655
- BLS aggregate signatures by @Marchhill in #7669
- Correct clique snapshot rpc api by @anhnhgutech in #7687
- t8n input processing by @yerke26 in #7690
- Feature/Blocktree suggest pacer by @asdacap in #7648
- Switch to System.CommandLine by @rubo in #7653
- Make chainspec extendable by plugins by @deffrian in #7540
- Add client id to admin_peers RPC API by @LukaszRozmej in #7717
- Add config to protocols in admin_nodeInfo api by @anhnhgutech in #7707
- Feature/configurable state pivot distance by @asdacap in #7741
- Allow override vote in clique proposal by @anhnhgutech in #7749
- Add chainid to admin_nodeInfo rpc api by @anhnhgutech in #7743
- Migrate to .NET 9 by @rubo in #7532
- Unify environment variables by @rubo in #7694
- Adjust JOC Bootnodes according to recent changes by @kamilchodola in #7800
- Option for minimum wiggle time in clique. by @ak88 in #7774
New Contributors
- @swapnilraj made their first contribution in #7486
- @yevh made their first contribution in #7499
- @anhnhgutech made their first contribution in #7687
Full Changelog: 1.29.1...1.30.0-rc