Release notes
Important
This is an alpha pre-release. It is intended for testing and early feedback only. Some features may be incomplete, unstable, or subject to change before the final 1.37.0 release. Do not run this in production.
Breaking changes
eth66 and eth67 protocol support dropped; eth69 added as default
The deprecated eth/66 and eth/67 devp2p protocol versions have been removed. eth/69 is now enabled as a default protocol. Peers that only support eth66/eth67 will no longer be able to connect. (#9938)
Highlights
Performance
- Optimized transaction processing via encoded-tx trie root and fast block re-encode (#10435)
KeccakCacheoptimized; public-key-to-address recovery now cached (#10391, #10003)SeqlockCacheadded for hot-path caching (#10415)- Improved
FastHashquality (#10082) - EVM:
EXPstays inUInt256domain (#10060),MODshort-circuits on zero (#10061), skip cache for identity precompile (#10366) - Pruning: default cache +512MB (#10247), skip GC during pruning (#10230), inline prunes (#10112), schedule largest storage changes first (#10236)
- JSON requests parsed in chunks (#10207), hex parsing optimized (#10389),
eth_gasPricekth algorithm (#10100) - Numerous allocation reductions across
RetryCache, nibble keys,ConcurrentDict,CREATE/EOFCREATE,DbOnTheRocksiterators,ColumnDb.MultiGet, and more
State management & storage
- World state backend refactor enabling pluggable storage backends (#9089)
- RocksDB snapshot support including column DB snapshots (#10080, #10262)
- Discv5 nodes moved to a separate database (#10027)
EVM extensibility
- Policy-based gas tracking in the VM for custom gas metering (#9846)
- External tracer registration and VM inheritance (#10228)
- Extensible block processing statistics and metrics (#10420, #10429, #10076)
RPC & correctness
eth_estimateGasfurther adjusted for correctness (#10559)eth_getBlockByNumberenforces canonical block retrieval (#10024)eth_getLogsperformance improved (#9923)engine_getBlobsV3added (#9942)engine_getPayloadV4adapted for Optimism (#10328)debug_calls support overriding block fields (#10405)- Hardened RPC transaction validations (#10395)
Networking
- Faster protocol handshake parsing; Ethrex added as recognized client (#9935)
- Discovery v5 optimized (#10081)
What's Changed
- Disable publishing to Downloads by @stdevMac in #9910
- Fix hive getLogs by @deffrian in #9889
- fix: remove duplicate gRPC host validation in GrpcClient by @VolodymyrBg in #9922
- Move ExecutionEnvironment to Rentable sealed class by @LukaszRozmej in #9916
- fix: align BlockHashes dictionary to use nullable Hash256 by @aso20455 in #9900
- Only pool pure Transaction objects, not subclasses by @tanishqjasoria in #9884
- Adjust JOC testnet Bootnodes according to recent changes by @anhnhx131 in #9940
- fix: Remove redundant BlockHeader field reassignments in StatelessExecution by @anim001k in #9928
- test: add Eip2565Transition check for posdao chain spec by @PivasDesant in #9920
- Fixes #9606: DebugTracerTests thread synchronization issue by @igladun in #9875
- Faster protocol parsing, add Ethrex by @benaadams in #9935
- Precompiles names fix by @svlachakis in #9944
- Update packages by @rubo in #9907
- Fix hanging scenario if persisted node not able to be pruned by @asdacap in #9931
- Separate wrong nonce errors by @flcl42 in #9941
- Add engine_getBlobsV3 by @flcl42 in #9942
- fix: only touch coinbase after successful transaction in state tests by @bshastry in #9865
- Gnosis Balancer permanent changes by @Marchhill in #9946
- Sign release builds by @rubo in #9937
- Increase default rlp collection limit to 4MB by @LukaszRozmej in #9957
- Fix/limit get proof by @LukaszRozmej in #9967
- feat(merkle): remove unused RootOfNull to avoid dead code and startup allocation by @Forostovec in #9898
- Fix/rlp decode array checks by @LukaszRozmej in #9968
- fix: dispose IEraStore when EraImporter.Import fails early by @phrwlk in #9978
- Remove rpc from hive workflow by @deffrian in #9971
- Elevate access for ABI decode override more easily by @damian-orzechowski in #9977
- Run all tests on master by @deffrian in #9979
- Remove parsing Uint256 from statics by @LukaszRozmej in #9980
- perf: Remove redundant ToArray() allocation in TrieStore warning log by @0xxFloki in #9969
- Optimise MemDb for ZK by @LukaszRozmej in #9952
- feat(evm): generify VirtualMachine with policy-based gas tracking by @AnkushinDaniil in #9846
- refactor: Remove redundant try-catch in SszProperty.StaticLength by @Aleksandr1732 in #9976
- fix: correct NSubstitute argument types in AuraWithdrawalProcessorTests by @hawkadrian in #9966
- perf: avoid LINQ allocations in GetStorageRangesMessageSerializer by @VolodymyrBg in #9951
- refactor: cache blob and proof counts in BlobProofsManagerV1 by @marukai67 in #9983
- fix: replace unused mock logger with LimboTraceLogger in EnrDiscoveryTests by @CreeptoGengar in #9993
- fix: replace empty exception with informative BlockchainException in ExtractSigners by @mattvaux in #9986
- perf(tests): Remove redundant ToList() calls in PatriciaTreeBulkSetterTests by @0xxFloki in #9981
- Use correct HardwareAcceleration checks for Vector by @benaadams in #10007
- Optimize ColumnDb MultiGet allocations by @0xxFloki in #9908
- fix: correct type name in TimeoutDecoder error message by @reallesee in #9948
- perf: reduce allocations in TypeExtensions by @0xxFloki in #9994
- refactor(trie): remove redundant condition check in IsValidWithOneNodeLess by @0xlupin in #9982
- fix: return correct count when no peer was dropped in DropWorstPeer by @Fallengirl in #10001
- Consider type boundaries by @flcl42 in #10000
- Taiko Shasta Changes - II by @dipkakwani in #9998
- Set release target commit explicitly by @rubo in #10009
- Fix/json converters exception type by @Galoretka in #9984
- refactor(tests): Remove unused variables in Enode exception tests by @marukai67 in #9991
- test: replace Task.Delay with After() in ContractDataStoreTests by @forkfury in #9985
- fix: delegate raw converters read to base converters by @ANtutov in #10006
- fix: remove duplicate HasSignedRecently checks in sealer clique by @Bashmunta in #10011
- Make Nethermind UI SSE endpoint relative by @rubo in #10008
- fix: use IHttpClient from DI in MergePlugin instead of creating HttpClient directly by @PivasDesant in #9995
- Validate blobs lengths by @flcl42 in #9999
- refactor(AuRa): remove redundant Create override by @kurahin in #10014
- Feature/Worldstate backend by @asdacap in #9089
- fix: use ArgumentNullException for null logManager in EthStatsClient by @PivasDesant in #10018
- fix: correct BlobTxMissingBlobs error message by @eeemmmmmm in #10015
- Change KzgPolynomialCommitments.BlsModulus to new instead of parse by @LukaszRozmej in #10032
- Fix/isStorageEmpty check does not get reflected until after commit by @asdacap in #10039
- fix: use GaugeMetric for PeerCandidateCount by @sashass1315 in #10004
- Fix IsTracing calculation by making it lazy by @LukaszRozmej in #10053
- Merge package release workflows by @rubo in #10049
- Fix/get logs optimization by @LukaszRozmej in #9923
- fix: resource cleanup in BeaconHeadersSyncFeed by @ANtutov in #10037
- perf: avoid rlp encode-decode in simulate receipt recovery by @Bashmunta in #10021
- Fix CodeQL workflow by @rubo in #10056
- Check for 0 in MOD opcode by @benaadams in #10061
- Keep EXP opcode in UInt256 domain by @benaadams in #10060
- fix: DataFeed constructor null checks by @yyhrnk in #10062
- Update schema by @flcl42 in #10035
- Remove MetricsController._metricTypes by @LukaszRozmej in #10057
- Fixes #9577: resolve race condition in StateSyncFeedTests.Big_test by @igladun in #9972
- Perf/TryGetDirtyNode by @asdacap in #10067
- Call prune persisted recursively on commit and on copy too by @asdacap in #10065
- feat(abi): add support for fixed-size array element types by @AnkushinDaniil in #10025
- Use baseblock for tree visitor by @asdacap in #10066
- Surge: Fix Profitability Check Bypass by @dipkakwani in #10020
- Skip SST file size checks when MaxOpenFiles is specified by @wurdum in #10002
- Fix: Correct memory access validation in TrySaveByte for MSTORE8 operation by @0xlupin in #9970
- Update file header templates by @rubo in #10077
- Should update child if parent has empty keccak as well by @damian-orzechowski in #10073
- Improve FastHash quality by @benaadams in #10082
- refactor: replace HexConvert.ToUInt256 with UInt256.Parse by @dizer-ti in #10085
- fix: ensure eth_getBlockByNumber enforces canonical block retrieval by @smartprogrammer93 in #10024
- Drop eth66 and eth67 support, add eth69 as a default by @benaadams in #9938
- fix(network): shutdown rlpx executor group by @Bashmunta in #10087
- feat(gas policy): add ConsumeCodeCopyGas method by @AnkushinDaniil in #10068
- Add Address recovery from PublicKey to KeccakCache by @benaadams in #10003
- refactor: remove unused Destroy change type from storage provider by @SashaMalysehko in #10106
- Update to UInt256 version 1.4.0 by @benaadams in #10107
- Fix #10068 regression by @AnkushinDaniil in #10116
- Optimize discv5 by @flcl42 in #10081
- Add some guards to RetryCache by @flcl42 in #10134
- fix: use parameter name in BloomStorage null check by @DeVikingMark in #10096
- fix: correct ExampleResponse for admin_importHistory method by @PivasDesant in #10097
- fix: remove redundant blockInfosDb assertions by @letmehateu in #10099
- perf: reuse SimpleConsoleLogger instance in SimpleConsoleLogManager by @PivasDesant in #10070
- optimize eth_gasPrice using kth algorithm by @cuiweixie in #10100
- Don't queue prunes by @benaadams in #10112
- refactor: simplify Avx2 branches for UInt256 shuffles by @ANtutov in #10111
- fix(kute): prevent null label crash in Prometheus metrics reporter by @Fallengirl in #10109
- Git/ignore claude config by @LukaszRozmej in #10118
- perf: use cached BlockInfo variable instead of redundant array access in BlockTree by @letmehateu in #10125
- Save space locally on builds by @LukaszRozmej in #10113
- Align Nethermind with the latest taiko-geth changes by @jmadibekov in #10127
- Surge TDX Attestation by @dipkakwani in #9954
- Remove redundant File.Delete after File.Move by @eeemmmmmm in #10128
- refactor: simplify conditional returns in FeeTooLowFilter by @strmfos in #10129
- refactor: remove unused finalization manager field in Optimism plugin by @Bashmunta in #10130
- refactor: remove unused _pushEnabled from MonitoringService by @yyhrnk in #10135
- XDC save snapshot on gap block by @ak88 in #9774
- perf: Remove redundant allocations in NettyDiscoveryHandlerTests by @0xlupin in #10155
- fix: correct header range logging in PoW forward sync by @letmehateu in #10140
- fix: avoid GetReceiptData when hash lookup unsupported by @Forostovec in #10023
- fix: correct slice index in Address.TryParseVariableLength by @reject-i in #9902
- perf(facade): optimize SimulateDictionaryHeaderStore.Get for cache hits by @Snezhkko in #9903
- fix: add informative message to block processing timeout exception by @hawkadrian in #9912
- fix: Remove invalid eth_getTransactionByHash call by @phrwlk in #9784
- Fix typos 2 by @flcl42 in #10162
- fix: remove duplicate transaction processor adapter registration by @GarmashAlex in #10170
- perf: avoid extra init code allocations in CREATE/EOFCREATE by @SashaMalysehko in #10019
- Replace empty array initializations with Array.Empty() by @Copilot in #10172
- Fix disposing of a pooled array by @flcl42 in #10168
- fix(SendBlobs): add missing receiverOption to reclaim command by @reject-i in #10136
- fix(sync): use INetworkConfig constructor for SyncPeerPool DI registration by @Savid in #10158
- refactor(tools): eliminate redundant First() calls in HiveConsensusWorkflowGenerator by @maximevtush in #10182
- docs: fix dead link by @letmehateu in #10181
- Remove redundant ToArray calls in eth_accounts by @strmfos in #10185
- Override default CLI option alias by @ArtiomTr in #10148
- Add [AGENTS.md](http://agents.md/) by @rubo in #10177
- Fix cannot prune storage root by @asdacap in #10203
- Support CLI alias overrides in docs by @rubo in #10197
- Fast-path ConcurrentDict AddOrUpdate by @benaadams in #10220
- Reuse same nibble keys for short paths by @benaadams in #10214
- Change async capturing closures to regular async methods by @benaadams in #10221
- Reduce closure allocations in RetryCache by @benaadams in #10223
- perf: Avoid unnecessary base fee calculations by @Forostovec in #10213
- Remove redundant static metadata from CachedPrecompile wrapper by @vtjl10 in #10225
- refactor: extract duplicate chain ID retrieval logic in SendBlobs CLI by @maximevtush in #10150
- perf: avoid eager client id formatting in ZeroNettyP2PHandler by @MoNyAvA in #10189
- fix: align storage tracing flag for ReportStorageChange by @VolodymyrBg in #10201
- fix(test-runner): Use maxPriorityFeePerGas for EIP-1559 state test parsing by @bshastry in #10205
- fix: gRPC client reconnect to shutdown previous channel by @radik878 in #10156
- perf: eliminate redundant allocations in SendData byte normalization by @0xxFloki in #10154
- refactor: split ClHealthTrackerTests into separate test methods by @DeVikingMark in #10171
- Optimize PathUtils by @rubo in #10219
- Use ConcurrentDictionary.GetOrAdd in Session to avoid manual get-or-add logic by @zeevick10 in #10229
- Allow some delays to be configurable by @benaadams in #10227
- Schedule largest storage changes first by @benaadams in #10236
- fix: SyncDispatcher leak by disposing CountdownEvent by @Snezhkko in #10240
- Move default implementations out of IReleaseSpec by @LukaszRozmej in #10237
- Fix PathUtils for JetBrains Rider by @rubo in #10238
- Optimize storage key handling by @benaadams in #10241
- fix: avoid mutating levels in header/body existence checks by @sashass1315 in #10157
- fix: Add missing fields to Transaction.CopyTo and PoolPolicy.Return by @Fallengirl in #9890
- Consider genesis in processing and finalization by @flcl42 in #10235
- Refactor/Allow metrics before block processing by @asdacap in #10076
- Fix maybe combine logic fetch child with wrong path by @asdacap in #10145
- Feature/RocksDb Snapshot by @asdacap in #10080
- Bump default pruning cache by 512MB for larger mainnet blocks by @benaadams in #10247
- Fix: Change Taiko RPC Response to PascalCase by @dipkakwani in #10244
- perf(clique): eliminate redundant cache lookup in GetBlockSealer by @Aleksandr1732 in #10252
- Skip GC when pruning by @benaadams in #10230
- Fix/shared blockcache not used by @asdacap in #10263
- ColumnsDb snapshot by @asdacap in #10262
- Refactor ReleaseSpec by @LukaszRozmej in #10251
- Add taiko debug RPC for integration test support by @jmadibekov in #10211
- feat(tracing): enable external tracer registration and VM inheritance by @AnkushinDaniil in #10228
- Re-enable prewarmer tx adapter for state pre-warming by @damian-orzechowski in #10266
- Validate state test tx as part of a block by @flcl42 in #10224
- Add ProgressLogger to trie verification and full pruning operations by @asdacap in #10273
- feat: enable taiko client CI integration tests by @gehlotanish in #10043
- fix: remove unused IStateReader from SnapServer by @GarmashAlex in #10282
- StateProvider: remove redundant state-root update flag assignment in balance updates by @majtte in #10268
- refactor: eliminate delegate allocations in DbOnTheRocks iterator methods by @letmehateu in #10209
- Warmup threads should not update tx.SpentGas by @damian-orzechowski in #10267
- Remove mark persisted recursively by @asdacap in #10283
- Test project tests to be split in chunks and run in parallel by @flcl42 in #10243
- fix(chainspec): add Prague support to spaceneth dev chain by @CPerezz in #10316
- Warn when dirty prune cache is too low by @Copilot in #10143
- refactor: remove redundant null checks in SnapProviderHelper.AddAccountRange by @Aleksandr1732 in #10298
- fix(txpool): remove redundant hasBeenRemoved check in RemoveTransaction by @davidjsonn in #10319
- fix(sync,trie): Handle timeout exceptions and empty trie sealing in PoW sync by @diega in #10307
- fix(Trie): Correct log level check in PrunePersistedNodes by @andrewshab3 in #10310
- fix: correct off-by-one in ArrayPoolListCore.RemoveAt by @radik878 in #10306
- Optimization/prewarmer per sender by @LukaszRozmej in #10330
- refactor: remove duplicate GetBlockNumPrefixedKey in BlockStore by @eeemmmmmm in #10337
- Fix higher than expected pruning cache memory during forward sync by @asdacap in #10336
- OPify engine_getPayloadV4 by @flcl42 in #10328
- Check totalPacketSize by @flcl42 in #10345
- Validate header before 4844 by @flcl42 in #10344
- Move discv5 nodes to a separate db by @flcl42 in #10027
- feat: add gas benchmark workflow by @cbermudez97 in #10347
- XDC Subnet snapshot support by @batrr in #10287
- feat: add prewarmer get operation timing metrics by @asdacap in #10289
- fix: apply VerifyChecksum config to column families and snapshots by @MozirDmitriy in #10323
- fix(tests): add CancellationToken to SemaphoreSlim Wait calls in EngineModuleTests by @asdacap in #10318
- Remove duplicate logic in SpanSource.IsNotNullOrEmpty by @leopardracer in #10340
- Make decoders static to reduce allocations in Vote and Timeout by @M0ndarynka in #10234
- Fix race condition in ShutterBlockHandler by @davidjsonn in #10296
- Parse incoming Jsons in chunks by @LukaszRozmej in #10207
- Skip cache for identity precompile by @benaadams in #10366
- perf: eliminate List allocations in PeerManager count operations by @andrewshab3 in #10362
- Remove usings, replaced bots PR by @MarekM25 in #10372
- Improve SendBlobs tool by @flcl42 in #9872
- Move some Taiko RPC calls to auth namespace and clean up used code by @smartprogrammer93 in #10352
- Sync Taiko Geth Changes into NMC by @dipkakwani in #10377
- Xdc: SpecialTx Handling by @Demuirgos in #9855
- XDC Subnet block header by @batrr in #10305
- Fix static node not marked as static when added via AddAsync by @asdacap in #10390
- Fix OverridableEnvFactory.BuildAndOverride on Exception by @LukaszRozmej in #10393
- XDC Fix calculation of rewards per signer by @cicr99 in #10355
- (refactor) Make comparisons between transactions more readable by @LukaszRozmej in #10394
- Fix outdated Microsoft.Extensions.Caching.Memory by @benaadams in #10401
- Load plugins in tests properly; remove '' from test name by @flcl42 in #10400
- Add block timestamp by @flcl42 in #10333
- taiko hoodi shasta activation by @smartprogrammer93 in #10406
- Harden rpc transaction validations by @LukaszRozmej in #10395
- Optimize KeccakCache by @benaadams in #10391
- Optimize Json hex parsing by @benaadams in #10389
- Add XdcBeaconSyncStrategy to provide target block height from sync config by @cicr99 in #10411
- Fixes 4 flaky test + refactors dbs by @LukaszRozmej in #10407
- XDC - Add custom state sync allocation strategy by @cicr99 in #10399
- ProcessingStats Extensibility by @svlachakis in #10420
- fix: correct Bytes.BytesComparer length comparison ordering by @asdacap in #10353
- Use CodeInfo type instead of ICodeInfo by @benaadams in #10423
- Update CI workflows for Taiko/Surge integration tests by @jmadibekov in #10419
- Parallelizable does not work on all XDC tests by @ak88 in #10431
- Add JitAsm tool to be able to analyse the Jit output by @benaadams in #10432
- Update README with performance highlights of Nethermind by @MarekM25 in #10359
- Fix flaky tests: timing and race condition by @LukaszRozmej in #10455
- Metrics and BlockStatistics extension by @svlachakis in #10429
- CodeInfo Extension by @svlachakis in #10467
- fix: add missing yield break after shutdown response in JsonRpcProcessor by @VolodymyrBg in #10462
- Fix fuzz issue by @benaadams in #10459
- Fix flaky network test by @benaadams in #10463
- Update packages by @rubo in #10421
- Remove redundant allocation in Rlp.Encode when input is already Rlp by @splinter012 in #10468
- Add SeqlockCache by @benaadams in #10415
- Add ability to override block fields in debug_ calls by @flcl42 in #10405
- Align tx sending error code by @flcl42 in #10464
- Optimize transaction processing via encoded-tx trie root and fast block re-encode by @benaadams in #10435
- Fix random invalid block by @asdacap in #10613
- Estimate Gas fix by @svlachakis in #10559
- fix: false positive 'caches Rlp are not empty' warning on low-tx blocks by @benaadams in #10502
- XDC Reward handler by @cicr99 in #9881
New Contributors
- @aso20455 made their first contribution in #9900
- @anim001k made their first contribution in #9928
- @igladun made their first contribution in #9875
- @cuiweixie made their first contribution in #10100
- @dizer-ti made their first contribution in #10085
- @letmehateu made their first contribution in #10086
- @Savid made their first contribution in #10158
- @ArtiomTr made their first contribution in #10148
- @vtjl10 made their first contribution in #10225
- @zeevick10 made their first contribution in #10229
- @majtte made their first contribution in #10268
- @davidjsonn made their first contribution in #10296
- @diega made their first contribution in #10307
- @andrewshab3 made their first contribution in #10310
- @cbermudez97 made their first contribution in #10347
- @leopardracer made their first contribution in #10340
- @M0ndarynka made their first contribution in #10234
- @splinter012 made their first contribution in #10468
Full Changelog: 1.36.0...release/1.37.0-alpha Release notes
This is an alpha pre-release. It is intended for testing and early feedback only. Some features may be incomplete, unstable, or subject to change before the final 1.37.0 release. Do not run this in production.
Breaking changes
eth66 and eth67 protocol support dropped; eth69 added as default
The deprecated eth/66 and eth/67 devp2p protocol versions have been removed. eth/69 is now enabled as a default protocol. Peers that only support eth66/eth67 will no longer be able to connect. (#9938)
Highlights
Performance
- Optimized transaction processing via encoded-tx trie root and fast block re-encode (#10435)
KeccakCacheoptimized; public-key-to-address recovery now cached (#10391, #10003)SeqlockCacheadded for hot-path caching (#10415)- Improved
FastHashquality (#10082) - EVM:
EXPstays inUInt256domain (#10060),MODshort-circuits on zero (#10061), skip cache for identity precompile (#10366) - Pruning: default cache +512MB (#10247), skip GC during pruning (#10230), inline prunes (#10112), schedule largest storage changes first (#10236)
- JSON requests parsed in chunks (#10207), hex parsing optimized (#10389),
eth_gasPricekth algorithm (#10100) - Numerous allocation reductions across
RetryCache, nibble keys,ConcurrentDict,CREATE/EOFCREATE,DbOnTheRocksiterators,ColumnDb.MultiGet, and more
State management & storage
- World state backend refactor enabling pluggable storage backends (#9089)
- RocksDB snapshot support including column DB snapshots (#10080, #10262)
- Discv5 nodes moved to a separate database (#10027)
EVM extensibility
- Policy-based gas tracking in the VM for custom gas metering (#9846)
- External tracer registration and VM inheritance (#10228)
- Extensible block processing statistics and metrics (#10420, #10429, #10076)
RPC & correctness
eth_estimateGasfurther adjusted for correctness (#10559)eth_getBlockByNumberenforces canonical block retrieval (#10024)eth_getLogsperformance improved (#9923)engine_getBlobsV3added (#9942)engine_getPayloadV4adapted for Optimism (#10328)debug_calls support overriding block fields (#10405)- Hardened RPC transaction validations (#10395)
Networking
- Faster protocol handshake parsing; Ethrex added as recognized client (#9935)
- Discovery v5 optimized (#10081)
What's Changed
- Disable publishing to Downloads by @stdevMac in #9910
- Fix hive getLogs by @deffrian in #9889
- fix: remove duplicate gRPC host validation in GrpcClient by @VolodymyrBg in #9922
- Move ExecutionEnvironment to Rentable sealed class by @LukaszRozmej in #9916
- fix: align BlockHashes dictionary to use nullable Hash256 by @aso20455 in #9900
- Only pool pure Transaction objects, not subclasses by @tanishqjasoria in #9884
- Adjust JOC testnet Bootnodes according to recent changes by @anhnhx131 in #9940
- fix: Remove redundant BlockHeader field reassignments in StatelessExecution by @anim001k in #9928
- test: add Eip2565Transition check for posdao chain spec by @PivasDesant in #9920
- Fixes #9606: DebugTracerTests thread synchronization issue by @igladun in #9875
- Faster protocol parsing, add Ethrex by @benaadams in #9935
- Precompiles names fix by @svlachakis in #9944
- Update packages by @rubo in #9907
- Fix hanging scenario if persisted node not able to be pruned by @asdacap in #9931
- Separate wrong nonce errors by @flcl42 in #9941
- Add engine_getBlobsV3 by @flcl42 in #9942
- fix: only touch coinbase after successful transaction in state tests by @bshastry in #9865
- Gnosis Balancer permanent changes by @Marchhill in #9946
- Sign release builds by @rubo in #9937
- Increase default rlp collection limit to 4MB by @LukaszRozmej in #9957
- Fix/limit get proof by @LukaszRozmej in #9967
- feat(merkle): remove unused RootOfNull to avoid dead code and startup allocation by @Forostovec in #9898
- Fix/rlp decode array checks by @LukaszRozmej in #9968
- fix: dispose IEraStore when EraImporter.Import fails early by @phrwlk in #9978
- Remove rpc from hive workflow by @deffrian in #9971
- Elevate access for ABI decode override more easily by @damian-orzechowski in #9977
- Run all tests on master by @deffrian in #9979
- Remove parsing Uint256 from statics by @LukaszRozmej in #9980
- perf: Remove redundant ToArray() allocation in TrieStore warning log by @0xxFloki in #9969
- Optimise MemDb for ZK by @LukaszRozmej in #9952
- feat(evm): generify VirtualMachine with policy-based gas tracking by @AnkushinDaniil in #9846
- refactor: Remove redundant try-catch in SszProperty.StaticLength by @Aleksandr1732 in #9976
- fix: correct NSubstitute argument types in AuraWithdrawalProcessorTests by @hawkadrian in #9966
- perf: avoid LINQ allocations in GetStorageRangesMessageSerializer by @VolodymyrBg in #9951
- refactor: cache blob and proof counts in BlobProofsManagerV1 by @marukai67 in #9983
- fix: replace unused mock logger with LimboTraceLogger in EnrDiscoveryTests by @CreeptoGengar in #9993
- fix: replace empty exception with informative BlockchainException in ExtractSigners by @mattvaux in #9986
- perf(tests): Remove redundant ToList() calls in PatriciaTreeBulkSetterTests by @0xxFloki in #9981
- Use correct HardwareAcceleration checks for Vector by @benaadams in #10007
- Optimize ColumnDb MultiGet allocations by @0xxFloki in #9908
- fix: correct type name in TimeoutDecoder error message by @reallesee in #9948
- perf: reduce allocations in TypeExtensions by @0xxFloki in #9994
- refactor(trie): remove redundant condition check in IsValidWithOneNodeLess by @0xlupin in #9982
- fix: return correct count when no peer was dropped in DropWorstPeer by @Fallengirl in #10001
- Consider type boundaries by @flcl42 in #10000
- Taiko Shasta Changes - II by @dipkakwani in #9998
- Set release target commit explicitly by @rubo in #10009
- Fix/json converters exception type by @Galoretka in #9984
- refactor(tests): Remove unused variables in Enode exception tests by @marukai67 in #9991
- test: replace Task.Delay with After() in ContractDataStoreTests by @forkfury in #9985
- fix: delegate raw converters read to base converters by @ANtutov in #10006
- fix: remove duplicate HasSignedRecently checks in sealer clique by @Bashmunta in #10011
- Make Nethermind UI SSE endpoint relative by @rubo in #10008
- fix: use IHttpClient from DI in MergePlugin instead of creating HttpClient directly by @PivasDesant in #9995
- Validate blobs lengths by @flcl42 in #9999
- refactor(AuRa): remove redundant Create override by @kurahin in #10014
- Feature/Worldstate backend by @asdacap in #9089
- fix: use ArgumentNullException for null logManager in EthStatsClient by @PivasDesant in #10018
- fix: correct BlobTxMissingBlobs error message by @eeemmmmmm in #10015
- Change KzgPolynomialCommitments.BlsModulus to new instead of parse by @LukaszRozmej in #10032
- Fix/isStorageEmpty check does not get reflected until after commit by @asdacap in #10039
- fix: use GaugeMetric for PeerCandidateCount by @sashass1315 in #10004
- Fix IsTracing calculation by making it lazy by @LukaszRozmej in #10053
- Merge package release workflows by @rubo in #10049
- Fix/get logs optimization by @LukaszRozmej in #9923
- fix: resource cleanup in BeaconHeadersSyncFeed by @ANtutov in #10037
- perf: avoid rlp encode-decode in simulate receipt recovery by @Bashmunta in #10021
- Fix CodeQL workflow by @rubo in #10056
- Check for 0 in MOD opcode by @benaadams in #10061
- Keep EXP opcode in UInt256 domain by @benaadams in #10060
- fix: DataFeed constructor null checks by @yyhrnk in #10062
- Update schema by @flcl42 in #10035
- Remove MetricsController._metricTypes by @LukaszRozmej in #10057
- Fixes #9577: resolve race condition in StateSyncFeedTests.Big_test by @igladun in #9972
- Perf/TryGetDirtyNode by @asdacap in #10067
- Call prune persisted recursively on commit and on copy too by @asdacap in #10065
- feat(abi): add support for fixed-size array element types by @AnkushinDaniil in #10025
- Use baseblock for tree visitor by @asdacap in #10066
- Surge: Fix Profitability Check Bypass by @dipkakwani in #10020
- Skip SST file size checks when MaxOpenFiles is specified by @wurdum in #10002
- Fix: Correct memory access validation in TrySaveByte for MSTORE8 operation by @0xlupin in #9970
- Update file header templates by @rubo in #10077
- Should update child if parent has empty keccak as well by @damian-orzechowski in #10073
- Improve FastHash quality by @benaadams in #10082
- refactor: replace HexConvert.ToUInt256 with UInt256.Parse by @dizer-ti in #10085
- fix: ensure eth_getBlockByNumber enforces canonical block retrieval by @smartprogrammer93 in #10024
- Drop eth66 and eth67 support, add eth69 as a default by @benaadams in #9938
- fix(network): shutdown rlpx executor group by @Bashmunta in #10087
- feat(gas policy): add ConsumeCodeCopyGas method by @AnkushinDaniil in #10068
- Add Address recovery from PublicKey to KeccakCache by @benaadams in #10003
- refactor: remove unused Destroy change type from storage provider by @SashaMalysehko in #10106
- Update to UInt256 version 1.4.0 by @benaadams in #10107
- Fix #10068 regression by @AnkushinDaniil in #10116
- Optimize discv5 by @flcl42 in #10081
- Add some guards to RetryCache by @flcl42 in #10134
- fix: use parameter name in BloomStorage null check by @DeVikingMark in #10096
- fix: correct ExampleResponse for admin_importHistory method by @PivasDesant in #10097
- fix: remove redundant blockInfosDb assertions by @letmehateu in #10099
- perf: reuse SimpleConsoleLogger instance in SimpleConsoleLogManager by @PivasDesant in #10070
- optimize eth_gasPrice using kth algorithm by @cuiweixie in #10100
- Don't queue prunes by @benaadams in #10112
- refactor: simplify Avx2 branches for UInt256 shuffles by @ANtutov in #10111
- fix(kute): prevent null label crash in Prometheus metrics reporter by @Fallengirl in #10109
- Git/ignore claude config by @LukaszRozmej in #10118
- perf: use cached BlockInfo variable instead of redundant array access in BlockTree by @letmehateu in #10125
- Save space locally on builds by @LukaszRozmej in #10113
- Align Nethermind with the latest taiko-geth changes by @jmadibekov in #10127
- Surge TDX Attestation by @dipkakwani in #9954
- Remove redundant File.Delete after File.Move by @eeemmmmmm in #10128
- refactor: simplify conditional returns in FeeTooLowFilter by @strmfos in #10129
- refactor: remove unused finalization manager field in Optimism plugin by @Bashmunta in #10130
- refactor: remove unused _pushEnabled from MonitoringService by @yyhrnk in #10135
- XDC save snapshot on gap block by @ak88 in #9774
- perf: Remove redundant allocations in NettyDiscoveryHandlerTests by @0xlupin in #10155
- fix: correct header range logging in PoW forward sync by @letmehateu in #10140
- fix: avoid GetReceiptData when hash lookup unsupported by @Forostovec in #10023
- fix: correct slice index in Address.TryParseVariableLength by @reject-i in #9902
- perf(facade): optimize SimulateDictionaryHeaderStore.Get for cache hits by @Snezhkko in #9903
- fix: add informative message to block processing timeout exception by @hawkadrian in #9912
- fix: Remove invalid eth_getTransactionByHash call by @phrwlk in #9784
- Fix typos 2 by @flcl42 in #10162
- fix: remove duplicate transaction processor adapter registration by @GarmashAlex in #10170
- perf: avoid extra init code allocations in CREATE/EOFCREATE by @SashaMalysehko in #10019
- Replace empty array initializations with Array.Empty() by @Copilot in #10172
- Fix disposing of a pooled array by @flcl42 in #10168
- fix(SendBlobs): add missing receiverOption to reclaim command by @reject-i in #10136
- fix(sync): use INetworkConfig constructor for SyncPeerPool DI registration by @Savid in #10158
- refactor(tools): eliminate redundant First() calls in HiveConsensusWorkflowGenerator by @maximevtush in #10182
- docs: fix dead link by @letmehateu in #10181
- Remove redundant ToArray calls in eth_accounts by @strmfos in #10185
- Override default CLI option alias by @ArtiomTr in #10148
- Add [AGENTS.md](http://agents.md/) by @rubo in #10177
- Fix cannot prune storage root by @asdacap in #10203
- Support CLI alias overrides in docs by @rubo in #10197
- Fast-path ConcurrentDict AddOrUpdate by @benaadams in #10220
- Reuse same nibble keys for short paths by @benaadams in #10214
- Change async capturing closures to regular async methods by @benaadams in #10221
- Reduce closure allocations in RetryCache by @benaadams in #10223
- perf: Avoid unnecessary base fee calculations by @Forostovec in #10213
- Remove redundant static metadata from CachedPrecompile wrapper by @vtjl10 in #10225
- refactor: extract duplicate chain ID retrieval logic in SendBlobs CLI by @maximevtush in #10150
- perf: avoid eager client id formatting in ZeroNettyP2PHandler by @MoNyAvA in #10189
- fix: align storage tracing flag for ReportStorageChange by @VolodymyrBg in #10201
- fix(test-runner): Use maxPriorityFeePerGas for EIP-1559 state test parsing by @bshastry in #10205
- fix: gRPC client reconnect to shutdown previous channel by @radik878 in #10156
- perf: eliminate redundant allocations in SendData byte normalization by @0xxFloki in #10154
- refactor: split ClHealthTrackerTests into separate test methods by @DeVikingMark in #10171
- Optimize PathUtils by @rubo in #10219
- Use ConcurrentDictionary.GetOrAdd in Session to avoid manual get-or-add logic by @zeevick10 in #10229
- Allow some delays to be configurable by @benaadams in #10227
- Schedule largest storage changes first by @benaadams in #10236
- fix: SyncDispatcher leak by disposing CountdownEvent by @Snezhkko in #10240
- Move default implementations out of IReleaseSpec by @LukaszRozmej in #10237
- Fix PathUtils for JetBrains Rider by @rubo in #10238
- Optimize storage key handling by @benaadams in #10241
- fix: avoid mutating levels in header/body existence checks by @sashass1315 in #10157
- fix: Add missing fields to Transaction.CopyTo and PoolPolicy.Return by @Fallengirl in #9890
- Consider genesis in processing and finalization by @flcl42 in #10235
- Refactor/Allow metrics before block processing by @asdacap in #10076
- Fix maybe combine logic fetch child with wrong path by @asdacap in #10145
- Feature/RocksDb Snapshot by @asdacap in #10080
- Bump default pruning cache by 512MB for larger mainnet blocks by @benaadams in #10247
- Fix: Change Taiko RPC Response to PascalCase by @dipkakwani in #10244
- perf(clique): eliminate redundant cache lookup in GetBlockSealer by @Aleksandr1732 in #10252
- Skip GC when pruning by @benaadams in #10230
- Fix/shared blockcache not used by @asdacap in #10263
- ColumnsDb snapshot by @asdacap in #10262
- Refactor ReleaseSpec by @LukaszRozmej in #10251
- Add taiko debug RPC for integration test support by @jmadibekov in #10211
- feat(tracing): enable external tracer registration and VM inheritance by @AnkushinDaniil in #10228
- Re-enable prewarmer tx adapter for state pre-warming by @damian-orzechowski in #10266
- Validate state test tx as part of a block by @flcl42 in #10224
- Add ProgressLogger to trie verification and full pruning operations by @asdacap in #10273
- feat: enable taiko client CI integration tests by @gehlotanish in #10043
- fix: remove unused IStateReader from SnapServer by @GarmashAlex in #10282
- StateProvider: remove redundant state-root update flag assignment in balance updates by @majtte in #10268
- refactor: eliminate delegate allocations in DbOnTheRocks iterator methods by @letmehateu in #10209
- Warmup threads should not update tx.SpentGas by @damian-orzechowski in #10267
- Remove mark persisted recursively by @asdacap in #10283
- Test project tests to be split in chunks and run in parallel by @flcl42 in #10243
- fix(chainspec): add Prague support to spaceneth dev chain by @CPerezz in #10316
- Warn when dirty prune cache is too low by @Copilot in #10143
- refactor: remove redundant null checks in SnapProviderHelper.AddAccountRange by @Aleksandr1732 in #10298
- fix(txpool): remove redundant hasBeenRemoved check in RemoveTransaction by @davidjsonn in #10319
- fix(sync,trie): Handle timeout exceptions and empty trie sealing in PoW sync by @diega in #10307
- fix(Trie): Correct log level check in PrunePersistedNodes by @andrewshab3 in #10310
- fix: correct off-by-one in ArrayPoolListCore.RemoveAt by @radik878 in #10306
- Optimization/prewarmer per sender by @LukaszRozmej in #10330
- refactor: remove duplicate GetBlockNumPrefixedKey in BlockStore by @eeemmmmmm in #10337
- Fix higher than expected pruning cache memory during forward sync by @asdacap in #10336
- OPify engine_getPayloadV4 by @flcl42 in #10328
- Check totalPacketSize by @flcl42 in #10345
- Validate header before 4844 by @flcl42 in #10344
- Move discv5 nodes to a separate db by @flcl42 in #10027
- feat: add gas benchmark workflow by @cbermudez97 in #10347
- XDC Subnet snapshot support by @batrr in #10287
- feat: add prewarmer get operation timing metrics by @asdacap in #10289
- fix: apply VerifyChecksum config to column families and snapshots by @MozirDmitriy in #10323
- fix(tests): add CancellationToken to SemaphoreSlim Wait calls in EngineModuleTests by @asdacap in #10318
- Remove duplicate logic in SpanSource.IsNotNullOrEmpty by @leopardracer in #10340
- Make decoders static to reduce allocations in Vote and Timeout by @M0ndarynka in #10234
- Fix race condition in ShutterBlockHandler by @davidjsonn in #10296
- Parse incoming Jsons in chunks by @LukaszRozmej in #10207
- Skip cache for identity precompile by @benaadams in #10366
- perf: eliminate List allocations in PeerManager count operations by @andrewshab3 in #10362
- Remove usings, replaced bots PR by @MarekM25 in #10372
- Improve SendBlobs tool by @flcl42 in #9872
- Move some Taiko RPC calls to auth namespace and clean up used code by @smartprogrammer93 in #10352
- Sync Taiko Geth Changes into NMC by @dipkakwani in #10377
- Xdc: SpecialTx Handling by @Demuirgos in #9855
- XDC Subnet block header by @batrr in #10305
- Fix static node not marked as static when added via AddAsync by @asdacap in #10390
- Fix OverridableEnvFactory.BuildAndOverride on Exception by @LukaszRozmej in #10393
- XDC Fix calculation of rewards per signer by @cicr99 in #10355
- (refactor) Make comparisons between transactions more readable by @LukaszRozmej in #10394
- Fix outdated Microsoft.Extensions.Caching.Memory by @benaadams in #10401
- Load plugins in tests properly; remove '' from test name by @flcl42 in #10400
- Add block timestamp by @flcl42 in #10333
- taiko hoodi shasta activation by @smartprogrammer93 in #10406
- Harden rpc transaction validations by @LukaszRozmej in #10395
- Optimize KeccakCache by @benaadams in #10391
- Optimize Json hex parsing by @benaadams in #10389
- Add XdcBeaconSyncStrategy to provide target block height from sync config by @cicr99 in #10411
- Fixes 4 flaky test + refactors dbs by @LukaszRozmej in #10407
- XDC - Add custom state sync allocation strategy by @cicr99 in #10399
- ProcessingStats Extensibility by @svlachakis in #10420
- fix: correct Bytes.BytesComparer length comparison ordering by @asdacap in #10353
- Use CodeInfo type instead of ICodeInfo by @benaadams in #10423
- Update CI workflows for Taiko/Surge integration tests by @jmadibekov in #10419
- Parallelizable does not work on all XDC tests by @ak88 in #10431
- Add JitAsm tool to be able to analyse the Jit output by @benaadams in #10432
- Update README with performance highlights of Nethermind by @MarekM25 in #10359
- Fix flaky tests: timing and race condition by @LukaszRozmej in #10455
- Metrics and BlockStatistics extension by @svlachakis in #10429
- CodeInfo Extension by @svlachakis in #10467
- fix: add missing yield break after shutdown response in JsonRpcProcessor by @VolodymyrBg in #10462
- Fix fuzz issue by @benaadams in #10459
- Fix flaky network test by @benaadams in #10463
- Update packages by @rubo in #10421
- Remove redundant allocation in Rlp.Encode when input is already Rlp by @splinter012 in #10468
- Add SeqlockCache by @benaadams in #10415
- Add ability to override block fields in debug_ calls by @flcl42 in #10405
- Align tx sending error code by @flcl42 in #10464
- Optimize transaction processing via encoded-tx trie root and fast block re-encode by @benaadams in #10435
- Fix random invalid block by @asdacap in #10613
- Estimate Gas fix by @svlachakis in #10559
- fix: false positive 'caches Rlp are not empty' warning on low-tx blocks by @benaadams in #10502
- XDC Reward handler by @cicr99 in #9881
New Contributors
- @aso20455 made their first contribution in #9900
- @anim001k made their first contribution in #9928
- @igladun made their first contribution in #9875
- @cuiweixie made their first contribution in #10100
- @dizer-ti made their first contribution in #10085
- @letmehateu made their first contribution in #10086
- @Savid made their first contribution in #10158
- @ArtiomTr made their first contribution in #10148
- @vtjl10 made their first contribution in #10225
- @zeevick10 made their first contribution in #10229
- @majtte made their first contribution in #10268
- @davidjsonn made their first contribution in #10296
- @diega made their first contribution in #10307
- @andrewshab3 made their first contribution in #10310
- @cbermudez97 made their first contribution in #10347
- @leopardracer made their first contribution in #10340
- @M0ndarynka made their first contribution in #10234
- @splinter012 made their first contribution in #10468
Full Changelog: 1.36.0...release/1.37.0-alpha
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E