Release notes
359 merged pull requests since 2.0.0, from 29 contributors.
Upgrade every Sepolia node to 2.1.0 before the Glamsterdam fork on Tue, 06 Oct 2026, 13:53:36 UTC.
For most nodes this is an in-place upgrade with no resync. Read Breaking changes first if you run on the flat backend with a custom sync config, run poacore, run a Flashbots relay, parse Parity-style traces, or build plugins against Nethermind. **
Highlights
- Glamsterdam on Sepolia. Final EIP-8037 state-gas rules, the
TX_MAX_TOTAL_GAS_LIMITtransaction cap, and Engine API alignment for Amsterdam. (#13140, #13484, #13627, #13554, #13583, #13586, #13755) - Faster EVM. The interpreter loop is replaced by tail-call chain dispatch, stack words stay in
UInt256limb layout, storage values stay asUInt256until they are persisted, and JUMPDEST analysis is rewritten. (#13128, #13323, #13420, #13189, #13810) - Lower
engine_newPayloadlatency. The response goes out as soon as the block has executed and its roots match, before the commit.engine_forkchoiceUpdatedstill waits for that head's commit. GC pauses no longer stall payloads the way they did. (#13647, #13711, #13476, #13334) - Per-transaction changeset index for flat archives (opt-in). A single-transaction trace starts at its target transaction instead of replaying the whole block before it:
debug_traceTransactionwent from ~7.1 s to ~28 ms in the PR's measurements. Whole-block traces run their transactions in parallel (6–10× faster). Enable withFlatDb.HistoryTransactionIndexEnabled=true. (#13454, #13426) - BAL healing after snap sync (flat backend). On the flat backend, the state left by snap sync is healed by replaying block access lists instead of downloading trie nodes. It is on by default (
Sync.BalHealing=true); set it tofalseto go back to trie-node healing. snap/2 is advertised only when BAL healing can run. (#12945) - Dual-stack IPv4/IPv6 networking. RLPx, discv4 and discv5 listen on both families, ENRs advertise both, and there is a new
Network.ExternalIpV6override. (#12679, #12982, #12983, #13731) - Flat backend safety rails. A flat DB that RocksDB had to auto-repair is now re-synced instead of trusted. Unsafe flat activations are refused at start instead of silently corrupting or discarding state. (#13645, #13644)
- Reclaim the patricia trie after a trie→flat conversion.
FlatDb.DropPruningTrieState=truedeletes the old trie store on the next start once the flat DB owns the state (~227 GB on mainnet). Off by default. (#13572) - RocksDB 11 through Nethermind's own bindings. The RocksDB package is replaced with
Nethermind.RocksDbBindings(RocksDB v10 → v11): source-generated P/Invoke with no marshalling stubs, and every native handle held in aSafeHandle. (#12853) - New EF bootnodes. The EF bootnode entries for mainnet, Sepolia and Hoodi are replaced with the new NodeOps fleet: five dual-stack nodes running both discv4 and discv5. (#13313)
- More zkVM targets. Stateless guests for SP1 and OpenVM ship alongside ZisK, and the ZisK toolchain moves to 1.3.0-alpha. (#13435, #13769, #13743)
Performance
- EVM dispatch and call frames: 3.8–4.5% faster block processing on the superblocks, realblocks and fusaka benchmark sets. (#13189)
- Storage values held as
UInt256: SLOAD 9–18%, SSTORE 42% and TSTORE ~50% faster, with no allocations on those paths. (#13420) - EVM stack in limb layout: 45–53% faster ADD, 16–36% faster SUB, and 9–18% faster shifts. (#13323)
- JUMPDEST analysis: worst-case analysis of 64 KiB initcode (a 200 MGas block of PUSH1/JUMPDEST patterns) drops from 0.4–3.2 s to 22–153 ms, depending on the SIMD tier. Initcode is analysed on first use. (#13810)
- Trie and storage-key hashing: 35–80% less time on transaction and receipt-root workloads. (#13552)
- Prewarming: a single fan-out while senders arrive gives superblocks processing a median −4.4%, P99 −27.9%, and +7.6% MGas/s. Prewarming and trie concurrency caps are removed, and parallel work is budgeted across the state root, blooms, the receipts root and prewarming (2–4% faster processing). (#13640, #13388, #13770)
- Carried caches: pre-block account and storage caches are carried across blocks. (#13100)
- Discovery traffic: on a warm-started Hoodi node, discovery traffic fell by 90% (152 KiB/s → 15 KiB/s), and the standalone bootnode uses ~44% less working set. (#13122)
- Snap sync: downloads are bounded and overlap with response processing. Whale-storage verification in
FlatTrieVerifieris parallelised. (#12623, #12615) - RPC:
eth_call,eth_estimateGasandeth_createAccessListno longer hash the transaction on every run (~0.2 ms on large calldata) (#13804). the stream interpreter is off by default because it lost on every measuredeth_callshape.eth_getFilterChangesis served from shared block logs. (#12999, #13742) - Intel hybrid CPUs: block processing is pinned to the performance cores by default (
Blocks.ProcessingCores). Nothing changes on other CPUs. (#13717)
⚠️ Breaking changes
If you run a node (config and startup)
- poacore / poacore_validator now ship
FlatDb.Enabled=falsebecause they use FastSync without SnapSync (#13644). A node on those configs that synced on 2.0.0 is on the flat backend, since flat is 2.0.0's default. On 2.1.0 it refuses to start (Refusing --FlatDb.Enabled=false on an existing flat DB). Either pass-FlatDb.Enabled=true, or delete theflat,flatHistoryandpersistedSnapshotdirectories and resync the state. -FlatDb.Enabled=falseon an existing flat DB is refused. In 2.0.0 the node silently discarded the state and resynced (#13428). It now stops with an error. (#13644)- Flat +
Sync.FastSync=true+Sync.SnapSync=falseis refused on a fresh node. Legacy tree sync on the flat backend can leave holes in the state. An already-synced node keeps running and logs a warning. The exception is importing from patricia (FlatDb.ImportFromPruningTrieState=trueon a datadir that holds patricia state). (#13644) - New
FlatDb.OnRepairsetting, defaultResync. If RocksDB auto-repairs the flat DB, the node now wipes the flat state and runs state sync again. Headers, bodies and receipts are kept. Archive nodes synced from genesis cannot snap-resync. SetFlatDb.OnRepair=Ignoreand plan a resync yourself if a repair is ever reported. (#13645) Receipt.MaxBlockDepthdefault raised back from 1,000 to 10,000, and the limit is now also enforced oneth_getFilterLogs. On nodes with the log index, only blocks the index cannot serve count towards the limit. A filter created byeth_newFilterover a wider range is still accepted, buteth_getFilterLogson it fails with32602. (#13131)- Removed config keys:
FlatDb.EnablePreimageRecording,Db.PreimageDbRocksDbOptions,Db.PreimageDbAdditionalRocksDbOptions(#13690),LogIndex.VerifyRpcResponse(#13131), andGrpc.Enabled,Grpc.Host,Grpc.Portalong with the gRPC endpoint (#13330). A JSON config that still sets them logsInvalid configuration settingsat startup. Remove them from configs, environment variables and command-line flags. Merge.CompactMemorydefault changed fromYestoNo. This removes GC compaction stalls fromengine_newPayload. Steady-state RSS may be somewhat higher. (#13476)Init.LogRulesno longer routes to Seq, andSeq.MinLevelis now the floor for the Seq target. To send a namespace's Trace output to Seq, add an explicitwriteTo="seq"rule inNLog.config. (#13419)- Dual-stack by default. With
Network.LocalIpunset, the P2P TCP and discovery UDP listeners now try to bind[::]on Linux and Windows, so the P2P port may now be reachable over IPv6. Check your firewall. macOS stays IPv4-only. SetNetwork.LocalIp=0.0.0.0to keep IPv4-only. (#12982) Pruning.FullPruningTrigger=VolumeFreeSpacewith a threshold too low to ever trigger now logs a startup warning. Automatic pruning was already not running in that case, so nothing new is broken. (#13485)
If you run a Flashbots relay
Flashbots.EnableValidationnow defaults totrue.flashbots_validateBuilderSubmissionV3checks the submitted block's state root, receipts root, gas used and logs bloom against its execution. Set it tofalseexplicitly to get the old behaviour. (#13452)
If you integrate over JSON-RPC / Engine API
eth_getHeaderByNumber("pending")returnsnull, matching go-ethereum and execution-apis#877. (#13082)proof_getTransactionByHash/proof_getTransactionReceiptreturnresult: nullfor a transaction they cannot serve, instead of a32000error.proof_getTransactionReceiptreturns32002when the block can no longer be retraced. (#13366)- Parity
vmTracestack pushes are hex quantities (0x0,0x1), not byte strings. Word operations now report their pushes. (#13750, #13487) - Other trace output changes. Empty trace selections are accepted.
trace_getkeeps lookup errors instead of replacing them.trace_filterreturns an error when the requested history is unavailable, and bufferedtrace_filternow applies a singleJsonRpc.Timeoutto the whole request. Deleted-account fields carry deletion markers.callTraceromitstoon a failed top-level CREATE. (#13667, #13676, #13677, #13668, #13078) - EIP-3155 /
structLogstraces are corrected:gasUsedis the top-level execution-gas delta, refunds are cumulative, and opcode names follow Geth (0x44is reported asDIFFICULTY). (#12981) eth_estimateGasruns entirely against the requested block, the wayeth_calldoes, with a single deterministic search. Before, the first run used a synthetic next-block header. Estimates can differ from 2.0.0 within the error margin. Invalid-opcode and stack failures now return the standard error texts (for exampleinvalid opcode: INVALID,stack underflow (0 <=> 2)), andeth_calluses the same texts. (#13899)eth_callwithmaxPriorityFeePerGasabovemaxFeePerGas(after London) fails before any gas is bought, with the samemax priority fee per gas higher than max fee per gaserror execution returns.eth_createAccessListfills the fee cap as the priority fee plus twice the base fee when only a priority fee is given. (#13904)- Call requests with
gasPriceand a type-specific field (accessList,blobVersionedHashes,authorizationList) but no explicittypeare no longer decoded as legacy transactions.eth_call,eth_estimateGas,eth_createAccessListandeth_simulateV1results change for those requests. (#13450) eth_subscribe("logs")delivers logs for every block that becomes canonical, andremoved: truelogs for every block that leaves the canonical chain. A subscriber that falls more than 1,000 blocks behind (or 10,000 events for pending-transaction and peer subscriptions) is disconnected. (#13451)- No state for a block now returns
32002from every method, and guard-rail rejections (32002,32005,4444) are no longer logged at WARN. (#13643) - The SSZ-REST Engine API moves from
/engine/v2/...to/engine/v1/..., per execution-apis#793. The JSON-RPCengine_*surface is unchanged. (#13023) engine_newPayloadrejects a post-Shanghai payload with a null withdrawals list (MissingWithdrawals). (#13501)/data/eventsaccepts?events=. A client that only needs processing statistics should pass?events=processed. (#13334)
If you build against Nethermind (plugin / library authors)
These are source-breaking changes: rebuild your plugins against 2.1.0.
IBackgroundTaskScheduler.TryScheduleTasknow takes a request type that implementsIBackgroundTaskRequest<TReq>, and thesourcestring is gone. (#9956)ISyncPeerPool.Freeis removed.SyncPeerAllocationis nowIDisposable, so dispose it withusing. (#13094)- World-state scopes are opened with
TryBeginScope/TryBeginScopeAtTarget, which returnfalsefor an unavailable base instead of throwing. (#13522) - Storage APIs take
UInt256values instead of byte arrays.SlotValueis removed. (#13420) - EVM extension API: the gas-policy methods are
TryConsume*, theOutOfGasflag is removed, and theEvmStackconstructors require aCodeInfo. (#13189) ProcessingOptions.Traceis removed. UseTraceProcessingOptions.ReadOnlyReplay. (#13443)- Value-hash and protocol API changes in the txpool and networking code. (#13592)
- Nullable reference types are enabled in EVM, Trie, State and 7 foundation projects. (#13099, #12155)
Consensus / protocol
- Glamsterdam (Amsterdam-gated, Sepolia from 10-06): the EIP-8037 spill is repaid after a child frame merges, and a restored spill is burnt on a top-level halt (#13140, #13484).
TX_MAX_TOTAL_GAS_LIMIT(2³² − 1) is enforced in the pool, in block validation and ineth_estimateGas(#13627). The unknown-original storage flag is kept across repeated writes (#13554). The EL no longer enforces slot ordering onengine_forkchoiceUpdatedV4(#13583). Orphaned headers are checked for a slot number (#13586).engine_getPayloadV5is rejected from Amsterdam on (#13755).
EIP-7928 receipt event metadata is corrected (#13509), and AuRa keeps existing accounts in BAL preprocessing (#13047). - XDC: randomize-contract transactions now pay and burn gas (#13359), and sign-transaction receipts are encoded as legacy in the receipts trie. The receipts change fixes a consensus divergence on typed transactions (#13375).
Sync, database & state
- Recovery of missing contract code. (#9417)
- A fast-sync body could be dropped by the block cache, which left the receipts stage stuck. Fixed. Nodes already stuck on this need a bodies resync. (#13474)
- Flat persistence keeps going when the committed state is off the canonical chain.
MinReorgDepthstays reachable after folding to the finalized boundary. Flat state is retained across Engine-X reorgs. (#13591, #13550, #13402) - A gather whose state was just persisted is retried instead of refused (fixes an occasional
32002 No state availableat the block being folded). (#13763) VerifyWithTrieno longer reports a false positive when an account is deleted that the trie still holds. (#13521)debug_resetHeadprunes flat snapshots that are unreachable from the new head. (#13524)- New
FlatDb.EnableCarryForwardCache(defaulttrue) to turn off the cross-head read cache. (#13752) - The history-walk ETA overflow no longer kills progress or discards a finished archive-proof walk (this bug is present in 2.0.0). The walk also reports the replay block of a storage range. (#13761, #13791, #13604, #13754, #13620)
SyncServerrange-broadcast serialised. Pooled lists from trie path recovery are disposed. (#12728, #13266)ElapsedMicrosecondsoverflow on long-running stopwatches fixed. (#13416)- The history pruner is created before the block processor starts. (#13285)
- When a block wipes a contract's storage, the pre-block storage cache now invalidates only that contract. Before, it dropped the whole cache and logged an Info line each time, which on pre-Cancun history meant tens of thousands of lines an hour during a full sync from genesis. (#13850)
- The disk-space probe is skipped when the availability check is disabled. (#13456)
- Code from a reverted CREATE no longer reaches the code DB, and code-write counters roll back with it. (#13074, #13432, #13433)
JSON-RPC & tracing
- Malformed JSON-RPC batch items no longer abort the rest of the batch. (#12537)
eth_syncingreports the beacon tip as the highest block. (#12739)debug_traceTransactionByBlockAndIndexresolves block tags and hashes. (#13138)eth_feeHistoryreward percentiles use post-refund receipt gas. (#13563)eth_sendRawTransactionSyncno longer misses a receipt included in the next block. (#13736)- Simulation cache is reset when the real chain advances. (#13444)
- Single-transaction traces no longer replay the transactions after the target. (#13426)
- Discarded block traces in
debug_traceTransactionInBlockByIndexare disposed. (#13324) - EIP-7708 finalization logs are reported to tracers, and the previous transient value shows up in TSTORE traces. (#13567, #13504)
- Account-creation results are preserved in traced and BAL-backed execution. (#13574)
eth_simulateV1child headers and payload attributes inherit the parent slot number (for AmsterdamSLOTNUM). (#13584, #13585)
Engine API & block processing
engine_forkchoiceUpdatedwaits for the head's own commit, including when blocks are queued behind it, a second copy of the head is queued, or the commit is slow. (#13711)- Fixed a missed drain of the block processing queue. (#13749)
- Null required Cancun payload fields are rejected. (#13747)
- Custody columns are applied on
forkchoiceUpdatedV5. (#13109) - FOCIL:
engine_getInclusionListV1accepts the parent block hash. (#13097) - The block processor split (main-only
BlockchainProcessor, separateOneTimeChainProcessor), with a follow-up fix for transaction-index replay. (#13449, #13629) - Blocks are processed while sender recovery finishes. (#13597)
Networking & protocol
- A Hello whose node ID differs from the authenticated peer is rejected. (#13348)
- Outgoing receipts are capped under the devp2p message size limit. Trie-node and receipts requests have bounded lookups. The receipt log limit is derived from the block gas ceiling. (#13595, #13596, #13288)
- Connect workers no longer dial past
MaxActivePeers. (#13302) - Discovery event loop shutdown is bounded. (#13617)
- Startup external-IP resolution retries before it gives up. Persisted peers keep the endpoint that was actually dialled. (#13731)
Stability & hardening
- A malformed EthStats ping no longer terminates the node. (#13353)
- BN254 Add/Mul input length is checked in release builds. (#13208)
- Keccak output sizes the sponge cannot serve are rejected. (#13187)
- A stateless rejection no longer terminates DEBUG-enabled hosts. Execution requests are recovered correctly in stateless RPC inputs. (#13535, #13346)
- The Docker images carry Nethermind's OCI labels (source, revision, version) instead of Ubuntu's. (#13694)
L2 & other chains
- XDC: nine XDC-specific
eth_*methods are added (block signers and finality, candidates, staking ROI, token stats) (#12950). XDPoS header fields are returned over JSON-RPC andnewHeads, and AuRa'sstepandsignatureare restored onnewHeads(#13055).eth_getAccountInforeturns the XDC shape (#13228). Transactions under the minimum gas price are rejected at pool admission (#13222).eth_gasPriceis floored at the pool minimum (#13633). SyncInfo QC and TC are verified independently (#13296). Unsupported eth versions are no longer advertised (#13018). State sync starts without waiting for headers back to genesis (#13609). - Optimism: after Jovian, payload attributes from op-node (8-byte
eip1559Paramsplus a separateminBaseFee) are accepted. Before, everyengine_forkchoiceUpdatedV3with attributes failed with38003, which broke block building behind op-node (#13813). Blocks Nethermind builds after Isthmus now keep the L2ToL1MessagePasser storage root aswithdrawalsRootinstead of the empty-list root, which op-geth and Nethermind itself reject (#13814). OP Superchain chain registry refreshed (#13043, #13179, #13430, #13606). - Taiko: Taiko mainnet (Alethia) uses the 0.01 gwei Shasta base-fee floor that taiko-geth and alethia-reth enforce. Before, Nethermind rejected current Alethia blocks with
Invalid baseFee(#13812). Unzen zk-gas metering for failed steps matches REVM, so canonical blocks that end a step out of gas are no longer rejected (#13824). - Plataberget: new archive config,
-config plataberget_archive. (#13073)
Glamsterdam fork on Sepolia
| Network | Epoch | Start slot | Unix | UTC |
|---|---|---|---|---|
| Sepolia | 353024 | 11296768 | 1791294816 | Tue, 06 Oct 2026, 13:53:36 UTC |
Your consensus client must support Glamsterdam as well. Check your CL's release notes for a Sepolia Glamsterdam release before the fork. Hoodi and mainnet dates are still TBD.
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
What's Changed
- fix(xdc): stop advertising eth versions with no handler by @ak88 in #13018
- fix(txpool): harden fork-boundary revalidation by @benaadams in #13038
- fix(engine): align SSZ-REST surface with execution-apis#793 by @LukaszRozmej in #13023
- Log index backfill through sliced receipt islands by @svlachakis in #13036
- Fix atomic blob transaction persistence after revalidation by @benaadams in #13045
- Use unbound generic types in nameof by @benaadams in #13056
- fix(xdc): emit XDPoS header fields over JSON-RPC by @ak88 in #13055
- feat(xdc): add the missing XDC eth-namespace endpoints by @ak88 in #12950
- Add a perf profiling mode to the benchmark workflow by @kamilchodola in #12952
- ci: reap stale expb overlay mounts on the arm benchmark runner by @kamilchodola in #12959
- chore: add svlachakis to CODEOWNERS for flat history and history pruning by @svlachakis in #13072
- perf(zkevm): stop copying witness elements into the guest databases by @LukaszRozmej in #13076
- perf(zkevm): compile the guest's metric counters away by @LukaszRozmej in #13077
- fix: don't log expected shutdown cancellation/teardown as error/warning by @stdevMac in #13046
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #13043
- fix(rpc): omit
toon failed top-level CREATE frames in callTracer by @LukaszRozmej in #13078 - Drop reverted CREATE code before it reaches CodeDb by @LukaszRozmej in #13074
- perf(zkevm): cut guest hot paths — keccak wrapper, trie buffers, branch RLP by @LukaszRozmej in #13084
- test: deflake the peer session-conflict agreement test by @LukaszRozmej in #13087
- Reduce routine debug logging noise by @benaadams in #13085
- ci: fall back to the base EVM benchmark harness when the PR harness will not compile by @LukaszRozmej in #13088
- Support dual-stack ENR advertisement by @flcl42 in #12679
- Add Plataberget archive config and CI support by @kamilchodola in #13073
- fix: skip corrupt light blob tx records instead of aborting pool restore by @Marchhill in #13032
- test: stop the deadlock guard from ending the blocked blob update by @LukaszRozmej in #13089
- chore: make Nethermind.Stateless.Executor lint clean by @Marchhill in #13031
- test(eip8037): regression for state-gas rollback baseline (EIP-8037) by @AnkushinDaniil in #13053
- test(merge): give engine payload builds a CI-safe improvement budget by @AnkushinDaniil in #12533
- ci: chunk the wall-clock-critical test legs by @AnkushinDaniil in #12378
- Enable nullables in 7 foundation projects by @flcl42 in #12155
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in #13110
- perf(evm): widen the program counter to nint by @LukaszRozmej in #13079
- perf(zkevm): build with -Ot and drop single-thread locks from TrieNode by @LukaszRozmej in #13086
- fix(sync): stop a malformed header response from stalling fast-headers sync by @dipkakwani in #13019
- feat(sync): bal healing by @batrr in #12945
- fix(rpc): keep the module rented until a streamed result has been written by @kamilchodola in #13095
- perf(evm): disable the stream interpreter by default by @kamilchodola in #12999
- test(sync): let Retry absorb an E2E sync timeout by @Marchhill in #13105
- fix: enter world-state scope in EVM benchmark setup by @Marchhill in #12561
- fix: honour engine fixture errorCode instead of accepting any RPC error by @Marchhill in #12783
- fix(test): align TrieReassemblerTests with non-nullable IDb.GetAll by @batrr in #13113
- test: harden the block-improvement wait against empty payloads by @Marchhill in #12859
- fix(engine): apply custody columns on forkchoiceUpdatedV5 by @Marchhill in #13109
- fix(focil): accept the parent block hash on engine_getInclusionListV1 by @Marchhill in #13097
- perf(zkevm): presized witness stores, dense dispatch, cheaper word swaps, sha256f merkleization by @LukaszRozmej in #13090
- perf: carry pre-block account and storage caches across blocks by @benaadams in #13100
- chore: bump Nethermind.Numerics.Int256 to 1.7.0 by @kamilchodola in #13127
- refactor(deps): replace RocksDB package by @rubo in #12853
- perf(zkevm): jumpdest scan, nibble ops, static init, branch RLP, and constant loads by @LukaszRozmej in #13091
- fix: eth_maxPriorityFeePerGas returned a gas price by @MysticRyuujin in #13129
- fix(evm): repay EIP-8037 spill after child merge by @benaadams in #13140
- feat: Precompile cache partitioning & limiting by @alexb5dh in #12966
- perf: stop copying code out of the code db by @LukaszRozmej in #13160
- chore(tests): bump up zkEVM tests to v0.8.4 by @rubo in #13169
- ci: capture a dump when a test host hangs by @LukaszRozmej in #13149
- fix(rlp): break the Rlp/TxDecoder type initializer cycle by @LukaszRozmej in #13158
- perf(evm): replace interpreter loop with tail-call chain dispatch by @benaadams in #13128
- perf: compare storage slots through UInt256's own equality by @LukaszRozmej in #13150
- perf: OR and XOR byte spans a word at a time in the scalar fallback by @LukaszRozmej in #13145
- test(evm): a guest-build test project, covering the scalar jumpdest scan by @LukaszRozmej in #13146
- perf: skip whole RLP items with the cursor in a local by @LukaszRozmej in #13148
- perf(zkevm): leave the embedded chainspecs out of the guest build by @benaadams in #13181
- perf(zkevm): absorb keccak's first rate block by assignment by @LukaszRozmej in #13152
- test(evm): cover jumpdest scanning at the vector block boundaries by @LukaszRozmej in #13176
- feat(flat): explicit flat-history retention mode, with SinceBlock by @svlachakis in #13162
- build(zkevm): drop the stack-trace table and symbol tables from the guest by @benaadams in #13182
- perf(zkevm): pack nibbles a word at a time by @LukaszRozmej in #13164
- perf(zkevm): key the witness node store on the node hash by @LukaszRozmej in #13159
- fix(sync): look up receipt bodies by number and hash by @LukaszRozmej in #13139
- perf(zkevm): compare 32-byte values as whole words by @LukaszRozmej in #13144
- perf(zkevm): reach Address.GetHashCode without a vtable dispatch by @LukaszRozmej in #13161
- perf(zkevm): zero only the keccak state the first absorb misses by @LukaszRozmej in #13170
- Auto-update fast sync settings by @core-repository-dispatch-app[bot] in #13180
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #13179
- perf(zkevm): expand nibbles from a whole word by @LukaszRozmej in #13165
- fix(crypto): reject Keccak output sizes the sponge cannot serve by @LukaszRozmej in #13187
- perf(zkevm): fold the guest's fork rules and threading out of the image by @benaadams in #13188
- test: drive request-sizer latency from a ManualTimeProvider by @LukaszRozmej in #13192
- Add background scheduler stats by @LukaszRozmej in #9956
- perf: encode a branch node in one pass by @LukaszRozmej in #13167
- perf(evm): answer precompile membership from a bitmask on the spec by @LukaszRozmej in #13183
- Enable nullables in EVM, Trie, and State by @flcl42 in #13099
- test: wait for the pre-fork revalidation before resubmitting the evicted tx by @LukaszRozmej in #13207
- refactor(test): replace stacked [TestCase] attributes with [Values] by @LukaszRozmej in #13190
- test(state): pin that a contract destroyed in its creation block leaves no storage behind by @svlachakis in #13209
- fix(jsonrpc): do not format the request when logging an OutOfMemoryException by @benaadams in #13225
- fix(flatdb): release compacted snapshots after base conversion by @benaadams in #13223
- test(merge): deflake the FCU ancestry-walk assertion by @LukaszRozmej in #13234
- fix(rpc): reject a missing-argument marker on a required parameter by @Matgothmog in #13235
- Reduce EVM opcode dispatch and call-frame overhead by @benaadams in #13189
- fix(engine): build each getPayload response from a single block candidate by @dipkakwani in #13093
- Dispose sync peer allocations with using by @asdacap in #13094
- Reduce Bootnode memory and Nethermind discovery traffic by @flcl42 in #13122
- chore(db): demote RocksDbMem log from info to debug by @asdacap in #13219
- Fix BAL fetcher after peer allocation disposal migration by @kamilchodola in #13264
- Use independent version line for Bootnode releases by @flcl42 in #13103
- perf: inline the small RlpReader members and drop dead hash compares by @LukaszRozmej in #13215
- perf(evm): name opcode handlers for profiler attribution by @benaadams in #13253
- fix(flat): prevent warmer misses escaping through shared trie children by @benaadams in #13272
- perf: cut the zkVM guest jumpdest scan to four instructions per byte by @LukaszRozmej in #13216
- perf(zkevm): install the hash seed from the payload root by @LukaszRozmej in #13166
- Build a sparse block bodies response body's transaction trie once by @LukaszRozmej in #13268
- Reserve one receipt slot per parallel worker tracer by @LukaszRozmej in #13267
- Dispose the pooled lists that trie path recovery abandons by @LukaszRozmej in #13266
- fix(rpc): stop unauthenticated input causing unhandled exceptions, empty 500s, leaked traces and WARN floods (#13194, #13195, #13197, #13198, #13156) by @stdevMac in #13251
- feat(sync): make a stalled snap sync visible at default log level (#13248) by @stdevMac in #13257
- test(jsonrpc): make Nethermind.JsonRpc.Test safe to run twice at once (#13204, #13249) by @stdevMac in #13256
- fix(rpc): drop the chainspec-misconfiguration false positive, and say when JSON-RPC opens (#13202, #13203) by @stdevMac in #13255
- Add recovery of missing code by @LukaszRozmej in #9417
- fix(trie): record inlined nodes as ambiguous when tracking past keys by @kamilchodola in #13274
- perf(zkevm): keep resolved children resolved in the guest by @LukaszRozmej in #13294
- perf(zkevm): mix hash keys 32 bits at a time by @LukaszRozmej in #13293
- perf(zkevm): drop the transaction-hash lock in the guest by @LukaszRozmej in #13297
- chore(deps): update Nethermind.Crypto.SecP256k1 package by @rubo in #13289
- fix(flatdb): prune finalized forks from persisted snapshots by @benaadams in #13230
- perf(zkevm): swap 64 bits at a time with masks the preinitialiser cannot fold by @LukaszRozmej in #13291
- fix: dispose the improvement context that replaces a retrieved payload by @LukaszRozmej in #13206
- perf(zkevm): drop the software clz and the witness covariance checks by @LukaszRozmej in #13295
- fix(pruning): measure the full-pruning snapshot trigger from the pruning boundary (#13199) by @stdevMac in #13308
- fix(sync): drain in-flight sync dispatch before database teardown (#13154) by @stdevMac in #13309
- fix(snap): recover a stalled large-storage account and rate-limit the forced pivot (#13155, #13200) by @stdevMac in #13310
- perf: memoize keccak on the zkVM guest and route the bloom through it by @LukaszRozmej in #13217
- refactor(rpc): decompose JsonRpcProcessor into decoder, batch source and diagnostics by @LukaszRozmej in #13290
- perf: thread the RLP cursor through decode chains in registers by @LukaszRozmej in #13173
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in #13329
- chore(deps): update .NET packages by @rubo in #13322
- Remove obsolete gRPC and trie benchmark projects by @flcl42 in #13330
- test: fix flaky WaitForImprovedBlock_with_minTransactions payload retrieval by @LukaszRozmej in #13326
- test: fix flaky prune_on_disk_multiple_times wait budget by @LukaszRozmej in #13327
- perf: remove unused code override hash by @LukaszRozmej in #13332
- perf: reuse witness block tree during stateless execution by @LukaszRozmej in #13333
- perf: avoid scratch allocations in SSZ merkleization by @LukaszRozmej in #13331
- chore(deps): bump Nethermind.Numerics.Int256 to 1.8.0 by @kamilchodola in #13345
- perf(state): skip clearing discarded contract storage maps by @LukaszRozmej in #13335
- Replace EF bootnodes with NodeOps fleet by @MysticRyuujin in #13313
- fix(network): stop the connect workers dialling past MaxActivePeers by @LukaszRozmej in #13302
- Exercise block downloader tests with flat and trie state backends by @asdacap in #13328
- perf(evm): trim initialized memory checks by @svlachakis in #13358
- test: let the cancelled improvement disposal land after getPayload by @LukaszRozmej in #13343
- fix(aura): preserve existing accounts in BAL preprocessing by @hudem1 in #13047
- Enable flat DB by default; flip CI backend coverage by @asdacap in #11931
- Don't treat configured FinalTotalDifficulty as TTD reached by @kamilchodola in #12555
- Correct EIP-3155 state-test traces by @flcl42 in #12981
- Reject undersized ECIES ciphertexts with controlled exceptions by @flcl42 in #13135
- Enable dual-stack RLPx and discv4/discv5 listeners by @flcl42 in #12982
- Fix PoSSwitcher genesis nullability build error by @benaadams in #13367
- ci: split the Docker restore into its own cacheable layer by @AnkushinDaniil in #12393
- perf: skip unobserved logs during transaction prewarming by @LukaszRozmej in #13349
- test(sync): fit the BAL sync budget inside the CI hang dump timeout by @LukaszRozmej in #13344
- ci: add a manual workflow for the frame-transaction measurement harnesses by @AnkushinDaniil in #12738
- feat(flat-history): historical eth_getProof from archive commitments by @svlachakis in #13098
- perf(trie): seek and patch full branches at fixed offsets by @LukaszRozmej in #13336
- Commit storage directly from surviving journal heads by @LukaszRozmej in #13340
- perf: compute receipt roots without retaining a mutable trie by @LukaszRozmej in #13351
- perf(core): specialize 64-byte Keccak cache hits by @svlachakis in #13368
- perf(evm): hold stack words in UInt256 limb layout, reverse only at the byte boundaries by @maximmenshikov in #13323
- Fix execution request recovery in stateless RPC inputs by @LukaszRozmej in #13346
- test(sync): preserve staged BAL timeout diagnostics by @LukaszRozmej in #13342
- Await context disposal in the non-empty getPayload test by @LukaszRozmej in #13357
- perf: drop redundant SSZ merkleization scratch clears by @LukaszRozmej in #13352
- perf(zk): index witness nodes in bounded hash buckets by @LukaszRozmej in #13337
- Guard rejected and abandoned task disposal failures by @LukaszRozmej in #13356
- perf: stream transaction roots through the indexed trie calculator by @LukaszRozmej in #13354
- perf(zk): analyze jump destinations incrementally by @LukaszRozmej in #13338
- fix(build): stop the RPC JSON context target from deadlocking solution builds by @LukaszRozmej in #13341
- fix(ethstats): stop a malformed ping timestamp from terminating the node by @Matgothmog in #13353
- ci: send GCP machine types to the smoke-test dispatches by @cbermudez97 in #13014
- fix(rlp): derive the receipt log limit from the block gas ceiling by @Marchhill in #13288
- test(merge): pin engine_getBlobsV4 SSZ middleware parity invariants by @hudem1 in #13111
- fix(precompiles): check BN254 Add/Mul input length in release builds by @hudem1 in #13208
- feat(xdc): serve eth_getAccountInfo in the shape XDC reports it by @ak88 in #13228
- perf: skip unobserved EVM logs based on tracer requirements by @benaadams in #13372
- Add a LiteRlpReader for explicit cursor decoding by @flcl42 in #13303
- perf: remove fixed block prewarming and trie concurrency caps by @benaadams in #13388
- perf(evm): trim cached jump validation by @svlachakis in #13369
- Reduce allocations in parallel BAL read validation by @benaadams in #13315
- chore(deps): bump Nethermind.Numerics.Int256 to 1.9.0 by @kamilchodola in #13389
- perf: reduce the MODEXP base before exponentiating by @LukaszRozmej in #13396
- ci: disable Ethereum fixture coverage and remove legacy VM sharding by @benaadams in #13254
- fix(sync): serialise SyncServer range-broadcast CTS swap by @0xDevNinja in #12728
- fix(rpc): dispose the block traces debug_traceTransactionInBlockByIndex discards by @Matgothmog in #13324
- test: wait for the tx-carrying improvement in the V6 BAL test by @LukaszRozmej in #13403
- perf(bal): bypass journaling for immutable parent reads by @benaadams in #13312
- Fix malformed JSON-RPC batch items without aborting subsequent requests by @smallyunet in #12537
- perf(bal): cache account context and simplify composite reads by @benaadams in #13311
- test: keep the filter-expiry fixture from dropping other tests' filters by @LukaszRozmej in #13407
- test: bound the event-loop shutdown wait in the discovery tests by @LukaszRozmej in #13404
- perf(tracer): Reduce native callTracer execution overhead by @svlachakis in #13406
- Retain FlatDB state for Hive Engine-X reorgs by @flcl42 in #13402
- fix(network): reject Hello whose node ID differs from the authenticated peer by @hudem1 in #13348
- ci: point the sync-validation Slack alert at the webhook secret that exists by @cbermudez97 in #13314
- test(network): pin that an unauthenticated RLPx frame is never forwarded by @hudem1 in #13347
- Avoid unused gas-price rejection messages during transaction selection by @benaadams in #13425
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #13430
- Auto-update fast sync settings by @core-repository-dispatch-app[bot] in #13429
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in #13427
- perf: stop allocating a copy of the input for the ID precompile by @LukaszRozmej in #13395
- perf(evm): bypass jump-analysis event waits when the bitmap is ready by @benaadams in #13431
- perf(state): hold storage values as UInt256, encode only at persistence boundaries by @benaadams in #13420
- Remove ProcessingOptions.ForceSameBlock by @asdacap in #13440
- Stabilize log finder and filter cleanup tests by @svlachakis in #13437
- Avoid replaying later transactions for single-transaction traces by @svlachakis in #13426
- test: add storage-, call- and create-shaped block scenarios to BlockProcessingBenchmark by @LukaszRozmej in #13421
- perf: stop allocating a word per transient storage write by @LukaszRozmej in #13413
- Journal and count a staged code insert exactly once by @LukaszRozmej in #13432
- perf: resolve a BAL storage access in one probe by @LukaszRozmej in #13408
- Remove ProcessingOptions.Trace by @svlachakis in #13443
- fix: build BlockProcessingBenchmark against UInt256 storage values by @asdacap in #13446
- perf: stop BLOCKHASH reading state and allocating on every call by @LukaszRozmej in #13397
- perf: memoize the per-contract read and the SSTORE originals probe by @LukaszRozmej in #13422
- perf: memoize the warm-access check, settle EXTCODEHASH with one account read by @LukaszRozmej in #13414
- refactor(witness): run witness-generating execution on the layout-native world state by @asdacap in #13453
- ci: make the frame-tx measurement workflow report what it measured by @manusw7 in #13042
- Fix simulation cache reset after the real chain advances by @kamilchodola in #13444
- feat(xdc): reject transactions under the minimum gas price on pool admission by @ak88 in #13222
- Reduce Keccak tail work and guest mixer instructions by @benaadams in #13438
- Roll back the code-write counters with the reverted code by @LukaszRozmej in #13433
- perf: skip the write-journal probe for contracts that have not written by @LukaszRozmej in #13405
- perf(hive): cut per-container startup cost by @Marchhill in #13445
- fix(core): stop ElapsedMicroseconds overflowing on long-running stopwatches by @Matgothmog in #13416
- fix(logging): stop Init.LogRules bypassing Seq.MinLevel by @Matgothmog in #13419
- Return null from eth_getHeaderByNumber for the pending tag by @MysticRyuujin in #13082
- fix(xdc): verify a SyncInfo's QC and TC independently, and relay it by @ak88 in #13296
- ci(expb): report newPayload request time and block processing side by side by @benaadams in #13477
- Right-size the processing-branch list rental by @LukaszRozmej in #13481
- test: measure the transient-write allocation over several windows by @LukaszRozmej in #13482
- Cut per-block setup cost of the EIP-4788 system call by @LukaszRozmej in #13480
- Parallelize the receipts root at a receipt-specific item count by @LukaszRozmej in #13479
- docs: allow LINQ in tests and benchmark setup by @benaadams in #13503
- ci(rpc-bench): survive a sparse-checkout left behind on the shared runner by @cbermudez97 in #13468
- fix(rpc): resolve block tags in debug_traceTransactionByBlockAndIndex by @Matgothmog in #13138
- fix(nethtest): report a state-test fixture that fails to load by @Matgothmog in #13275
- fix(pruning): skip the disk space probe when the availability check is disabled by @Matgothmog in #13456
- Reduce newPayload latency from GC coordination by @benaadams in #13476
- ci: bound and spread the GCP sync-runner fleet, and put master validation back on Spot by @cbermudez97 in #13362
- perf(tracing): bound JavaScript tracer engines per transaction and add a native noopTracer by @svlachakis in #13464
- perf: cut the large-object churn that stalls newPayload behind background GCs by @kamilchodola in #13334
- Hint the request-queue contracts to the prewarmer by @LukaszRozmej in #13502
- test: deflake nonce manager account isolation by @LukaszRozmej in #13512
- Forbid zero-nibble extension nodes by @alexb5dh in #13519
- Adjust eth_getLogs limits, drop log-index verification by @alexb5dh in #13131
- test: isolate discovery E2E from peer connections by @LukaszRozmej in #13514
- Skip re-hashing headers whose hash the caller already verified by @LukaszRozmej in #13501
- fix(sync): stop a fast-sync body being lost to the block cache by @LukaszRozmej in #13474
- ci(rpc-bench): replay the private eth_call corpus as debug_traceCall or trace_call by @kamilchodola in #13457
- test: allow more time for snap sync by @LukaszRozmej in #13525
- test: allow more time for BAL sync by @LukaszRozmej in #13527
- test: increase Merge.Plugin wait timeout by @LukaszRozmej in #13526
- Fix Kademlia simulation's expected nearest-neighbour set by @LukaszRozmej in #13536
- Schedule Sepolia Amsterdam fork by @flcl42 in #13455
- Report vmTrace pushes for word operations by @flcl42 in #13487
- ci: fetch frame-tx Groth16 artifacts from a frame-verify-gas release by @manusw7 in #13465
- Support other clients in Fusaka EXPB benchmarks by @kamilchodola in #13436
- EIP-161 violations fix by @alexb5dh in #13520
- Slim down OneTimeChainProcessor by @asdacap in #13441
- fix(flat): stop flushing the unfinalized tail to RocksDB on shutdown by @asdacap in #13523
- chore(deps): update MCL package by @rubo in #13548
- Default all sync test networks to Spot by @cbermudez97 in #13556
- fix(flatdb): keep MinReorgDepth reachable after folding to the finalized boundary by @batrr in #13550
- Skip unrelated storage scans when clearing untouched accounts by @LukaszRozmej in #13531
- Avoid copying execution payload transaction buffers during decoding by @LukaszRozmej in #13532
- Remove scratch allocations from generated SSZ container hashing by @LukaszRozmej in #13533
- Fix stateless rejection terminating DEBUG-enabled hosts by @LukaszRozmej in #13535
- feat(flat): prune snapshots unreachable from the head on debug_resetHead by @asdacap in #13524
- fix(xdc): charge and burn gas for randomize-contract transactions by @ak88 in #13359
- fix(xdc): encode sign-transaction receipts as legacy in the receipts trie by @ak88 in #13375
- Use system calls for EIP-8037 beacon roots by @flcl42 in #13483
- fix(eth72): announce the blob-elided network size, not the consensus size by @qu0b in #13049
- ci(frame-verify-gas): drop the gh CLI dependency from fetch-artifacts.sh by @manusw7 in #13545
- fix(xdc): run the patricia state backend so node data can be served by @ak88 in #13478
- Report previous transient value in TSTORE traces by @flcl42 in #13504
- Burn restored spill on top-level halt by @flcl42 in #13484
- chore(deps): update GMP package by @rubo in #13562
- Avoid recomputing reconstructed body roots in stateless execution by @LukaszRozmej in #13534
- Log index: carry the sync direction instead of reading it back from the block numbers by @svlachakis in #13565
- ci: add automatic AI code review through LiteLLM by @stdevMac in #13564
- Support SP1 and OpenVM by @maximmenshikov in #13435
- fix: keep AI review configuration out of public reports by @stdevMac in #13579
- ci: allow collaborators to request OCR reviews in PR comments by @stdevMac in #13580
- Keep flat persistence going when the committed state is off this chain by @svlachakis in #13591
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #13606
- Fix archive proof retrofit resume coverage by @svlachakis in #13604
- fix(eth): cap outgoing receipts under the devp2p message size limit by @LukaszRozmej in #13595
- perf: warm withdrawal recipients with the address warmer by @LukaszRozmej in #13599
- Auto-update fast sync settings by @core-repository-dispatch-app[bot] in #13607
- Keep the unknown-original storage flag across repeated writes by @asdacap in #13554
- fix(flat): VerifyWithTrie false positive when deleting an account the trie still holds by @asdacap in #13521
- fix: bound the lookups a trie-node or receipts request performs by @LukaszRozmej in #13596
- Reduce txpool and networking allocations by @benaadams in #13592
- Fix flaky test caused by shared transaction pool interference by @benaadams in #13616
- Bump up the version to 2.1.0-unstable by @core-repository-dispatch-app[bot] in #13615
- ci: align MTP test extension versions and dump a test host that dies mid-run by @LukaszRozmej in #13613
- Make BlockchainProcessor main-only and split OneTimeChainProcessor by @asdacap in #13449
- Remove EL slot ordering enforcement from engine_forkchoiceUpdatedV4 by @flcl42 in #13583
- fix: bound the discovery event loop shutdown by @LukaszRozmej in #13617
- Per-transaction changeset index for archive traces (opt-in) by @svlachakis in #13454
- Report the flat history watermark metric on the SeedPivot path by @svlachakis in #13620
- Fix transaction index replay after main-only processor split by @benaadams in #13629
- Remove NeedToWaitForHeader from the XDC configs by @ak88 in #13609
- perf: process blocks while sender recovery finishes by @LukaszRozmej in #13597
- chore(zkevm): refactor guests organization by @rubo in #13582
- Warm the system-contract slots between blocks for the predicted block by @LukaszRozmej in #13608
- perf(prewarm): one fan-out for transaction warmup while senders arrive by @svlachakis in #13640
- ci: report MGas/s for the request and the overhead window, not just processing by @LukaszRozmej in #13637
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in #13651
- chore(agents): trim AGENTS.md and move benchmark guidance to skills by @rubo in #13646
- ci: fail the expb run if the yq download does not produce yq by @LukaszRozmej in #13631
- ci: restore the run block indentation the yq check broke by @svlachakis in #13675
- fix(rlp): bound blob wrapper cell-mask peek to transaction by @stdevMac in #13614
- Validate slot number on orphaned headers by @flcl42 in #13586
- Use post-refund receipt gas for feeHistory reward percentiles by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13563
- Isolate VM test fork activation between tests by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13555
- Fix a race in the late-sender wave prewarm test by @benaadams in https://github.com/NethermindEth/nethermind/pull/13679
- Floor XDC eth_gasPrice at the minimum the pool enforces by @ak88 in https://github.com/NethermindEth/nethermind/pull/13633
- chore: move nethtest to the scripts dir by @rubo in https://github.com/NethermindEth/nethermind/pull/13692
- Reduce trie and storage-key hashing overhead by @benaadams in https://github.com/NethermindEth/nethermind/pull/13552
- Pass parent slot number through simulated payload attributes by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13585
- Inherit parent slot number in simulated child headers by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13584
- perf(engine): answer newPayload once the block is executed, before it is committed by @svlachakis in https://github.com/NethermindEth/nethermind/pull/13647
- chore: remove funding.json by @rubo in https://github.com/NethermindEth/nethermind/pull/13696
- chore(deps): update DotNetty package by @rubo in https://github.com/NethermindEth/nethermind/pull/13687
- Correct EIP-7928 receipt event metadata by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13509
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in https://github.com/NethermindEth/nethermind/pull/13702
- Fix missing stateless dependencies in the Visual Studio solution by @benaadams in https://github.com/NethermindEth/nethermind/pull/13594
- Document zkVM guest execution and GPU proving prerequisites by @benaadams in https://github.com/NethermindEth/nethermind/pull/13589
- Carry slot number through XDC header copies by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13587
- Vectorize nibble expand and pack by @benaadams in https://github.com/NethermindEth/nethermind/pull/13704
- Vectorise hex encoding for every ISA tier, including arm64 by @benaadams in https://github.com/NethermindEth/nethermind/pull/13726
- Pin EIP-7708 receipt ordering, bloom, and rollback behavior with tests by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13573
- Enforce the EIP-8037 TX_MAX_TOTAL_GAS_LIMIT transaction cap by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13627
- Complete dual-stack peer connectivity by @flcl42 in https://github.com/NethermindEth/nethermind/pull/12983
- fix(flashbots): validate the processed block by default in flashbots_validateBuilderSubmissionV3 by @kriss39 in https://github.com/NethermindEth/nethermind/pull/13452
- fix(pruning): warn when the free-space pruning threshold is too low to ever run by @Matgothmog in https://github.com/NethermindEth/nethermind/pull/13485
- fix(rpc): keep accessList/blobVersionedHashes/authorizationList when gasPrice is set by @kriss39 in https://github.com/NethermindEth/nethermind/pull/13450
- Vectorise JSON hex decoding and the byte hex writer by @benaadams in https://github.com/NethermindEth/nethermind/pull/13733
- Update EEST fixtures to tests@v21.0.0 by @benaadams in https://github.com/NethermindEth/nethermind/pull/13730
- fix(engine): forkchoiceUpdated waits for the head's own commit - behind queued blocks, a second copy, or a slow commit by @svlachakis in https://github.com/NethermindEth/nethermind/pull/13711
- return null from the proof methods for a transaction they cannot serve by @Matgothmog in https://github.com/NethermindEth/nethermind/pull/13366
- perf(state): parallelize whale storage verification and enable snapshot readahead in FlatTrieVerifier by @stdevMac in https://github.com/NethermindEth/nethermind/pull/12615
- perf(sync): bound and overlap snap downloads with response processing by @stdevMac in https://github.com/NethermindEth/nethermind/pull/12623
- fix(rpc): demote guard-rail WARNs and map no-state to -32002 by @stdevMac in https://github.com/NethermindEth/nethermind/pull/13643
- fix(flat): refuse unsafe Flat activations and warn when full prune is ignored by @stdevMac in https://github.com/NethermindEth/nethermind/pull/13644
- ZiskGuest: Bump ZisK toolchain to 1.3.0-alpha by @maximmenshikov in https://github.com/NethermindEth/nethermind/pull/13743
- Add FlatDb.DropPruningTrieState to reclaim the patricia trie after conversion by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/13572
- fix(rpc): include beacon tip in eth_syncing highest block by @nishant-uxs in https://github.com/NethermindEth/nethermind/pull/12739
- Remove the flat DB preimage recording feature by @asdacap in https://github.com/NethermindEth/nethermind/pull/13690
- perf: optionally pin block processing to the performance cores of an Intel hybrid CPU by @svlachakis in https://github.com/NethermindEth/nethermind/pull/13717
- ci: rebalance blockTest chunk counts to cut wall-clock by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/12380
- docs(agents): require AI agents to declare harness and model on GitHub by @asdacap in https://github.com/NethermindEth/nethermind/pull/13605
- fix(engine): reject null required Cancun payload fields by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/13747
- fix: avoid missing block processing queue drain by @benaadams in https://github.com/NethermindEth/nethermind/pull/13749
- fix(rpc): wake eth_sendRawTransactionSync after the tx index is published by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/13736
- Defer eligible RocksDB cleanup I/O to background workers by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13261
- Make EXPB regression campaigns faster and preserve complete run evidence by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13434
- Select flat Account index search automatically by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13260
- perf: skip ineffective thread priority syscalls on Linux by @benaadams in https://github.com/NethermindEth/nethermind/pull/13753
- fix(flat): verify warmer reads in flat adapters (#12951 follow-up) by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/12980
- feat(flat): add FlatDb.EnableCarryForwardCache by @asdacap in https://github.com/NethermindEth/nethermind/pull/13752
- Fix flaky RetryCache overflow allocation test counting background GC noise by @benaadams in https://github.com/NethermindEth/nethermind/pull/13745
- fix(flat): resync after RocksDB auto-repair by @stdevMac in https://github.com/NethermindEth/nethermind/pull/13645
- fix(archive-proofs): deep storage epoch snapshots only when epochs are dropped by @svlachakis in https://github.com/NethermindEth/nethermind/pull/13754
- Precreate RocksDB WAL files asynchronously by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13262
- Retry startup IP resolution and keep dialed endpoints when persisting peers by @benaadams in https://github.com/NethermindEth/nethermind/pull/13731
- Fix flaky DirtyNodeHasher rehash test reading a process-wide counter by @benaadams in https://github.com/NethermindEth/nethermind/pull/13738
- Fix flaky engine tests building a child on a parent whose state is not yet committed by @benaadams in https://github.com/NethermindEth/nethermind/pull/13740
- perf(flat): refresh the carry-forward account cache on commit instead of evicting by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/12960
- Disable EXPB CPU quota while preserving affinity by @benaadams in https://github.com/NethermindEth/nethermind/pull/13593
- Close the HasState/BeginScope gap and add target-aware world-state scopes by @asdacap in https://github.com/NethermindEth/nethermind/pull/13522
- fix(flat-history): prevent history walk ETA overflow from killing progress and discarding the walk by @stdevMac in https://github.com/NethermindEth/nethermind/pull/13761
- Update GitHub Actions to Node 24 versions by @benaadams in https://github.com/NethermindEth/nethermind/pull/13757
- Dispose engine test chains and fail tests that leak one by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/13767
- Report EIP-7708 finalization logs to tracers by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13567
- perf(rpc): serve eth_getFilterChanges from shared block and pending logs by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/13742
- Preserve account creation results in traced world state by @flcl42 in https://github.com/NethermindEth/nethermind/pull/13574
- Reject engine_getPayloadV5 at Amsterdam by @arunimshukla in https://github.com/NethermindEth/nethermind/pull/13755
- ci(zkevm): release SP1 and OpenVM guests alongside ZisK by @rubo in https://github.com/NethermindEth/nethermind/pull/13769
- fix(rpc): accept empty Parity trace selections by @banteg in https://github.com/NethermindEth/nethermind/pull/13667
- fix(rpc): reject trace filters with unavailable history by @banteg in https://github.com/NethermindEth/nethermind/pull/13677
- fix(flat): retry a gather whose state was just persisted instead of refusing it by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/13763
- fix(rpc): publish eth_subscribe logs for every canonicalised or removed block by @kriss39 in https://github.com/NethermindEth/nethermind/pull/13451
- ci(expb): per-dispatch CPU quota and cpuset overrides with host-cgroup readout by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13547
- fix: serialize Parity VM stack values as quantities by @banteg in https://github.com/NethermindEth/nethermind/pull/13750
- fix(tracing): serialize deleted account fields with deletion markers by @banteg in https://github.com/NethermindEth/nethermind/pull/13668
- Update Directory.Build.props for 2.1.0 by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14163
New Contributors
- @smallyunet made their first contribution in #12537
- @kriss39 made their first contribution in https://github.com/NethermindEth/nethermind/pull/13452
- @nishant-uxs made their first contribution in https://github.com/NethermindEth/nethermind/pull/12739
- @arunimshukla made their first contribution in https://github.com/NethermindEth/nethermind/pull/13755
Full Changelog: 2.0.0...2.1.0