Release notes
Major highlights
- Goerli Dencun Hardfork
- This version supports upcoming Goerli Dencun Hardfork!
- Hardfork will happen at epoch 231680 which translates to 2024-01-17 06:32:00 UTC
- ❗ Upgrade your node prior to this date to make sure it will be online after network will switch to this fork!
- Optimism Canyon Hardfork Support
- Initial implementation of OP support on Nethermind was created right before Canyon hardfork happened. Because of that after Canyon activation, Nethermind nodes were not capable of following entire chain.
- Now this version of Nethermind Client supports Canyon hardfork on all OP related chains!
- Improved Json Serialization
- For long time we were using Newtonsoft libraries for Json serialization/deserialization actions. It is very good library but not most efficient solution to be used.
- We knew that System.Text.Json (built-in .NET library) was giving much better results but switch from one to another was tremendous effort.
- After a lot of work we finally delivered this switch so now all Json related operations are much more efficient and have lower memory overheads.
- It improves Block Processing performance by 5% on average.
- The entire Json RPC stack performance improved with a significant reduction in memory used.
- JavaScript tracers
debug_trace
JSON RPC methods now support custom tracers written in JavaScript.- This allows for custom tracing logic and is in-line with Geth implementation.
- .NET 8 upgrade
- After .NET 8 was announced we have been constantly working towards applying it into Nethermind client to not create any technical debt.
- This .NET version brings a lot of various performance improvements so from our observation we noticed about 5% better Block Processing time which can improve attestation rewards for Validators.
- Improved concurrency and reduced lock contention
- Changed to more scalable locks for both the Transaction Pool and LruCaches, ensuring better scalability on systems with high core counts.
- Used more scalable priority locks where Block Production and other tasks cross to give precedence to block production, optimizing performance in critical areas.
- During signature recovery changed to access the transactions from the pool serially to reduce lock contention on the transaction pool while maintaining parallel processing for Ecdsa and Keccak calculations for faster throughput.
- Added new JsonRPC methods
- There are several new JsonRPC methods added in this release:
- ETH namespace:
eth_getBlockReceipts
which is based on previous parity implementation and which gives easier way to get all receipts for transaction within selected block - DEBUG namespace:
debug_getRawBlock
,debug_getRawReceipts
,debug_getRawHeader
,debug_getRawTransaction
- These are added to have possibility to analyze encoded block/receipt/header/transaction.
- ETH namespace:
- There are several new JsonRPC methods added in this release:
- Download all historical bodies and receipts by default
- On newly synced nodes instead of using barriers set for a block with Deposit Contract for beacon chain (11052984) node will sync all bodies and receipts till genesis
- This is healthier for the entire network
- This will cause a database size to be bigger for freshly synced nodes (about 200GB more will be needed)
- Change is done in a way that already synced nodes which are synced till AncientBarrier 11052984 will not sync anything in addition (to sync all of them user needs to resync DB from scratch)
- This may be revisited as part of eip-4444 https://eips.ethereum.org/EIPS/eip-4444
Changelog
New features
- Implemented eth_getBlockReceipts by @Marchhill in #6281
- Feature/ratelimit discovery messages by @asdacap in #6265
- Feature/javascript tracers by @LukaszRozmej in #6217
- [Config] Change default barriers of mainnet to 0 by @smartprogrammer93 in #6225
- Improved Json Serialization by @benaadams in #6152
- Add new RPC methods debug_getRawBlock, debug_getRawReceipts, debug_getRawHeader, debug_getRawTransaction by @Demuirgos in #6368
- Feature/exit on blocknumber by @asdacap in #6428
- Change locks to reduce lock contention by @benaadams in #6417
Cancun
- [Cancun]{Spec} Goerli config and fix for
ChainSpecBasedSpecProvider
by @smartprogrammer93 in #6409 - [cancun] fix
BlobBaseFee
not consistent with geth whenExcessBlobGas
is null by @smartprogrammer93 in #6320 - Blob txs reorgs by @marcindsobczak in #6254
- Enable blob txs support in goerli configs by @marcindsobczak in #6430
Optimism
Performance
- Serialize Json direct to Http stream rather than through intermediary buffers; further increasing performance and reducing latency of Json RPC by @benaadams in #6369
- Fix double write during full pruning by @asdacap in #6415
- Return error codes in Evm rather than throwing more expensive exceptions by @benaadams in #6406
- Reduce memory for GetPayloadBodiesByRangeV1 and GetPayloadBodiesByHashV1 by streaming the results immediately rather than building up the total response and then sending it all at once by @benaadams in #6287
- Don’t throw exceptions for missing nodes when searching for them (missing nodes) during sync by @benaadams in #6425
- Remove duplicate calls to FindHeader in eth_getLogs by @benaadams in #6421
- Remove Duplicate call to TryGetPendingTransaction in RPC by @benaadams in #6420
- RateLimiter: Remove unneeded async statemachine by @benaadams in #6418
- Increase regex cache size; which reduces memory usage in logging by @benaadams in #6408
- Reduce dictionary lookups by @benaadams in #6373
- Fix excessive timer allocation in rate limiter by @benaadams in #6354
- Use TryGetValue to halve Dictionary lookups by @benaadams in #6352
- Use runtime throw helpers to increase hot code (reduce cold code) in processor cache by @benaadams in #6348
- Broadcast local txs only if MaxFeePerGas is equal at least 70% of current base fee by @marcindsobczak in #6350
Metrics
- added metrics for bad blocks by @Marchhill in #6270
Logging
Bug fixes and stability
- [Fix] Potential fix to missing tx index sometimes (related to reorgs) by @smartprogrammer93 in #6422
- fix(db, rocks): total table size should include blobs by @shekhirin in #6289
- Fix missed release span on column db by @asdacap in #6302
- Fixed FinalTotalDifficulty based on genesis by @MarekM25 in #6435
Other changes
- Migrate to .NET 8 by @rubo in #6150
- Unify reputation settings by @asdacap in #6242
- Update Gnosis bootnodes by @4rgon4ut in #6329
- Refactor/state cleanup by @asdacap in #6260
- Skip signature only for TxType.DepositTx by @LukaszRozmej in #6349
- fix: typos in comment by @AdventureSeeker987 in #6360
- chore(src/Nethermind): typo fix by @dzizazda in #6363
New Contributors
- @Marchhill made their first contribution in #6281
- @shekhirin made their first contribution in #6289
- @4rgon4ut made their first contribution in #6329
- @shashankshampi made their first contribution in #6301
- @AdventureSeeker987 made their first contribution in #6360
- @dzizazda made their first contribution in #6363
Full Changelog: 1.24.0...1.25.0-rc