v1.28.0
Release Notes
Major Highlights
eth_simulate
eth_simulate
is a new JSON-RPC method that expands on eth_call
ideas allowing simulation (mocking) of multiple blocks with multiple transactions. Also, it allows users to:
- Define block variables
- Replace code and balance of accounts
- Override
ecrecover
precompile - Event logs and ETH transfer logs (
traceTransfers = true/false
)
See also eth_simulate
in PEEPanEIP and ethereum/execution-apis#484.
Optimism adjustments and fixes
This release enhances Nethermind's support of Optimism with several key updates. JSON-RPC compatibility is improved, the API exposes Optimism-related fields in more places, and the OP transaction processor is now integrated into the trace
namespace of JSON-RPC. Fork rules, RIP-7212, gas calculations, and receipt fields are aligned with Optimism's Fjord specifications.
Several fixes for block production, gas calculations, and other areas have been applied, along with numerous general performance improvements. The new discovery protocol (discv5) allows participation in the P2P network and quick node sync.
Additionally, Nethermind can now act as an Optimism Sequencer, increasing its utility within the ecosystem. These updates dramatically enhance Nethermind's reliability and functionality for Optimism.
To run a node, use existing configs like op-mainnet
, base-mainnet
, op-sepolia
, base-sepolia
, or assemble your own. Don't forget to enable discv5 and provide the sequencer URL as needed:
--Discovery.Discv5Enabled true --Optimism.SequencerUrl https://sepolia-sequencer.optimism.io
Gnosis and Chiado snap sync enabled by default
Starting from this release, the Gnosis and Chiado chains will be synced much faster from scratch thanks to the Nethermind snap serving feature, which has been active on Gnosis for the last few months. With plenty of nodes capable of serving these data, the team decided to switch on snap sync on both chains.
Below is a comparison of sync time before and after this change:
Gnosis Sync Time | 1.27.1 | 1.28.0 |
---|---|---|
Tip of chain | 8 hours 20 minutes | 25 minutes |
Including historical data | 13 hours | 5 hours 45 minutes |
Pruning.CacheMb
values
We recently discovered that the Pruning.CacheMb
option with values higher than the default ones is causing performance degradation.
This setting was commonly increased on the previous state DB schema (before v1.26.0) to slow down disk growth, but starting from the beforementioned version, this gives negligible improvements while causing significant performance degradation during in-memory pruning.
So, we recommend reducing it back to 1024 (max to 2048) if the validator connected to the node experiences some missed attestations.
Nethermind Launcher removal
Nethermind Launcher has been removed from distribution packages as obsolete. Nevertheless, it's still available to download from its repo.
Removal of unused plugins
In this version we removed several not used plugins and deprecated implementations to reduce complexity of code base.
Users which are using Nethermind package directly (not through Docker, PPA or other sources) will need to wipe the Nethermind directory except nethermind_db
, logs
and configs
directories. Also any custom plugins in plugins
directory should be kept - all others should be removed.
The error message user will face is:
Failure System.TypeLoadException: Method 'Create' in type 'Nethermind.Mev.MevBlockProducerTransactionsExecutorFactory' from assembly 'Nethermind.Mev, Version=1.27.1.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
Changelog
New features
- Add eth_simulate , support array of eth_call for simulation across multiple blocks by @OlegJakushkin in #5530
- Implement
debug_standardTraceBadBlockToFile
method by @rubo in #7278
Verkle
- remove backfill from eip 2935 and serve hashes from state when eip 7709 enabled by @yerke26 in #7140
Performance
- Skip prewarming tx if main processing has caught up by @benaadams in #7143
- Handle parallel withdrawals in pre-warmer by @benaadams in #7152
- Remove parallel from withdrawal warmup by @benaadams in #7153
- Don't boost priority of forkchoice if syncing by @benaadams in #7158
- Fix low object LruCaches by @benaadams in #7160
- Optimization/cache precompiles by @LukaszRozmej in #7106
- Increase Lru tests by @benaadams in #7178
- Skip updating prewarm caches on main thread by @benaadams in #7203
- Reduce allocations in metrics backed by Zero Contention Counter by @benaadams in #7206
- Switch to lower contention ClockCache by @benaadams in #7215
- Use intrinsic for GetHighestSetBitIndex by @benaadams in #7224
- Add 256bit and 512bit vectorized hex decode by @benaadams in #7226
Gnosis
- Enable SnapSync on Gnosis by default by @kamilchodola in #7295
Optimism
- Add custom Eth module that exposes additional OP related fields by @flcl42 in #7096
- Use OP tx processor in trace RPC module by @flcl42 in #7118
- Update config, gas calculations, receipt fields according to OP's Fjord by @flcl42 in #7129
- EIP/RIP-7212 by @alexb5dh in #7135
- Add fields to OP rpc; fix Ecotone gas issue; update pivots by @flcl42 in #7180
- Fixes OP CL driven block production by @flcl42 in #7240
- Discv5 by @flcl42 in #7061
- Use Nethermind as Optimism Sequencer by @emlautarom1 in #7287
Bug fixes and stability
- Reduce space use spike after sync by @asdacap in #7138
- buffer until all logs are available: eth_getLogs by @rjnrohit in #7141
- Stop StreamPipeWriter from throwing when passed a null options feild by @smartprogrammer93 in #7144
- fix not completing the writing of the JsonRPC response by @smartprogrammer93 in #7146
- No batch processing needed in case of single blob by @flcl42 in #7159
- FCU to return VALID for blocks of a correct chain without state by @flcl42 in #7151
- Throw on non-empty storage by @flcl42 in #7194
- catch rlp exception: debug_traceBlock by @rjnrohit in #7204
- Discovery when offline on start by @flcl42 in #7223
- Handle un-accessed storage slots in self-destruct by @LukaszRozmej in #7255
- Allow zero sized caches by @benaadams in #7257
- Fix batch collection massages through sockets by @LukaszRozmej in #7265
- Load local key if MiningConfig.Enabled is true by @LukaszRozmej in #7267
- RPC Tx lookup changes by @LukaszRozmej in #7282
Other changes
- Don't limit eth_getLogs on authenticated context by @LukaszRozmej in #7149
- Replace
JwtSecurityToken
withJsonWebToken
by @rubo in #7177 - Add consistent progress bars for syncing by @benaadams in #7212
- Log state sync process every 10 secs rather than every 1 sec by @benaadams in #7254
- Switch to McMaster.Extensions.CommandLineUtils package by @rubo in #7261
- Switch to Microsoft.IdentityModel.JsonWebTokens package by @rubo in #7269
- Add module name to module disabled message by @LukaszRozmej in #7283
- Remove Mantic from PPA by @rubo in #7296
- Update packages by @rubo in #7298
New Contributors
- @healthyyyoung made their first contribution in #7163
- @bchcoke made their first contribution in #7176
- @alexb5dh made their first contribution in #7135
- @taikoonwang made their first contribution in #7183
Full Changelog: 1.27.1...1.28.0