Release notes
586 merged pull requests since 2.1.0, from 31 contributors.
Important
Hoodi: Glamsterdam activates on Mon, 26 Oct 2026, 17:42:48 UTC (timestamp 1793036568, epoch 132352). Hoodi nodes must run 2.2.0 or later before then. Your consensus client must support Glamsterdam on Hoodi as well.
Note
Upgrading from 2.0.x or 1.39.x? The breaking changes below cover 2.1.0 → 2.2.0 only. Apply the 2.1.0 breaking changes first (and, from 1.39.x, the 2.0.0 breaking changes and upgrade checklist).
For most nodes this is an in-place upgrade with no resync and no config change. Read Breaking changes first if you set JsonRpc.Host / JsonRpc.EngineHost to a host name, run with Init.DiagnosticMode=VerifyTrie or FlatDb.ImportFromPruningTrieState=true, use KeyStore.BlockAuthorAccount, pipeline requests over WebSocket or IPC, consume Parity-style trace_* output, or build plugins against Nethermind.
Highlights
- Amsterdam (Glamsterdam) on Hoodi. The fork is scheduled at
1793036568(Mon, 26 Oct 2026, 17:42:48 UTC), and Hoodi's chainspec now carries its correct beacon-chain genesis timestamp. (#14489, #13732) - Catch up finalized blocks from block access lists. On chains with EIP-7928, a node that is behind rebuilds the state of consensus-finalized ancestors from their verified block access lists and receipts instead of executing them, and executes only the unfinalized tail. It is on by default (
Sync.ReconstructFinalizedStateFromBlockAccessLists=true). Missing data or a commitment mismatch falls back to execution. (#14157) - Faster tracing on Amsterdam blocks. A single-transaction trace (
debug_traceTransaction,trace_transaction,trace_replayTransaction) on a block with a block access list no longer replays the transactions before the target, and whole-block traces run in parallel. All parallel block tracing now shares one node-wide budget,JsonRpc.TraceBlockParallelism(default 4). (#13906, #14363) - Blocks that load many large contracts. Glamsterdam allows 64 KiB contracts and 200M-gas blocks, so one block can touch ~58k distinct maximum-size contracts. The code DB moves from Snappy to LZ4 (mean block time on such a devnet range 2.6 s → 1.7 s, no block ≥ 6 s), missed code is copied once instead of twice (allocations per block 7.17 → 3.59 GB), and a block keeps the code it loaded for the rest of the block. (#13907, #14086, #14322)
- Lower
engine_newPayloadlatency. Storage trie nodes on the flat backend are written after the block is reported valid, committed storage writes are applied on an idle thread during execution, block-processing stages share one worker budget, sender recovery no longer competes with the transactions root, Kestrel reads large payload bodies in 64 KiB blocks, and the payload pipeline is warmed before RPC opens (first-payload latency 66.8 ms → 5.4 ms in the PR's measurement). (#14058, #14059, #14182, #14164, #14213, #14443, #13931, #14481) - Prewarmer hand-off. Block processing takes over a transaction the prewarmer already executed when its recorded footprint matches the state the block has reached, instead of executing it again (hidden
Blocks.PreWarmHandoff, on by default; not used for blocks with a block access list or under EIP-8037). (#14312, #14476) - Parity-style trace standardisation. A long series of
trace_*fixes aligns Nethermind with the draft trace spec (execution-apis#890) and with Erigon/Reth: failed precheck frames, reverted-frame results, Parity error labels,trace_filtermode/blockHash,trace_getbytraceAddresspath,nullfor unknown transactions, and stricter parameter validation. Several of these change output; see Breaking changes. (#13957, #13981, #13857, #14111, #13858, #13937) - Geth-compatible debug tracing.
keccak256PreimageTracer, Geth opcode-logger byte limits,debug_traceCalltxIndex, block-widecallTracerlog indices, corrected trace-file records, and per-request V8 runtimes so JavaScript traces run in parallel. (#13662, #13670, #13700, #13693, #13709, #13727, #13737, #13541) - Faster JSON-RPC serialization. Blocks, RPC transactions and logs are written by source-generated writers (full
eth_getBlockByNumberwith 200 txs −13% time / −93% allocations;eth_getLogsof 1,000 logs −14%), and public WebSocket/IPC connections process up to 16 requests concurrently. (#14299, #14345) - New
mainnet_aztecconfig with a rolling 4,096-block trace window on the flat-history backend and the per-transaction trace index. (#14038) - SendPolicy plugin (opt-in). Checks every transaction submitted through the node's JSON-RPC against an owner-written rule file (allowed senders/destinations, token-call allow-lists, fee and spend caps) and refuses the ones that break it. Off by default (
SendPolicy.Enabled=false). (#14396) - Next-fork prototypes (not scheduled on any public network). EIP-8141 frame transactions with EIP-8250 keyed nonces and EIP-8272 recent roots, EIP-7979, EIP-8131, EIP-3298, EIP-7668, EIP-8253, EIP-8279. They activate only through explicit chainspec/genesis keys or the Bogota fork alias. (#12526, #13932, #13929, #13928, #13934, #13943, #13942, #14386)
Performance
- Code DB on LZ4: on a Glamsterdam devnet range of blocks that each read ~3.7 GB of 64 KiB code, mean block time fell from 2.58–2.63 s to 1.70–1.72 s and the slowest block from 7.8 s to 5.3 s (measured on LZ4-recompacted files); point reads of large values 88–93 µs → 47–49 µs; the code DB shrank 475 MB → 303 MB. New and compacted SST files use LZ4. (#13907)
- Large-contract blocks: missed code is copied once (−31% block time, −50% allocations on a 58k × 64 KiB block); code reads no longer fill the RocksDB row cache, which is turned off for the code DB. (#14086)
- Payload start-up: median first-payload latency 66.8 ms → 5.4 ms with the pipeline warm-up (process start to first VALID +0.8 s; disable with
Init.PipelineWarmupEnabled=false). The ~2 s KZG trusted-setup load is no longer on the startup critical path. (#13931, #13998) - JSON-RPC: generated writers for blocks/transactions/logs (−13–27% time, up to −93% allocations), fewer passes over request and batch bodies, allocation-free filter binding,
newHeadsserialized once for all subscribers. (#14299, #14187, #14197, #14198, #14195, #13894) - RLP: built-in transaction types encode/decode without virtual dispatch (legacy encode −29%, EIP-1559 encode −11%). (#14455)
- EVM: a long series of interpreter micro-optimisations (frameless MLOAD/MSTORE, padded code copy without end-of-code checks, cheaper DUP/EXP/SUB/SIGNEXTEND, per-depth call frame reuse, cached EIP-7702 delegation targets). (#14028, #13896, #13893, #13878, #13802, #14139, #13799 and others)
- Flat backend reads: a bloom filter lets read-only execution (
eth_call,eth_estimateGas,eth_createAccessList,eth_simulateV1, traces) skip in-memory layers for slots none of them wrote (FlatDb.InMemorySnapshotBloomBitsPerKey, default 14). The carry-forward slot cache becomes a fixed 64 MB set-associative table. (#14094, #14330, #14027) - Tracing: streamed struct logs flush every 1 MiB so a slow reader no longer holds hundreds of MB per request;
trace_filterstops oncecounttraces are collected. (#14461, #13890) - Networking: inbound transaction admission is budgeted before decoding (16 MiB per peer, 64 MiB total), oversized broadcast transactions are skipped before decoding, eth/snap response request IDs are checked before decoding, and discovery runs on a plain UDP socket instead of DotNetty. (#14434, #13506, #14184, #14346)
- Transaction pool: an underpriced replacement of a set-code, blob or frame transaction is rejected before its authorization signatures are recovered or its blob proofs checked. (#14577)
- zkVM guests: dozens of ZisK/SP1 guest optimisations (precompile-backed 256-bit arithmetic, Keccak and SHA-256, register-based dispatch, cheaper trie and witness handling) and tests-zkevm v21.0.1. (#14232, #14217, #13975, #14402, #14118 and others)
⚠️ Breaking changes
If you run a node (config and startup)
JsonRpc.Host,JsonRpc.EngineHostandAdditionalRpcUrlshost names are resolved and bound to their addresses. Before, any host that was not an IP literal orlocalhostmade Kestrel listen on all interfaces. Now the node listens only on the addresses the name resolves to; if it cannot resolve or resolves to a wildcard address, JSON-RPC does not start (the node keeps running and logs the host). Migration: behind NAT or with public DNS, configure a local interface IP; with Docker service names, point health checks at the bind address; to keep listening on every IPv4 interface, set the host to0.0.0.0explicitly. IP literals,localhost,*and+are unchanged. (#13746)Init.DiagnosticMode=VerifyTrieandFlatDb.ImportFromPruningTrieState=truenow run only their step and exit, instead of doing the work mid-boot and continuing into a normal start. Equivalent commands:nethermind verify-trieandnethermind import-flat-db.verify-triereports its verdict through the exit code (and fails on a DB with no head); the import fails if there is nothing to import. Migration: run the import/verification as a one-off, then remove the setting before starting the node normally. (#13715)KeyStore.BlockAuthorAccountwhose key cannot be loaded is now a configuration error on nodes with mining enabled (Clique, AuRa and XDC stop at startup). Before, the node fell back to sealing with the node key. Nodes that leave it unset are unaffected. (#14290)- The node refuses to start when
JsonRpc.WebSocketsPortequals the engine port andInit.WebSocketsEnabled=true. Before, it started without an Engine API and only logged a warning. Use a differentWebSocketsPort. (#14285) - WebSocket and IPC connections process up to 16 requests concurrently (
JsonRpc.WebSocketsProcessingConcurrencyandJsonRpc.IpcProcessingConcurrency1 → 16), so pipelined requests on one public connection can be answered out of order — match responses byid. A batch is still processed and answered in order. Authenticated/Engine connections, and IPC whenJsonRpc.EnabledModulesincludes Engine, still process one request at a time. Migration: set the option to1if a client relies on ordering (for example, pipelined dependent blob transactions with consecutive nonces). (#14345) - Buffered struct-log traces are capped at 256 MiB of opcode log per transaction (new
JsonRpc.MaxBufferedTraceLogSize); larger non-streamed traces are truncated like a callerlimit. Set0for the previous unlimited behaviour. (#14460) eth_sendRawTransactionSyncconcurrency is capped by the newJsonRpc.RpcTxSyncMaxConcurrentRequests(default 128;0disables). Calls over the cap fail immediately with-32005(HTTP 503) before the transaction is submitted. (#13735)- TraceStore serves only the trace types it recorded and falls back to live tracing otherwise; with
TraceStore.TraceTypes=Tracealone,trace_blockandtrace_filternow need historical state (configureTraceandRewardsto serve them from the store). On pruned nodes these can return a missing-state error instead of incomplete output. (#14123) - Log and metric changes: snap sync logs
Phase 1 of 2/State Sync (Phase 2 of 2, healing)instead of the misleading healing percentage (#14308, #14344); flat DB metricnethermind_carry_forward_slot_wipesis replaced bynethermind_carry_forward_slot_evictions(one eviction = one entry, do not reuse wipe thresholds) (#14027). Update dashboards and log alerts that match the old strings. FlatDb.HistoryTransactionIndexTraceParallelismis deprecated in favour ofJsonRpc.TraceBlockParallelism; a non-zero value still overrides it. (#14363)- A block that takes longer than 3 minutes to process is abandoned without a verdict (new
Blocks.BlockProcessingTimeoutMs, default180000;0disables). It applies only to the main block-processing loop, not to tracing, simulation or block production. The block is not marked invalid,engine_newPayloaddoes not answerINVALIDfor it, and it can be processed again; each consecutive retry of the same block gets twice the time, up to 16×. The node logsProcessing block <hash> took longer than <n> ms; abandoned without a verdictat Error. Migration: on slow hardware that legitimately needs longer (for example, a full sync through unusually heavy historical blocks), raise the value or set it to0. (#14487)
If you integrate over JSON-RPC / Engine API
Parity-style trace_* (most changes follow the draft trace spec in execution-apis#890):
trace_getreturns a single trace object ornull, not an array. Its argument is onetraceAddresspath:[]is the root,["0x6","0x0"]is the first child of child 6. Migration: read an object/null; to address by flat position, index the result oftrace_transaction. (#13858)- Reverted frames in Parity traces (
trace_*) now includeresult: {gasUsed, output}next toerror: "Reverted"(CREATE included, withoutaddress/code). In 2.1 onlyerrorwas present; exceptional halts still have noresult. Error labels are renamed:Stack overflow→Out of stack,Access violation→Out of bounds,Static call violation→Mutable Call In Static Context, the genericErrorfor an EIP-35410xEFcode prefix →Invalid code, andTransactionCollision→Contract address collision. This aligns Nethermind with Geth, Erigon and reth. Traces already saved by TraceStore keep the old labels until traced again. Migration: consumers that read "noresult" as "failed" must checkerror; update any matching on the old labels. (#13981) - A CALL that fails its balance or call-depth precheck now appears as a failed frame in both
callTracer(error: "insufficient balance for transfer"/"max call depth exceeded") and Parity output (Insufficient balance for transfer/Max call depth exceeded, noresult). A CREATE that fails its precheck is reported the same way, and a colliding CREATE2 gets a failed frame withContract address collision(callTracergasUsedequals itsgas). The parent'ssubtracesand later siblings'traceAddressshift accordingly. InvmTrace, thecostof such a CREATE now includes the gas it forwarded, and the operation after a collision starts with the gas actually left. This matches Geth and Erigon. (#13957, #13958) vmTraceex.store.key/ex.store.valare minimal hex quantities (0x0,0x1) instead of a padded word / byte string. (#13780) DUPn now reports n + 1pushvalues (#13781); bufferedmem.offis a number (#13940).trace_filtervalidation: unknown members, negativeafter/count, and an unknownmodereturn-32602(#14050, #13857);mode: "union"is now honoured and an emptyfromAddress/toAddressarray behaves like an omitted one, so some requests that returned[]now return records (#13857). A block hash is no longer accepted asfromBlock/toBlock— use the newblockHashmember (#14111). Bounds past the head or reversed return-32602(#14040, #13935). Post-merge blocks no longer produce zero-value reward records, which shifts pagination over PoS ranges (#13938).pendingis rejected (-32602) bytrace_call,trace_callMany,trace_block,trace_replayBlockTransactionsandtrace_filter, instead of silently tracinglatest.eth_*anddebug_*are unchanged. (#13936)trace_rawTransactionrejects a signed gas limit aboveJsonRpc.GasCap(-38026) instead of lowering it; raise the cap to trace larger transactions (#14060). It also validates the transaction like block inclusion (nonce, sender code, chain ID, fee cap vs base fee) instead of tracing it with the sender's nonce (#14091, #14048).trace_transaction,trace_getandtrace_replayTransactionreturnnullfor an unknown transaction instead of-32000, including transactions outside theTxLookupLimitwindow. (#13937, #14037)trace_call/trace_callManyerrors use theeth_simulateV1codes (e.g.-38014insufficient funds,-38015batch over block gas limit) instead of-32000; messages are unchanged. A mismatchedchainIdis-32602. (#14158, #13956)trace_call/trace_callManycalls without a price run withBASEFEE0, aseth_call,debug_traceCallandeth_simulateV1already did. A call with no fee fields,gasPrice0, or both fee caps 0 used to see the block's base fee; intrace_callManyeach unpriced call now getsBASEFEE0 and each priced call the block's. A call whose execution depends onBASEFEEcan therefore return a differentoutput,vmTraceandstateDiff. Migration: setgasPriceormaxFeePerGasto trace against the block's base fee. (#14045)
Other JSON-RPC:
- Call objects with both
dataandinputset to different values are rejected with-32602. Send calldata ininput(or both, equal). An explicitnullinputno longer clears calldata given indata, and an explicitnullforaccessList,blobVersionedHashesorauthorizationListno longer selects a transaction type. (#14089, #14049, #13897) eth_sendTransaction(node wallet) on a post-London network with zero base fee rejectsgasPrice: 0x0/maxFeePerGas: 0x0. Send a non-zero fee or sign locally and useeth_sendRawTransaction. (#14375)eth_sendRawTransactionSynctimeouts return EIP-7966 error code4with the transaction hash indata, instead of-32016without data, so a client can keep polling for the receipt. (#13820)- Blob calls without a positive
maxFeePerBlobGasrun at a blob base fee of 0 ineth_call,eth_estimateGas,trace_callandtrace_callMany(Geth behaviour). (#14092) eth_simulateV1drops logs from reverted inner frames while keeping log indices aligned with Geth. (#13979, #14062)eth_call/eth_estimateGasreport precompile input failures with go-ethereum's error text;eth_estimateGasno longer reports them asgas required exceeds allowance. (#14281)debug_setHead/debug_resetHeadare now guarded rewinds: pause withadmin_pauseBlockProcessingand let processing drain first, then resume withadmin_resumeBlockProcessing. While paused, everyengine_forkchoiceUpdatedreturnsSYNCING(including with payload attributes), so the node builds no payloads until resumed. (#13558)- Engine API:
engine_newPayloadV3+ rejects omitted ornullpayload fields;engine_newPayloadV3/V4outside their fork window return Unsupported fork (incomplete payloads there get invalid params); a forkchoice to a processed block whose state was pruned no longer moves the head, and a resubmitted known block whose state was pruned is re-executed instead of answered VALID. (#14025, #14024, #14131, #14366, #13686)
If you build against Nethermind (plugin / library authors)
These are source-breaking changes: rebuild your plugins against 2.2.0.
IReadOnlyStateProvider.GetCodeandIWorldStateScopeProvider.ICodeDb.GetCodereturnReadOnlyMemory<byte>instead ofbyte[](default= not served). (#14086)BlockForRpc.Transactionsis typed asBlockTransactions(hashes or full transactions). (#14299)- Built-in transaction decoders are no longer generic over the transaction type and drop their
protected virtualhooks;BaseAccessListTxDecoderandOptimismLegacyTxDecoderare removed (LegacyTxDecodertakesallowEmptySignature). (#14455) ICommitter/IBlockCommitterquota methods are replaced byTryEnableParallelCommit/SupportsParallelCommit; the quota constructor parameter is removed fromFlatStorageTreeandAbstractMinimalCommitter. (#13988)WaitHandleExtensions(WaitOneAsync) is removed. (#13945)TxPoolTxSource.GetOrderedTransactions(protected virtual) takes an additionalIReleaseSpec specparameter; overrides must add it. (#14304)- Custom
ITxTracerimplementations receive paired instruction callbacks (ReportOperationRemainingGasonly after a reportedStartOperation; resumes viaReportGasUpdateForVmTrace). (#13551) - Init steps can be declared as standalone commands with
[StepCommand]; a step carrying it never runs during a normal start. (#13715)
Consensus / protocol (prototype forks only)
- The EIP-8272 recent-root contract moves to
0x8272D9679689Ea2f307140CdF9002D27dC00Ffffand is deployed by an ordinary pre-signed transaction instead of being installed at activation; the EIP-8250 nonce manager and EIP-8141 expiry verifier follow the same model. (#14437, #14438, #14378) - EIP-7708 finalization logs are emitted in destroy order. Not observable on any shipped configuration (Amsterdam enables EIP-8246, which suppresses them). (#13568)
Default and configuration changes
Diffed I*Config.cs defaults and Nethermind.Runner/configs/*.json between 2.1.0 and 2.2.0.
Changed defaults
| Key | 2.1.0 | 2.2.0 | PR |
|---|---|---|---|
JsonRpc.WebSocketsProcessingConcurrency
| 1
| 16
| #14345 |
JsonRpc.IpcProcessingConcurrency
| 1
| 16
| #14345 |
Db.CodeDbRowCacheSize (hidden)
| 16 MiB | unset (no row cache) | #14086 |
Db.CodeDbRocksDbOptions (hidden)
| Snappy (inherited) | compression=kLZ4Compression; prepended
| #13907 |
New settings
| Key | Default | Purpose | PR |
|---|---|---|---|
Sync.ReconstructFinalizedStateFromBlockAccessLists
| true
| Rebuild finalized ancestors from verified BALs instead of executing them (EIP-7928 chains only) | #14157 |
Init.PipelineWarmupEnabled
| true
| Warm the payload pipeline before RPC opens | #13931 |
JsonRpc.TraceBlockParallelism
| 4
| Node-wide parallel block-trace budget | #13906, #14363 |
JsonRpc.MaxBufferedTraceLogSize
| 268435456 (256 MiB)
| Cap on non-streamed struct-log size per tx; 0 = unlimited
| #14460 |
JsonRpc.RpcTxSyncMaxConcurrentRequests
| 128
| Cap on concurrent eth_sendRawTransactionSync; 0 disables
| #13735 |
FlatDb.DeferStorageTrieCommit
| true
| Write storage trie nodes after the block is reported valid | #14058 |
FlatDb.ApplyStorageWritesOnIdleThread
| true
| Apply committed storage writes on an idle-priority thread | #14059 |
FlatDb.MaxInMemorySnapshotBytes
| 0 (off)
| Byte budget for the in-memory snapshot window | #13972 |
FlatDb.InMemorySnapshotBloomBitsPerKey
| 14.0
| Negative filter for read-only slot reads; 0 disables
| #14094 |
SendPolicy.Enabled / RulesPath / JournalPath / WarnOnly
| false / null / null / false
| SendPolicy plugin | #14396 |
TxPool.FrameTx* (9 keys)
| — | EIP-8141 frame-transaction pool limits (prototype) | #12526 and follow-ups |
Blocks.PreWarmHandoff, Blocks.PrefetchBlockAccessListCode (hidden)
| true, false
| Prewarmer hand-off; BAL code prefetch | #14312 |
Blocks.BlockProcessingTimeoutMs
| 180000 (3 min)
| Abandon a block that takes longer to process, without a verdict; each retry gets twice the time (up to 16×); 0 disables
| #14487 |
Deprecated: FlatDb.HistoryTransactionIndexTraceParallelism (hidden; use JsonRpc.TraceBlockParallelism). Removed keys: none.
Bundled configs: new mainnet_aztec.json; sync pivots refreshed for op-mainnet, op-sepolia, worldchain-mainnet, worldchain-sepolia; OP Superchain chainspecs refreshed (#13944, #14231). Chains/hoodi.json gains amsterdamTime and beaconChainGenesisTimestamp.
Sync, database & state
- A block access list sync stops at the EIP-7928 activation block instead of scanning back to genesis. (#14368)
- Snap sync warns when a restart discards existing flat state and reports how long the wipe took. (#14297)
- Account wipes survive BAL healing; TreeSync node dependencies are resolved atomically. (#14156, #14051)
- Unanchored forks stay out of bulk snapshot conversion; carry-forward generation is rechecked after a cache hit. (#13997, #14026)
- A periodic log line reports how far the head is behind the chain tip and the estimated catch-up time. (#10892)
- The flat import reports progress at Info every 60 s. (#13724)
- During snap sync, a flat-DB node answers JSON-RPC reads of
latestat once with a missing-state error, instead of retrying for 5 s and failing with-32603. (#14635)
JSON-RPC & tracing
eth_call,eth_estimateGasandeth_createAccessListtreat anullor zeroJsonRpc.GasCapas uncapped instead of failing every request. (#14001)eth_createAccessListfills the missing half of a fee pair: the suggested priority fee next to amaxFeePerGas, or the priority fee plus twice the base fee next to amaxPriorityFeePerGas. (#14377)- Code written during a call replaces a
stateOverridecode override for the rest of the call ineth_call,eth_estimateGas,eth_simulateV1,trace_callanddebug_traceCall. (#14114) eth_simulateV1on Amsterdam applies theblobBaseFeeandmovePrecompileToAddressoverrides, and simulated blocks carry a slot number, soSLOTNUMworks. (#14057, #13688)eth_getLogsrejects a reversed range that ends at block zero (latesttoearliest) with-32602, as it already did for other reversed ranges. (#13999)trace_blockandtrace_replayBlockTransactionsreturn[]for the genesis block instead ofheader not found. (#13783, #13801)trace_filteraddress filters match rewards by their author, and match a failed CREATE only by its creator. (#13800, #14039)trace_call/trace_callManyreject a priority fee above the fee cap witheth_call's reason;debug_traceCallrejectsstateandstateDiffoverrides for the same account. (#14046, #14359)- Streamed traces that fail return a complete error instead of a truncated success. An unknown JavaScript tracer name is rejected before a JavaScript engine is created, and
ctx.txIndexreports the transaction's position in its block. (#13666, #13529, #14249) - TraceStore reads stored
vmTraceandstateDifftraces, selects them like live replay, and serves stored transaction traces only from canonical blocks. (#14093, #14115, #14122) - RPC metrics and stats use the dispatched method name, so whitespace variants no longer create separate labels. (#14194)
Engine API & block processing
engine_getPayloadV3/V4choose their fork window by whether execution requests are enabled, not by EIP-7623. (#13833)- A block
engine_newPayloadhas already accepted stays queued for processing when the request's time budget runs out; the request still answersSYNCING. (#14337) - At startup, a side branch with no ancestor state is dropped instead of re-executing genesis on an empty state. (#14324)
- The transaction pool re-adds the transactions of every block the head rewinds past. (#14492)
- The pre-merge block producer is stopped on shutdown. (#14168)
Networking & protocol
- discv4: Ping forward compatibility, verified ENRs retained for mismatched PING endpoints, EIP-1459 DNS tree-root signatures verified, second Hello disconnects the peer, a pong completes a ping only when it comes from the pinged endpoint. (#14151, #14277, #14183, #13832, #14576)
- Concurrent node-filter acceptance is serialised; rejected peer candidates back off. (#14381, #14190)
Stability & hardening
- .NET libraries updated to the October 2026 servicing release, which carries Microsoft's security fixes (.NET 10.0.13 CVE list) (#14628):
- 10.0.12 → 10.0.13:
Microsoft.AspNetCore.DataProtection,Microsoft.AspNetCore.DataProtection.Extensions,Microsoft.Extensions.Caching.Memory,Microsoft.Extensions.DependencyInjection,Microsoft.Extensions.FileProviders.Embedded,Microsoft.Extensions.Logging.Abstractions,Microsoft.Extensions.Logging.Console,Microsoft.Extensions.ObjectPool,System.Configuration.ConfigurationManager,System.IO.Hashing,System.Security.Cryptography.ProtectedData - 2.0.12 → 2.0.13:
System.CommandLine - 10.0.401 → 10.0.402 (build-time only):
Microsoft.Build.Tasks.Git,Microsoft.SourceLink.GitHub
- 10.0.12 → 10.0.13:
Nethermind.RocksDbBindingsupdated to the stable11.8.1.153. (#14617)- Docker images run on .NET 10.0.13: runtime base
aspnet:10.0.13-resolute(and-resolute-chiseled), build SDK10.0.402, so the runtime and ASP.NET Core fixes of the same servicing release ship in the images too. (#14632)
L2 & other chains
- Optimism: Jovian operator fee and DA footprint reported in receipts (#13811); the sequencer's error is returned when forwarding
eth_sendRawTransaction(#13815); EIP-1559 params with zero elasticity and a non-zero denominator are rejected (#13816). - Taiko: Shasta headers whose
extraDatais not exactly 7 bytes are rejected. (#13817) - XDC:
XDPoS_getV2Block*header encoding andXDPoS_getMissedRoundsInEpochByBlockNumbefore the V2 switch fixed. (#14175, #14008) - Shutter: missed keys are counted atomically. (#14238)
Glamsterdam fork on Hoodi
| Network | Epoch | Start slot | Unix | UTC |
|---|---|---|---|---|
| Hoodi | 132352 | 4235264 | 1793036568 | Mon, 26 Oct 2026, 17:42:48 UTC |
Fork hash after activation: 0x3d068b59 (#14489). Your consensus client must support Glamsterdam as well. Check your CL's release notes for its Hoodi Glamsterdam release. Sepolia activated Glamsterdam on 06 Oct 2026 (2.1.0). Mainnet is not scheduled.
Build signatures
The packages are signed with the following OpenPGP key: AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617E
What's Changed
- chore: replace version suffix with "preview" by @rubo in #13773
- ci(zkevm): simplify zkVM guest release versioning by @rubo in #13775
- feat(eip8141): implement frame transactions (EIP-8250 keyed nonces, EIP-8272 recent roots, blob support) by @svlachakis in #12526
- chore(zkevm): bump up tests-zkevm version by @rubo in #13789
- fix(evm): report DUPn vmTrace push as n + 1 words by @banteg in #13781
- fix(tracing): include forwarded gas in streamed vmTrace create cost by @banteg in #13782
- fix(rpc): return no traces for the genesis block in trace_block by @banteg in #13783
- fix(tracing): serialize vmTrace store key and value as quantities by @banteg in #13780
- feat(rpc-bench): reliable fixed-corpus eth_call A/B (corpus-ab preset, ABBA rounds, paired replay) by @kamilchodola in #12987
- fix(tracing): report vmTrace store without stateDiff by @banteg in #13779
- fix(rpc): isolate synchronous transaction concurrency by @marcindsobczak in #13735
- Stop an unmapped peer client type aborting header sync by @kamilchodola in #13540
- fix(stateless): bind supplied public keys to transaction signatures by @LukaszRozmej in #13785
- fix(build): stop the SSZ generator writing to the compiler server's stdout in debug builds by @LukaszRozmej in #13826
- fix(monitoring): let fork-choice subscribers skip a failed preparation by @kamilchodola in #13518
- perf(evm): pass MUL/DIV/MOD operands from their stack slots by reference by @marcindsobczak in #13806
- perf(evm): resolve the jump-destination bitmap when the stack is built by @marcindsobczak in #13803
- fix: give simulated blocks a slot number so SLOTNUM works in eth_simulateV1 by @Marchhill in #13688
- Preserve multidimensional gas in eth_simulateV1 blocks by @flcl42 in #13626
- Cover terminal opcode tracer callbacks by @flcl42 in #13625
- fix(tracing): reject an unknown tracer name before creating a JavaScript engine by @kamilchodola in #13529
- test: count a mock connect only once its session is registered by @LukaszRozmej in #13829
- Emit EIP-7708 finalization logs in destroy order by @flcl42 in #13568
- Report transaction access on no-frame EVM exits by @flcl42 in #13624
- Report terminal output for top-level action traces by @flcl42 in #13622
- Deplete eth_simulateV1 state gas budget by @flcl42 in #13623
- fix(blocktree): keep a lighter re-suggested fork from replacing the best suggested header by @LukaszRozmej in #13831
- test: wait for both handlers before asserting in Peers_are_freed_while_responses_wait_for_a_processing_slot by @LukaszRozmej in #13830
- test: let should_duplicate_writes_while_pruning run pruning to completion by @LukaszRozmej in #13827
- test: wait on the pruning task as well as the write in Will_Persist_ReCommittedPersistedNode_FromCommitBuffer by @LukaszRozmej in #13828
- Report EIP-8037 two-dimensional block gas used in eth_simulateV1 by @flcl42 in #13628
- test: guard the traceCallMany gas default against EIP-7825's cap under Osaka by @Marchhill in #13729
- perf(stateless): hash the signed payload from the transaction's own bytes by @LukaszRozmej in #13822
- fix(rpc): match rewards by author in trace_filter address filters by @banteg in #13800
- fix(rpc): check the parent's state when tracing a transaction by index by @Matgothmog in #13516
- perf(tools): read execution requests from a beacon node in StatelessInputGen by @stdevMac in #13794
- Pair instruction trace completions with starts by @flcl42 in #13551
- Load pyspec fixtures lazily to cut NUnit discovery memory by @flcl42 in #13557
- test: trace the simulate block-gas saturation test through a BlockReceiptsTracer by @LukaszRozmej in #13845
- Pass return data to tracers as ReadOnlySpan by @LukaszRozmej in #13844
- feat(network): reject oversized transactions before decoding by @Matgothmog in #13506
- fix(sync): bound concurrent block access list requests per peer by @Marchhill in #13790
- test(engine): return from SendNewBlockV2 only once the block is committed by @marcindsobczak in #13764
- fix(rpc): keep eth_feeHistory arrays aligned when an ancestor body is unavailable by @0xShadowX in #13818
- perf(core): pack ValueHash256 and Signature's vector storage to 8-byte alignment by @kamilchodola in #13837
- fix(rpc): return EIP-7966 code 4 with the tx hash when eth_sendRawTransactionSync times out by @Bruce039 in #13820
- fix(engine): gate getPayloadV3/V4 on execution requests, not EIP-7623 by @Matgothmog in #13833
- fix(optimism): reject EIP-1559 params with a zero elasticity and non-zero denominator by @FlashWayne in #13816
- Complete guarded debug_setHead and debug_resetHead rewinds by @benaadams in #13558
- fix(optimism): return the sequencer's error when forwarding eth_sendRawTransaction by @FlashWayne in #13815
- ci(rpc-bench): serve per-client snapshot sets on the arm64 runner by @kamilchodola in #13300
- perf(diag): make the cross-block state cache observable by @kamilchodola in #12958
- Reuse bounded buffers for nested RETURN and REVERT output by @kamilchodola in #13797
- fix(rpc): return no traces for the genesis block in trace_replayBlockTransactions by @banteg in #13801
- perf(tracing): give every JavaScript block trace its own V8 runtime by @kamilchodola in #13541
- Reduce per-thread retention of pinned EVM stacks by @kamilchodola in #13795
- test: drop redundant MaxTime from runner smoke tests by @LukaszRozmej in #13774
- fix: give Hoodi its beacon chain genesis timestamp by @Marchhill in #13732
- Seed every head-derived fact at construction by @Marchhill in #13472
- fix(stateless): reject a schema fork the chain schedule has left by @LukaszRozmej in #13787
- fix(tracing): handle failed precompiles without a vmTrace operation by @banteg in #13847
- test(stateless): pin the fail-closed handling of incomplete input by @LukaszRozmej in #13788
- docs(xdc): add a subnet setup guide to the module README by @ak88 in #12891
- perf(rpc): reuse the hash and CodeInfo of repeated state-override code by @marcindsobczak in #13808
- perf(evm): keep SUB, SHL and SHR handlers free of out-of-line calls by @marcindsobczak in #13802
- test: keep long finality off when a test replaces IFlatDbConfig by @LukaszRozmej in #13856
- test: give the suggest pacer's unblock continuation time to run on a loaded runner by @LukaszRozmej in #13853
- test(sync): drain a timed-out state sync round before starting the next by @LukaszRozmej in #13846
- test: wait for Changed as well as the data in FileLocalDataSourceTests by @LukaszRozmej in #13855
- fix(network): disconnect peers that send a second Hello by @Matgothmog in #13832
- Reduce zero-ahead clearing for small EVM memory expansions by @kamilchodola in #13796
- perf(flat): build per-scope tries and maps on first need by @kamilchodola in #13838
- test: find the embedded leaf when a storage proof ends in a branch by @LukaszRozmej in #13859
- Cache EIP-7702 delegation targets in CodeInfo by @kamilchodola in #13799
- test: run the StorageCleared metric tests in their own non-parallel fixture by @benaadams in #13863
- feat(init): run a single step as a standalone command by @asdacap in #13715
- test: run simulate forced-fail tests without the production RPC timeout by @LukaszRozmej in #13843
- fix: create the RetryCache timer in the constructor instead of on a pool thread by @LukaszRozmej in #13854
- test(sync): drain a timed-out state sync round before failing the test by @svlachakis in #13865
- Report flat import progress at Info level on a 60 s heartbeat by @marcindsobczak in #13724
- perf(state): grow heavy storage maps into pooled large maps by @kamilchodola in #13840
- perf(flat): pool flat-state buffers without per-thread copies or per-return nodes by @kamilchodola in #13839
- Tone down dated emphasis in agent rules and skills by @LukaszRozmej in #13792
- fix(rpc): select trace_get results by traceAddress path by @banteg in #13858
- fix: end an inclusion-list sender run at a tx skipped for size by @Marchhill in #13382
- fix(ethash): bound peer-selected header numbers before Ethash cache construction (F-15) by @hudem1 in #13374
- fix(txpool): track EIP-7702 authorities only for tuples valid on this chain by @LukaszRozmej in #13869
- perf(rpc): serialize each newHeads notification once for all subscribers by @svlachakis in #13894
- perf(evm): write small results to the stack slot with one store by @svlachakis in #13871
- perf(evm): store top-level deployed code without an extra copy by @svlachakis in #13872
- perf(receipts): take the stored sender before running ecrecover by @svlachakis in #13873
- perf(rpc): remove per-call allocations on hot RPC paths by @svlachakis in #13874
- perf(state): skip the dead journal probe in GetOriginal without transaction snapshots by @svlachakis in #13876
- perf(evm): compute EXP into the exponent's stack slot by @svlachakis in #13878
- perf(evm): skip the empty log journal for plain value transfers by @svlachakis in #13879
- perf(evm): hash the precompile cache key once by @svlachakis in #13877
- perf(evm): check DUP stack bounds with one compare by @svlachakis in #13893
- perf(logs): recover only log identity when eth_getLogs matches a stored block by @svlachakis in #13892
- perf(evm): take the MCOPY fast path on inline frame memory by @svlachakis in #13882
- perf(evm): cache the return scratch tracer check once per transaction by @svlachakis in #13881
- perf(evm): dispatch SIGNEXTEND and JUMPDEST as checked bodies by @svlachakis in #13891
- perf(evm): resolve cold storage access with a single set probe by @svlachakis in #13883
- perf(trace): sort state diff entries in pooled buffers instead of LINQ by @svlachakis in #13900
- perf(evm): resolve code through a virtual loader instead of a delegate by @svlachakis in #13870
- perf(tracing): seed transaction traces from the block access list by @svlachakis in #13906
- perf(state): keep the storage read shortcut per round instead of per block by @svlachakis in #13889
- perf(evm): serve nested ID precompile frames from the precompile scratch by @svlachakis in #13888
- perf(tracing): skip commitments of block replays nobody reads by @svlachakis in #13884
- perf(zkevm): compare jump-destination bytes at 64 bits by @LukaszRozmej in #13860
- perf(evm): poll cancellation on taken jumps instead of every opcode by @svlachakis in #13895
- perf(trace): stop trace_filter once count traces are collected by @svlachakis in #13890
- Compute EVM zero-ahead alignment mask directly by @benaadams in #13880
- ci: skip the scheduled nightly when it would republish the same commit by @benaadams in #13864
- test: prewarm before the BAL hint in BlockCachePreWarmerTests by @LukaszRozmej in #13902
- test: give FileLocalDataSourceTests reload waits room for a starved thread pool by @LukaszRozmej in #13924
- test: keep the pending discovery candidate from flooding the storage cache by @LukaszRozmej in #13925
- test: keep the budget test's coordinator on the joining thread by @LukaszRozmej in #13926
- test: assert SeqlockCache concurrency hits across workers, not per worker by @LukaszRozmej in #13927
- perf(runner): warm the payload pipeline before RPC opens by @benaadams in #13931
- test: deflake blockhash allocation assertions by @benaadams in #13939
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in #13944
- Replace explicit wait handles with managed cancellation and task signaling by @benaadams in #13945
- fix(rpc): preserve error responses for streamed traces by @banteg in #13666
- perf(evm): zero only the touched chunk of the inline memory tier on reads by @svlachakis in #13962
- perf(state): TSTORE of zero looks up without inserting by @svlachakis in #13963
- perf(evm): hoist the frame input data onto the stack by @svlachakis in #13965
- fix(rpc): reject the pending block tag in trace methods by @banteg in #13936
- Make pruned RPC comparisons reproducible and reusable by @hudem1 in #13660
- Check header cache before resolving block numbers by @benaadams in #13952
- Cache RocksDB read settings at database open by @benaadams in #13946
- perf: thread the opcode counter as a native int by @LukaszRozmej in #13862
- perf(evm): allocate create frame CodeInfo after the collision check by @svlachakis in #13948
- perf(evm): build invalid-tx log messages only when logged by @svlachakis in #13961
- perf: remove small recurring allocations in metrics, scopes, trie and EVM by @kamilchodola in #13841
- perf: apply and persist forkchoice state once per forkchoiceUpdated by @benaadams in #13951
- perf(evm): exempt the dispatch tail calls from NativeAOT's fat-pointer guard by @LukaszRozmej in #13866
- perf(evm): keep jump-destination analysis out of the zkEVM PUSH2 handler by @LukaszRozmej in #13868
- perf(prewarm): interrupt warm transactions when a pass is cancelled by @benaadams in #13980
- fix(txpool): drop confirmed senders from the nonce manager by @svlachakis in #13875
- perf(flat): stop waiting on queued trie warmups at scope dispose by @benaadams in #13982
- perf(evm): skip per-tx opcode table and implicit-stop lookups by @svlachakis in #13947
- fix: keep AssociativeCache reads from missing a key while it is rewritten by @LukaszRozmej in #13960
- perf(zkevm): trim guest startup work in loggers, hex-prefix paths and system-call hashes by @LukaszRozmej in #13918
- test: derive the Shutter test header bloom from stored receipts on every lookup by @LukaszRozmej in #13973
- perf(db): compress the code database with LZ4 by @Marchhill in #13907
- fix(txpool): skip used nonces when a reservation catches up to the account nonce by @svlachakis in #13941
- perf(flat): hash the pooled resource metric label once by @benaadams in #13986
- perf(evm): skip re-validating memory ranges already charged for by @svlachakis in #13950
- perf(evm): share the topic 0 instance across repeated logs by @svlachakis in #13949
- fix: resolve the session conflict when an incoming session attaches during a dial by @LukaszRozmej in #13903
- Clear sparse access journals by removing recorded entries by @kamilchodola in #13798
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in #13987
- test: time only the disposal in the CompositeNodeSource enumeration test by @LukaszRozmej in #13955
- perf(zkevm): cheaper address and storage-cell hashing in the guest by @LukaszRozmej in #13887
- perf(trie): trim the node resolve and branch encode paths by @LukaszRozmej in #13919
- perf: keep Rlp beforefieldinit, move constructor throws out of line and bind composite tx validators once by @LukaszRozmej in #13920
- fix(taiko): reject Shasta headers whose extraData is not exactly 7 bytes by @0xShadowX in #13817
- perf(zkevm): dispatch the guest with gas, stack head, table and bytecode in registers by @LukaszRozmej in #13921
- perf: faster RLP integer and signature decoding, signing hashes and tx/receipt root leaves by @LukaszRozmej in #13917
- perf(evm): prove zkEVM jump destinations from the 32 bytes before them by @LukaszRozmej in #13886
- fix: validate blob-gas field presence on orphaned headers by @Marchhill in #13776
- fix(txpool): rederive the reserved nonce after a pending tx leaves the pool by @svlachakis in #13970
- Add Geth keccak256PreimageTracer support by @hudem1 in #13662
- perf(precompiles): decode BLS12-381 inputs within a worker budget by @Marchhill in #13901
- perf: re-attach stored block access lists to blocks replayed from the store by @Marchhill in #13898
- Re-execute a known block whose state was pruned by @Marchhill in #13686
- fix(tracing): record frame targets and payer in prestateTracer for frame transactions by @Marchhill in #13964
- perf(prewarm): cancel the speculative session earlier and promptly by @benaadams in #13989
- fix(db): enumerate the whole code database, including unflushed writes by @Marchhill in #13913
- fix(tracing): root parity traces of frame transactions in one transaction call by @Marchhill in #13968
- fix: allow frame RPC requests without an outer recipient by @Marchhill in #13910
- fix(tracing): report the derived EIP-8141 frame-tx status to tracers and keep simulate logs to the receipt's by @Marchhill in #13966
- fix: support unsigned frame transaction simulation by @Marchhill in #13911
- fix(core): preserve ConcurrentDictionary internals under NativeAOT by @Matgothmog in #14004
- fix(core): skip TypeDiscovery's assembly walk under NativeAOT by @Matgothmog in #13996
- test(eth/70): cover ReceiptsMessageSerializer70 round-trip and guard by @Matgothmog in #13995
- perf(zkevm): swap stack words in registers by @kamilchodola in #13977
- Fix startup warmup drain test scheduler deadlock by @stdevMac in #13974
- fix(rpc): reject a trace_call chainId for another chain as invalid params by @banteg in #13956
- fix(rpc): return no block reward records for post-merge blocks by @banteg in #13938
- fix(rpc): return null from trace_transaction and trace_get for a missing transaction by @banteg in #13937
- fix(rpc): return invalid params for a reversed trace_filter range by @banteg in #13935
- fix(rpc): read an explicit null input or trace_filter after as omitted by @banteg in #13897
- fix(tracing): report vmTrace call output windows and keep halted operations by @banteg in #13940
- perf: share workers across receipt-root calculation and trie commits by @benaadams in #13988
- fix(tracing): include forwarded gas in the vmTrace cost of a create that enters no frame by @banteg in #13958
- fix(rpc): support union and intersection modes in trace_filter by @banteg in #13857
- fix(tracing): emit failed frames for calls and creates that fail their precheck by @banteg in #13957
- perf(init): take the KZG trusted-setup load off the startup critical path by @Marchhill in #13998
- fix(optimism): report Jovian operator fee and DA footprint in receipts by @FlashWayne in #13811
- fix(tracing): keep reverted frame results and use parity error labels by @banteg in #13981
- Bump up the version to 2.2.0-unstable by @core-repository-dispatch-app[bot] in #14010
- test(txpool): run should_revalidate_after_queued_fork_reorg alone by @LukaszRozmej in #14009
- fix(evm): fail loud on violated EIP-8037 state-gas invariants (F-38) by @hudem1 in #13178
- fix(xdc): treat blocks up to the V2 switch block as round 0 in XDPoS_getMissedRoundsInEpochByBlockNum by @ak88 in #14008
- refactor(eip8141): compile frame-tx tracer hooks out when not tracing by @Marchhill in #14000
- perf(flatdb): keep the read-bundle cache until snapshots are released and cap the carry-forward write-set by @AnkushinDaniil in #13971
- test(network): take the cheapest window in the NodeFilter allocation test by @LukaszRozmej in #14011
- Emit block-wide log index in callTracer withLog output by @MysticRyuujin in #13636
- test: make SnapshotableMemColumnsDb batches and snapshots atomic across columns by @LukaszRozmej in #14041
- perf: cache tracer flags per transaction in TransactionProcessor by @LukaszRozmej in #14002
- fix(rpc): reject a reversed eth_getLogs range that ends at block zero by @Matgothmog in #13999
- feat(t8n): fill EIP-8141 frame transactions by @Marchhill in #13498
- Deflake the ProtocolHandlerBase runner-reuse allocation probes by @Marchhill in #13635
- Update Nethermind.RocksDbBindings to 11.8.1-preview.140 by @benaadams in #14044
- ci: report guest cost per block against master by @LukaszRozmej in #13210
- perf(evm): run MLOAD and MSTORE frameless in the untraced dispatch by @marcindsobczak in #14028
- fix(rpc): return null from trace_replayTransaction for a missing transaction by @banteg in #14037
- ci: Make SPOT the only implicit provisioning model for GCP runners by @cbermudez97 in #13728
- perf(evm): drop end-of-code checks from untraced dispatch via padded code copy by @LukaszRozmej in #13896
- fix(ci): poll for the killed child in the stall watchdog test by @Marchhill in #13511
- perf(zkevm): guest handlers for the hottest opcodes by @LukaszRozmej in #13922
- test: fix flaky BySpeedStrategy recalculate-probability test by @LukaszRozmej in #14052
- fix(sync): resolve TreeSync node dependencies atomically by @LukaszRozmej in #14051
- fix(nethtest): keep diagnostics off the --jsonout stdout document by @Marchhill in #13638
- fix(evm): make the pooled-object leak detectors able to fire by @Marchhill in #13393
- test(merge): wait for payload commit before forkchoice by @Marchhill in #13852
- test: stop PrepareTx writing the built block back onto the fixture by @Marchhill in #13681
- Fix use-after-return on the shared transaction pool in protocol-handler tests by @Marchhill in #13674
- ci: stop choosing smoke-test VM types here and move hoodi/chiado sync runners to C3D by @cbermudez97 in #14007
- fix(tracing): give a parity vmTrace frame operation its gas limit and receipt gasUsed by @Marchhill in #14005
- Preempt gossiped frame tx validation while a block is processing by @AnkushinDaniil in #13994
- fix(rpc): serialize EIP-8141 frame fields and frame receipts as quantities with full logs by @AnkushinDaniil in #13990
- fix(flat): recheck the carry-forward generation after a cache hit by @marcindsobczak in #14026
- fix(rpc): accept empty frame signers by @jxom in #14020
- fix(rpc): skip frame signature verification in simulation by @jxom in #14023
- ci(focil): pin EEST fixtures to tests-focil-devnet@v0.3.0 by @peter941221 in #13909
- fix(rpc): return frame simulation results by @jxom in #14022
- fix(rpc): align frame gas field names by @jxom in #14019
- fix(rpc): match a failed CREATE in trace_filter only by its creator by @banteg in #14039
- fix(rpc): return invalid params for a trace_filter bound past the head by @banteg in #14040
- fix(rpc): run zero-fee trace_call and trace_callMany calls with a zero base fee by @banteg in #14045
- fix(rpc): don't select a transaction type from a null field by @banteg in #14049
- fix(rpc): reject unknown members and negative after or count in trace_filter by @banteg in #14050
- fix(rpc): reject a priority fee above the fee cap in trace_call and trace_callMany by @banteg in #14046
- fix(rpc): treat a null or zero GasCap as uncapped in eth_call, eth_estimateGas and eth_createAccessList by @Matgothmog in #14001
- fix(simulate): drop logs emitted by reverted call frames by @stdevMac in #13979
- ci(expb): pin the flat DB compaction offset so every run compacts at the same blocks by @kamilchodola in #14053
- fix(rpc): reject a trace_rawTransaction signed for another chain by @banteg in #14048
- perf(flat): write storage trie nodes after the block is reported valid by @kamilchodola in #14058
- fix(rpc): reject signed raw transaction gas above the cap by @banteg in #14060
- fix(flat): keep unanchored forks out of bulk snapshot conversion by @CPerezz in #13997
- ci: sync-validation timings dashboard on GitHub Pages by @stdevMac in #12618
- perf(rpc): write receipt logs straight from the stored entries by @AnkushinDaniil in #14043
- fix(simulate): keep log indices of logs dropped by a revert, as geth does by @LukaszRozmej in #14062
- perf(flat): hold carry-forward slot reads in a fixed set-associative table by @marcindsobczak in #14027
- feat(rpc-bench): heap dump reports and process memory per cell by @kamilchodola in #13842
- ci(hive): build image once, run Hive on PRs, drop consensus suite by @cbermudez97 in #11877
- fix(engine): return unsupported fork for newPayloadV3/V4 outside their fork windows by @Marchhill in #14024
- ci(expb): benchmark fusaka at 0 s and 1 s delay on the performance label and on master by @kamilchodola in #14061
- refactor(bal): drop parent state root plumbing from BlockAccessListManager by @asdacap in #14080
- feat(config): add mainnet_aztec with a rolling trace window by @svlachakis in #14038
- perf(flat): size the carry-forward account cache for its cap by @kamilchodola in #14073
- chore(deps): update Nethermind.Zkvm.Abstractions by @rubo in #14090
- docs(focil): explain fork-boundary sampling and cover empty buckets by @Marchhill in #13383
- fix(eth/70): stop receipt paging for blocks with unknown headers by @Marchhill in #14018
- test(focil): assert inclusionListSatisfied on the forkchoice response by @Marchhill in #13411
- perf(trie): reach node data through the sealed classes and size children off the cast cache by @kamilchodola in #14072
- perf: cut the cost of blocks that load many distinct large contracts by @benaadams in #14086
- perf(flat): apply committed storage writes on an idle-priority thread during execution by @kamilchodola in #14059
- perf(zkevm): absorb Keccak-256 input straight into the precompile state by @LukaszRozmej in #13885
- perf(zkevm): cheaper SSZ merkleization and list decoding for the stateless guest by @LukaszRozmej in #13916
- test(focil): pin the sender reservoir's headroom over the inclusion-list byte cap by @Marchhill in #13392
- perf(zkevm): run DIV, MOD, ADDMOD and MULMOD on ZisK's 256-bit arithmetic by @kamilchodola in #13975
- perf(il): skip the keyed nonce scan when drawing an inclusion list by @Marchhill in #13384
- perf(rpc): remember resolved code for the rest of an eth_call scope by @marcindsobczak in #13805
- fix: align counting state provider code return types by @benaadams in #14120
- ci: fail fast on machine types the runner cannot use, and drop convert_to_paprika by @cbermudez97 in #14056
- fix(engine): reject omitted or null payload fields on engine_newPayloadV3+ by @Marchhill in #14025
- docs(agents): agent reviews approve or comment, never request changes by @benaadams in #14116
- perf(zkvm): avoid narrowing multiply-fold intermediates by @benaadams in #14124
- fix(engine): return invalid params for incomplete payloads outside the fork window by @LukaszRozmej in #14131
- perf(zkvm): keep keccak memo slot arithmetic full-width by @benaadams in #14128
- fix(rpc): reject a call object whose data and input differ by @banteg in #14089
- fix(rpc): validate a trace_rawTransaction with block inclusion's checks by @banteg in #14091
- fix(tracing): round-trip TraceStore vm and state by @banteg in #14093
- feat(rpc): select a block by hash in trace_filter and reject hash bounds by @banteg in #14111
- fix(tracing): select stored vmTrace like live replay by @banteg in #14115
- perf(zkvm): keep jump bitmap offsets native-sized by @benaadams in #14129
- ZiskGuest: Bump ZisK runtime and image to 1.3.1-alpha by @maximmenshikov in #14127
- feat(zkevm): adopt tests-zkevm@v21.0.1 by @rubo in #14118
- fix(tracing): require canonical blocks for stored transaction traces by @banteg in #14122
- fix(rpc): run blob calls without a positive blob fee cap at a zero blob base fee by @banteg in #14092
- test(discovery): fix flaky E2EDiscoveryTests.TestDiscovery by @LukaszRozmej in #14126
- fix(network): return pooled objects on RLP validation failures by @Marchhill in #14113
- fix(txpool): wire frame prefix simulation into AuRa and XDC by @Marchhill in #14110
- fix(eip8250): map frame tx nonce and key-count rejections to fixture exceptions by @AnkushinDaniil in #14112
- fix(txpool): reject unrecognized frame validation prefixes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14108
- fix(txpool): reject expiry helper and no-op deploy prefixes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14107
- refactor(txpool): share the verify gas default constant by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14106
- fix(rpc): report frame simulation gas before refunds by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14105
- fix(tracing): serve only recorded trace types from TraceStore by @banteg in https://github.com/NethermindEth/nethermind/pull/14123
- docs(zkevm): move the OpenVM guest README into its project folder by @rubo in https://github.com/NethermindEth/nethermind/pull/14150
- docs(agents): add zkevm skills by @rubo in https://github.com/NethermindEth/nethermind/pull/14146
- test: drain deferred writes before corrupting the stored access list by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14148
- fix(rpc): code written during a call replaces a stateOverride code override by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14114
- fix(rpc): enforce frame estimate fork and gas cap by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14103
- fix(focil): judge inclusion-list appendability per block gas dimension by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14055
- fix(eip8250): align TXPARAM keyed-nonce indices with the spec by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14069
- fix(eip8250): keep a higher existing NONCE_MANAGER nonce at activation by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14070
- fix(tracing): forward frame receipts through nested receipt tracers by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14104
- fix(eip7906): support per-topic TXDIFF views by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14109
- fix(focil): report inclusionListSatisfied for a head newPayloadV6 left unanswered by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13385
- feat: estimate and fill per-frame gas limits by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13912
- fix: preserve RPC gas cap error when estimating frame limits by @benaadams in https://github.com/NethermindEth/nethermind/pull/14166
- test(rpc): cover the resolved-code memo of eth_call end to end by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14121
- fix(network): stop submitting a transaction message once an invalid transaction requests a disconnect by @manusw7 in https://github.com/NethermindEth/nethermind/pull/14134
- fix(network): use 2 MiB BAL response soft limit by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14152
- fix(specs): initialize EIP-8282 genesis requests hash by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14153
- perf(flatdb): serve state-reader tree visitors from the trie node cache by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/12400
- fix(sync): preserve account wipes during BAL healing by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14156
- feat(producer): check state availability for the target block by @asdacap in https://github.com/NethermindEth/nethermind/pull/14079
- test: assert memory and span contents with Is.SequenceEqualTo; code cache sizes as constants by @benaadams in https://github.com/NethermindEth/nethermind/pull/14119
- fix(merge): stop the pre-merge block producer runner on shutdown by @gophersg in https://github.com/NethermindEth/nethermind/pull/14168
- Honor discv4 Ping forward compatibility by @flcl42 in https://github.com/NethermindEth/nethermind/pull/14151
- fix(txpool): reapply paymaster cap after head changes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14155
- fix(focil): bound inclusion-list entries by bytes, not SSZ offsets by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14068
- perf(evm): reuse child call frames per depth instead of the thread-static pools by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14139
- fix(state): a code override ends when its account is destroyed before Cancun by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14125
- perf(engine): start sender recovery once the payload's block is built by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14164
- ci(bench): per-client snapshots and per-arm node flags in an RPC sweep by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/12961
- perf(metrics): cache observer children for stable labels by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14173
- fix(rpc): answer a rejected trace_call with the eth_simulateV1 error code by @ak88 in https://github.com/NethermindEth/nethermind/pull/14158
- perf(evm): simplify zero-extended scalar stack words by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14180
- perf(evm): carry fused PUSH2 opcode counts in host dispatch by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14177
- perf(evm): remove jump-target bytecode prefetch hints by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14176
- fix(simulate): apply simulate overrides on the EIP-7928 per-transaction path by @MysticRyuujin in https://github.com/NethermindEth/nethermind/pull/14057
- fix(logging): reapply CLI and Seq overrides after NLog config reload by @Matgothmog in https://github.com/NethermindEth/nethermind/pull/14181
- Normalize invalid-length input of flat-fee cached precompiles by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14185
- Check eth/snap response request ids before decoding by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14184
- test(merge): make the engine JSON/SSZ round-trip benchmarks run and measure production costs by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14188
- perf(rpc): read single-object request bodies in one pass by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14187
- Verify EIP-1459 tree root signature in DNS discovery by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14183
- perf: share worker budgets across block processing stages by @benaadams in https://github.com/NethermindEth/nethermind/pull/14182
- test: fix pruning threshold race across midnight UTC by @benaadams in https://github.com/NethermindEth/nethermind/pull/14167
- build(zkevm): bump the bflat RISC-V64 image by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14201
- Bind JSON-RPC host names to their resolved addresses by @ak88 in https://github.com/NethermindEth/nethermind/pull/13746
- perf(zkevm): reverse bytes with Zbb's rev8 in the ZisK guest by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/13984
- fix(docgen): load only runtime-dependency assemblies by @rubo in https://github.com/NethermindEth/nethermind/pull/14203
- fix(txpool): index the prefix paymaster as a frame tx dependency by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14172
- fix(rpc): enforce frame transaction activation during calls by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14154
- fix(rpc): canonical method names in RPC stats, stable metric labels, streamed writer depth/encoder by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14194
- test(rpc): take the minimum of several runs in the receipt allocation test by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14189
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in https://github.com/NethermindEth/nethermind/pull/14210
- perf(rpc): allocation-free filter address/topic binding and access list serialization by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14198
- Back off peer candidates rejected by the contact filter by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14190
- test: fix DevBlockProducerTests flake by awaiting block production by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14192
- perf(rpc): cut allocations and redundant work on hot JSON-RPC paths by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14195
- perf(rpc): read typed parameters through their converter by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14193
- perf(zkevm): trim keccak call overhead in the ZisK guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14207
- perf(state): cheaper storage reads (per-slot journal filter, SlotKey map key, stateless code memo) by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14214
- Honor Geth opcode logger byte limits by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13670
- perf(eip8141): compute the frame tx sig hash on first use by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14221
- Avoid HTTP and JSON round trips in local health-check UI polling by @benaadams in https://github.com/NethermindEth/nethermind/pull/14211
- test(evm): read the frame cache directly and share the cached/uncached observation by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14174
- fix(xdc): encode XDPoS_getV2Block* headers with the node's header decoder by @ak88 in https://github.com/NethermindEth/nethermind/pull/14175
- fix(test): use normal gas charging by default in EVM tracer by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14161
- refactor(state): apply BAL state changes through IScope.ApplyBal by @asdacap in https://github.com/NethermindEth/nethermind/pull/13772
- perf(eip8141): recover frame tx secp256k1 signers in the parallel sender-recovery step by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14205
- feat(flatdb): byte-capped in-memory snapshot window by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/13972
- fix(test): call the public FrameTxSignatureValidator.Validate overload by @asdacap in https://github.com/NethermindEth/nethermind/pull/14258
- perf(prewarm): read the accounts that large calldata names as ABI address words by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14204
- perf(zkevm): relieve register pressure in the guest opcode handlers by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14206
- perf(stateless): hand the decoded witness state nodes over without copying them by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14233
- fix(shutter): count missed keys atomically by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14238
- perf(zkevm): leave the receipt transaction hash unset in the guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14239
- perf(zkevm): skip the zero credit to the executing account of a frame that runs code by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14243
- perf(engine): start early sender recovery once the payload's transactions root is joined by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14213
- perf(flat): skip the in-memory layers for slot reads that none of them has, in read-only execution by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14094
- perf(prewarm): hand a warm caught in cold storage reads to discovery by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14219
- Decode receipts responses against the expected per-block receipt counts by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14191
- perf(rpc): validate, count and decode a batch body in fewer passes by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14197
- perf(rpc): answer complete socket messages from their bytes by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14196
- chore(deps): update Nethermind.Zkvm.Abstractions by @rubo in https://github.com/NethermindEth/nethermind/pull/14262
- test: await the in-flight cap check in SimpleDispatcherTests instead of blocking a pool thread by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14226
- fix(rpc): restore master build after complete-message decoder changes by @benaadams in https://github.com/NethermindEth/nethermind/pull/14263
- fix(facade): propagate caller cancellation from DefaultHttpClient retries by @somasoil in https://github.com/NethermindEth/nethermind/pull/14254
- perf(evm): let SUB call UInt256.Subtract again now that it inlines by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14042
- feat(txpool): preempt gossiped frame tx validation while a block is being built by @manusw7 in https://github.com/NethermindEth/nethermind/pull/14085
- Align debug_traceTransaction missing-transaction errors with Geth by @hudem1 in https://github.com/NethermindEth/nethermind/pull/14250
- perf(zkevm): reuse decoded witness header hashes and widen the guest keccak memo to 2^17 slots by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14256
- Update OP Superchain chains by @core-repository-dispatch-app[bot] in https://github.com/NethermindEth/nethermind/pull/14231
- perf(zkevm): leaner trie walks, node re-encoding and witness lookups by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14209
- perf(zkevm): analyze jump destinations with ZisK's JUMPDEST bitmap precompile by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14255
- build: mark AOT-compatible projects and source-generate JSON metadata by @benaadams in https://github.com/NethermindEth/nethermind/pull/14237
- perf(zkevm): guest interpreter - more dispatch registers, narrow arithmetic, new handlers, jump-analysis anchors by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14217
- fix(stateless): record the code read by a fused EXTCODESIZE check in the execution witness by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14248
- ci: retry flaky RPCs in the fast sync settings update by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14264
- perf(zkevm): resume re-encoded witness branches from retained sponge states by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14261
- perf(zkevm): copy byte runs with a direct memmove in the ZisK guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14208
- perf(trie): cheaper node resolution on read walks by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14215
- perf(zkevm): lean hashed-child resolve and no RLP-limit copy in inlined guards by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14230
- perf(evm): carry host execution gas through opcode dispatch by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14178
- perf(zkevm): cheaper state commit and trie encoding in the guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14216
- fix(auth): respect expiration in JWT cache by @arunimshukla in https://github.com/NethermindEth/nethermind/pull/14228
- Fix JavaScript tracer transaction index for selected transactions by @hudem1 in https://github.com/NethermindEth/nethermind/pull/14249
- perf(zkevm): trim calldata zero counting, storage journal appends, storage-cell hashing and merkle sha256 calls in the guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14234
- refactor(evm): share the carried-gas dispatch protocol between host and zkVM guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14269
- test: wait for genesis to leave the queue before queuing the committing copy by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14268
- test(merge): wait for the stored improvement before getPayload in TestTwoTransaction_SameContract_WithBlockImprovement by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14267
- chore(deps): replace Open.NAT.Core and fix UPnP lease duration by @rubo in https://github.com/NethermindEth/nethermind/pull/14283
- feat(eip8141): MATCHA sender width for keyed-nonce frame transactions by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/13619
- fix(sync): retake an invalid sync snapshot before recalculating progress pointers by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14276
- perf(zkevm): guest handlers for wide arithmetic, SLOAD/TLOAD/TSTORE, MSTORE8 and data copies by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14229
- perf(zkevm): DMA memmove/memset for keccak state fill and RLP byte strings in the ZisK guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14257
- chore(deps): update Nethermind.Zkvm.Abstractions by @rubo in https://github.com/NethermindEth/nethermind/pull/14278
- test(txpool): serve restored frame blob bodies so startup revalidation keeps them by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14279
- perf(zkevm): cheaper leaf re-encoding and branch walks on the commit path by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14223
- ci: split Nethermind.JsonRpc.Test into two chunks on macOS and Windows by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14275
- perf(zkevm): stop a guest trie write's climb at the first pending level by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14240
- perf(zkevm): cut interface dispatch and hashing in state, access tracking and tx validation by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14218
- feat: EIP-8253 bump nonce of zero-nonce storage accounts by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13943
- feat: EIP-7668 remove bloom filters by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13934
- Fix callTracer log indices across calls and transactions by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13693
- feat: EIP-8131 unified transaction content floor by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13929
- feat: EIP-7979 call and return opcodes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13932
- Retain verified ENRs for mismatched signed PING endpoints by @flcl42 in https://github.com/NethermindEth/nethermind/pull/14277
- perf(zkevm): OptimizedDictionary/OptimizedHashSet with 64-bit guest hash tables on the state path by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14222
- perf(zkevm): dispatch the guest on opcode pairs and fuse common pairs by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14232
- feat: EIP-3298 remove storage-clear refund and refund cap by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13928
- ci: drop stale Timestamp entries from known-flaky hive tests by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14315
- Prewarmer handoff rework by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14312
- Resolve SSZ REST forks for chainspec networks by @flcl42 in https://github.com/NethermindEth/nethermind/pull/14302
- perf(zkevm): cheaper first jumps to a destination in the guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14242
- perf(zkevm): reach each storage change in place when writing storage roots by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14241
- fix(rpc): keep a notification's send failure when the socket closes first by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14319
- test(clique): deploy Amsterdam request predeploys in the producer tests' genesis by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14339
- perf(zkevm): per-block guest code cache as a plain map by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14244
- ci: switch to trusted NuGet publishing by @rubo in https://github.com/NethermindEth/nethermind/pull/14332
- chore: ignore all VS Code workspace files by @rubo in https://github.com/NethermindEth/nethermind/pull/14362
- docs(agents): require conventional commit messages and PR titles by @rubo in https://github.com/NethermindEth/nethermind/pull/14364
- perf(evm): keep the code a block loads for the rest of the block by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14322
- fix(merge): keep a suggested block queued when newPayload's budget runs out first by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14337
- fix(state): delete pre-existing account recreated and deleted again in one commit by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14357
- fix(flat-history): share one prune budget across all columns of a pass by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14327
- perf(archive-proofs): track exact branches in a bounded HashSet by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14335
- perf(tx-index): resume bulk storage cleanup past the last marker by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14325
- Honor debug_traceCall transaction-index state selection by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13700
- ci: add prerelease/latest support to master bootnode release by @flcl42 in https://github.com/NethermindEth/nethermind/pull/14266
- zkVM guest: pairwise EVM stack swaps, keccak first-block copy, preinitializable statics, Int256 1.11.0; bflat-riscv64-11 2ee8a26 by @maximmenshikov in https://github.com/NethermindEth/nethermind/pull/14358
- fix(network): serialize concurrent node filter acceptance by @benaadams in https://github.com/NethermindEth/nethermind/pull/14381
- feat: EIP-8279 block access list byte floor by @Marchhill in https://github.com/NethermindEth/nethermind/pull/13942
- Catch up finalized blocks from block access lists by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14157
- fix(rpc): fill the missing half of an eth_createAccessList fee pair by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14377
- perf(tx-index): read earlier-block overlay behind the block read cache by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14361
- perf(archive-proofs): keep open window nodes in a reusable slab by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14360
- perf(flat-history): encode v3 capture post-values only when a row is written by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14355
- Add periodic log reporting how far the head block is behind the chain tip by @Copilot in https://github.com/NethermindEth/nethermind/pull/10892
- test(clique): pin producer tests to Sepolia's latest scheduled fork by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14354
- Preserve empty and disabled stacks in Geth trace files by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13709
- Reject conflicting traceCall storage overrides before fee validation by @hudem1 in https://github.com/NethermindEth/nethermind/pull/14359
- perf(flat-history): drop pruned block markers with one range delete by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14333
- perf(archive-proofs): prefetch from the first uncached depth by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14340
- perf(archive-proofs): resolve commitment column batches once per write batch by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14341
- fix(flat-history): revalidate cached no-poison after a capture by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14347
- fix(tx-index): refuse scratch slots with no live account by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14352
- perf(history-walk): skip the rest of an overflowing storage group by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14367
- fix(engine): do not move the head to a block whose state was pruned by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14366
- ci: drop Missing Ancestor entries from known-flaky hive tests by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14382
- perf: fuse PUSH2 CALLSUB for EIP-7979 by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14287
- test(eip8141): split the frame-tx MAX_VERIFY_GAS measurements by @manusw7 in https://github.com/NethermindEth/nethermind/pull/14135
- fix(rpc): preserve runtime metadata probe frames for coverage checks by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14384
- test(evm): cover access-list journal rollback across nested frames by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14395
- test(sync): cover moving sync pivot in MultiSyncModeSelector scenarios by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14310
- fix(rpc): fee default texts and check order for transactions to send and sign by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14375
- perf(tx-index): sync the bulk import scratch WAL every 64 pages by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14370
- perf(archive-proofs): collect historical proofs with a direct path walk by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14365
- perf(rpc): source-generated JSON writers for blocks, RPC transactions and logs by @benaadams in https://github.com/NethermindEth/nethermind/pull/14299
- Refresh prewarm footprints that earlier transactions invalidate by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14393
- fix(test): stop JSON coverage check failing on inlined dispatch frames by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14407
- perf(flat-history): pruner seeks past each key's live rows by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14371
- fix(archive-proofs): mark a reattached child changed when a branch re-forms by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14356
- perf(history-walk): fork/join scheduler so split storage children run on all workers by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14353
- perf(tx-index): drop per-block scratch WAL syncs in bulk replay by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14350
- perf(archive-proofs): serve proof metadata from memory by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14348
- perf(flat-history): reuse empty hashes for historical accounts by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14328
- perf(trie): hash serially by default; history walk hashes on its own thread by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14326
- fix(zkevm): pass 8-byte aligned buffers to the Blake2F accelerator by @rubo in https://github.com/NethermindEth/nethermind/pull/14418
- fix(zkevm): pass exact-length buffers to the BLS12-381 MSM and pairing accelerators by @rubo in https://github.com/NethermindEth/nethermind/pull/14419
- perf(evm): leave checked opcodes straight from host dispatch when it carries gas by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14427
- ci(zkevm): run stateless Glamsterdam tests on Sepolia blocks by @rubo in https://github.com/NethermindEth/nethermind/pull/14413
- feat(eip8141): MATCHA paymaster width for sponsored frame transactions by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14305
- fix(txpool): run the frame-tx prefix simulation under the configured MAX_VERIFY_GAS by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14379
- feat(sync): report snap healing progress as its own phase without the full state percentage by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14308
- test(blockchain): make FileLocalDataSource retries_loading_file deterministic by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14303
- feat(specs): schedule EIP-8250, EIP-8272 and EIP-7906 from a geth-style genesis by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14386
- test(txpool): re-enable parallel nonce reservation test by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14298
- fix(docgen): document wire shape of parity trace actions and simulate results by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14293
- perf(network): bound inbound transaction admission and pool request tracking by @benaadams in https://github.com/NethermindEth/nethermind/pull/14434
- fix(ethstats): log repeated disconnects while offline at debug by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14289
- perf(flat): skip per-scope resets and warm-up hints that do nothing by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14336
- feat(eip8141): deploy the expiry verifier as an ordinary contract by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14378
- feat(rpc): add SendPolicy plugin by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14396
- perf(flat): filter in-memory slot reads of plain eth_call, estimateGas and createAccessList by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14330
- fix(history-walk): scan the whole storage bucket before accepting slot history by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14329
- Fix return data in Geth trace files by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13727
- refactor(tracing): one node-wide parallel trace budget sized by JsonRpc.TraceBlockParallelism by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14363
- fix(zkvm): pass BLS12-381 points to SP1 in its own layout by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14401
- perf(rpc): process up to 16 requests per WebSocket and IPC connection by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14345
- perf(history-walk): fold the root in parallel block-range chunks by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14373
- fix(evm): respect EIP-7778 in EIP-8037 block gas accounting by @colinlyguo in https://github.com/NethermindEth/nethermind/pull/14300
- fix(flat): verify preimage storage in bounded memory by @asdacap in https://github.com/NethermindEth/nethermind/pull/14387
- fix(eip8272): verify recent roots with a canonical VERIFY frame by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14071
- fix(init): exit cleanly when KZG trusted setup cannot be loaded by @benaadams in https://github.com/NethermindEth/nethermind/pull/14435
- Test traceCall selection errors before conflicting storage overrides by @hudem1 in https://github.com/NethermindEth/nethermind/pull/14392
- perf: remove field-layout padding in hot and per-message types by @benaadams in https://github.com/NethermindEth/nethermind/pull/14454
- feat: align EIP-8279 metering with execution-specs#3351 by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14448
- fix(bal): stop parallel validation once executed gas exceeds the block limit by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14459
- feat(rpc): add an operator cap on buffered struct-log trace size by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14460
- perf(tracing): stream struct logs with bounded memory per request by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14461
- perf(zkvm): link a 64-bit memcpy into the SP1 guest by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14404
- perf(zkvm): gather big-endian words byte by byte where the zkVM has no rev8 by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14405
- refactor(discovery): replace DotNetty UDP transport with a plain socket by @rubo in https://github.com/NethermindEth/nethermind/pull/14346
- chore(zkvm): bump Nethermind.Sp1.Runtime to 1.0.0-preview.5 and the SP1 runner to v6.6.0 by @maximmenshikov in https://github.com/NethermindEth/nethermind/pull/14456
- perf(zkvm): run MULMOD on SP1's uint256_mulmod precompile by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14403
- perf(blocktree): resolve block numbers without a lock convoy by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14451
- fix(processing): refuse a branch that reaches genesis without state by @CPerezz in https://github.com/NethermindEth/nethermind/pull/14324
- perf(rpc): read block senders without decoding receipts by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14452
- perf(rlp): encode and decode built-in transaction types without virtual dispatch by @benaadams in https://github.com/NethermindEth/nethermind/pull/14455
- perf(rpc): serve hashes-only getBlock without decoding transactions by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14464
- fix(focil): judge an inclusion list resent while an earlier copy is queued by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14314
- perf(eth72): reduce announcement tracking allocations by @benaadams in https://github.com/NethermindEth/nethermind/pull/14474
- fix(eip7906): read the true prestate of slots wiped by creation by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14422
- Fix nested exit records in Geth trace files by @hudem1 in https://github.com/NethermindEth/nethermind/pull/13737
- feat(healthchecks): link consensus client docs in the no-ForkChoices warning by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14309
- Use shared processing for empty block overrides by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14473
- Avoid receipt loading for raw transaction lookup by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14472
- Reduce proof input allocations with packed hashes by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14471
- fix(producers): count only execution gas when ordering pool txs under EIP-8037 by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14304
- fix(flat): warn when snap sync discards existing flat state and time the wipe by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14297
- Stop an idle mempool pre-warm session without waiting for it by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14467
- test(merge): fix flaky ExecutionPayloadTests by scoping the swapped tx decoder by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14433
- perf(prewarm): footprint handoff tweaks by @benaadams in https://github.com/NethermindEth/nethermind/pull/14476
- fix(wallet): reject an unavailable BlockAuthorAccount signing key by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14290
- perf(zkvm): hash SSZ merkle pairs with SP1's SHA-256 precompiles directly by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14402
- perf(cache): reuse array slots in LRU caches by @benaadams in https://github.com/NethermindEth/nethermind/pull/14478
- feat(eip8250): deploy the nonce manager as an ordinary contract by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14438
- perf(flat): keep read-only accounts out of the block's change set by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14446
- fix(merge): include WebSockets URL when checking the engine port is configured by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14285
- ci(zkevm): run the tests-zkevm-benchmark fixtures through the ZisK guest by @rubo in https://github.com/NethermindEth/nethermind/pull/14465
- perf(validation): recover EIP-2780 senders in the block validator only when intrinsic gas needs them by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14468
- fix(rpc): report precompile failures with go-ethereum's error text by @kamilchodola in https://github.com/NethermindEth/nethermind/pull/14281
- fix: zero-length logs bloom for an EIP-7668 genesis by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14458
- fix: use EIP-7906's assigned opcode bytes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14469
- fix(tests): decode frame transactions from txbytes in state tests by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14463
- chore: Update Dockerfiles by @core-repository-dispatch-app[bot] in https://github.com/NethermindEth/nethermind/pull/14470
- chore(deps): update packages by @rubo in https://github.com/NethermindEth/nethermind/pull/14491
- perf(logs): defer compact log data expansion by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14488
- perf(rpc): give Kestrel 64 KiB transport blocks so a large request body arrives in a few reads by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14443
- feat(eip8272): deploy the recent root contract as an ordinary contract by @AnkushinDaniil in https://github.com/NethermindEth/nethermind/pull/14437
- ci: replace OpenCodeReview with shared PR-Agent by @stdevMac in https://github.com/NethermindEth/nethermind/pull/13652
- fix(sync): stop old bodies and receipts progress overshooting the total on finish by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14286
- test(aura): wait for the produced block in AuRaBlockProducerTests instead of a fixed window by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14306
- feat(sync): label snap sync phases and drop misleading healing percentage by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14344
- Configure RPC benchmark gas cap without duplicate flags by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14501
- ci: authenticate Docker Hub pulls in stateless workflows by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14500
- perf(state): reuse larger pooled storage maps by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14509
- fix(txpool): return txs of blocks the head rewinds past by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14492
- Avoid eager original-value indexing for read-only storage by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14528
- Schedule Hoodi Amsterdam fork by @flcl42 in https://github.com/NethermindEth/nethermind/pull/14489
- perf(merge): re-commit the no-GC region budget right after a decommit by @marcindsobczak in https://github.com/NethermindEth/nethermind/pull/14481
- fix(sync): stop block access lists sync at the EIP-7928 activation block by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14368
- chore(deps): update RocksDB package by @rubo in https://github.com/NethermindEth/nethermind/pull/14617
- ci: log in to Docker Hub with OIDC instead of static credentials by @cbermudez97 in https://github.com/NethermindEth/nethermind/pull/14619
- chore(deps): update .NET packages by @rubo in https://github.com/NethermindEth/nethermind/pull/14628
- fix(discv4): match a pong on the pinged endpoint by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14576
- perf(txpool): reject underpriced replacements before recovering signatures by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14577
- feat(consensus): abandon a block that takes longer than a configurable timeout to process by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14487
- fix(simulate): skip the stale canonical marker walk when resetting the overlay head by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14636
- fix(deps): pin System.Security.Cryptography.Pkcs to 10.0.13 by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14643
- fix(flat): fail fast with no-state when the persisted pointer outlives the snap-sync wipe by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14635
- chore: Update Dockerfiles to .NET 10.0.13 by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14632
- perf(evm): past the block code cache's cap, evict code only finished transactions used by @LukaszRozmej in https://github.com/NethermindEth/nethermind/pull/14380
- fix(bal): stop parallel validation once a transaction fails by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14605
- fix(bal): tighten handling of fetched and stored block access lists by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14597
- fix(network): return a new receipts message for an empty response by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14648
- fix(consensus): validate parent beacon block root presence in headers by @stdevMac in https://github.com/NethermindEth/nethermind/pull/14560
- fix(sync): recover catch-up receipt senders and rank receipt/BAL requests by their own speed by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14662
- perf(state): apply independent BAL storage batches in parallel by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14667
- fix(sync): skip peers that answered empty when fetching BALs for healing by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14657
- fix(producer): don't let discarded transactions shift receipt indexes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14614
- fix(bal): keep produced blocks within the block access list item limit by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14647
- fix(bal): enforce the block access list item limit on every processing path by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14646
- fix(merge): keep the payload getPayload handed out when a late build finishes by @Marchhill in https://github.com/NethermindEth/nethermind/pull/14661
- fix(archive-proofs): take a composed node's empty children from their rows by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14741
- fix(archive-proofs): record the child views of a composed node captured at the tip by @svlachakis in https://github.com/NethermindEth/nethermind/pull/14745
New Contributors
- @jxom made their first contribution in #14020
- @gophersg made their first contribution in https://github.com/NethermindEth/nethermind/pull/14168
- @somasoil made their first contribution in https://github.com/NethermindEth/nethermind/pull/14254
- @colinlyguo made their first contribution in https://github.com/NethermindEth/nethermind/pull/14300
Full Changelog: 2.1.0...2.2.0