Skip to content

v1.25.0

Compare
Choose a tag to compare
@kamilchodola kamilchodola released this 10 Jan 10:59

THIS VERSION HAS A CONSENSUS ISSUE. Use v1.25.2 or later instead.


Release notes

Major highlights

Goerli Dencun hard fork

⚠️
This version supports the upcoming Goerli Dencun hard fork that is scheduled on Jan 17, 2024 at 06:32:00 UTC (epoch 231680)
Please update your node to this version to ensure correct node functionality.

Optimism Canyon hard fork

The initial support of the OP in Nethermind was implemented right before the Canyon hard fork happened. Because of that, Nethermind nodes could not follow the chain after Canyon activation. Since this version, Nethermind supports Canyon hard fork on all OP-related chains.

Improved JSON serialization

We replaced the famous Json.NET library with the System.Text.Json implementation. As a result, we drastically reduced the memory overhead, improved the block processing time, and sped up JSON-RPC handling in general.

JavaScript tracers

The debug_trace* JSON-RPC methods now support custom tracers written in JavaScript. This allows custom tracing logic and is in line with the Geth implementation.

Improved concurrency and reduced lock contention

  • Changed to more scalable locks for both the transaction pool and LRU caches, 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, it was 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.

New JSON-RPC methods

  • eth_getBlockReceipts that is based on the previous Parity implementation and gives an easier way to get all receipts for transactions within a specified block
  • debug_getRawBlock debug_getRawReceipts debug_getRawHeader debug_getRawTransaction These methods have been added to have a possibility to analyze encoded block/receipt/header/transaction

Downloading 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), the node will sync all bodies and receipts till genesis:

  • Healthier for the entire network
  • Makes the database size bigger for freshly synced nodes (about 200 GB extra space will be needed)
  • The change is made in a way that already synced nodes that are synced till the ancient barrier 11052984 will not sync anything in addition (to sync all of them, resync from scratch is required)
  • This may be revisited as part of EIP-4444

Other performance improvements

With the migrations to .NET 8, we got a performance boost in various areas and reduced memory usage, which is especially beneficial for validators.

Changelog

New features

Cancun

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

Logging

Bug fixes and stability

Other changes

New Contributors

Full Changelog: 1.24.0...1.25.0