Repository navigation
chore(deps): update nethermind/nethermind docker tag to v2 - #88
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/major-execution-layer-client-updates
branch
2 times, most recently
from
October 22, 2026 22:38
988abfe to
eb8f3f4
Compare
renovate
Bot
force-pushed
the
renovate/major-execution-layer-client-updates
branch
from
October 27, 2026 01:08
eb8f3f4 to
fbae962
Compare
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
1.36.2→2.2.2Release Notes
NethermindEth/nethermind (nethermind/nethermind)
v2.2.2Compare Source
Release notes
A patch release on top of 2.2.1 with the October 2026 out-of-band .NET security updates. See the Microsoft announcement for details of the fixed vulnerabilities.
There are no Nethermind code, database-format, or configuration changes, so you can upgrade in place from any 2.2.x version. Consensus behavior and fork schedules are the same as in 2.2.1.
Overview
2 changes since 2.2.1:
mcr.microsoft.com/dotnet/aspnet:10.0.14-resolute(-resolute-chiseledfor the chiseled variant). The self-contained binaries are built with SDK 10.0.403 and bundle the 10.0.14 runtime. Docker users only need to pull the new tag (#15251)Build signatures
The packages are signed with the following OpenPGP key:
AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617EWhat's Changed
Full Changelog: NethermindEth/nethermind@2.2.1...2.2.2
Full Changelog: NethermindEth/nethermind@2.2.1...2.2.2
v2.2.1Compare Source
Release notes
A patch release on top of 2.2.0 that removes the Glamsterdam (Amsterdam) fork from Hoodi, which was planned for Mon, 26 Oct 2026, 17:42:48 UTC (timestamp
1793036568).The fork is on hold on Hoodi following the security concerns discussed on ACDE #248. A new date will come in a later release.
This is the only change. There are no database-format or configuration changes, so you can upgrade in place from any 2.2.x version. No other network is affected.
Overview
1 change since 2.2.0:
0x23aa1351) with no next fork announced (#15110)What's Changed
Full Changelog: NethermindEth/nethermind@2.2.0...2.2.1
Build signatures
The packages are signed with the following OpenPGP key:
AD12 7976 5093 C675 9CD8 A400 24A7 7461 6F1E 617Ev2.2.0Compare Source
Release notes
586 merged pull requests since 2.1.0, from 31 contributors.
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.EngineHostto a host name, run withInit.DiagnosticMode=VerifyTrieorFlatDb.ImportFromPruningTrieState=true, useKeyStore.BlockAuthorAccount, pipeline requests over WebSocket or IPC, consume Parity-styletrace_*output, or build plugins against Nethermind.Highlights
1793036568(Mon, 26 Oct 2026, 17:42:48 UTC), and Hoodi's chainspec now carries its correct beacon-chain genesis timestamp. (#14489, #13732)Sync.ReconstructFinalizedStateFromBlockAccessLists=true). Missing data or a commitment mismatch falls back to execution. (#14157)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)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)Blocks.PreWarmHandoff, on by default; not used for blocks with a block access list or under EIP-8037). (#14312, #14476)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)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)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)mainnet_aztecconfig with a rolling 4,096-block trace window on the flat-history backend and the per-transaction trace index. (#14038)SendPolicy.Enabled=false). (#14396)Performance
Init.PipelineWarmupEnabled=false). The ~2 s KZG trusted-setup load is no longer on the startup critical path. (#13931, #13998)newHeadsserialized once for all subscribers. (#14299, #14187, #14197, #14198, #14195, #13894)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)trace_filterstops oncecounttraces are collected. (#14461, #13890)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)JsonRpc.WebSocketsPortequals the engine port andInit.WebSocketsEnabled=true. Before, it started without an Engine API and only logged a warning. Use a differentWebSocketsPort. (#14285)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)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.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)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)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)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)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:
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)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_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)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)ITxTracerimplementations receive paired instruction callbacks (ReportOperationRemainingGasonly after a reportedStartOperation; resumes viaReportGasUpdateForVmTrace). (#13551)[StepCommand]; a step carrying it never runs during a normal start. (#13715)Consensus / protocol (prototype forks only)
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)Default and configuration changes
Diffed
I*Config.csdefaults andNethermind.Runner/configs/*.jsonbetween2.1.0and2.2.0.Changed defaults
JsonRpc.WebSocketsProcessingConcurrency116JsonRpc.IpcProcessingConcurrency116Db.CodeDbRowCacheSize(hidden)Db.CodeDbRocksDbOptions(hidden)compression=kLZ4Compression;prependedNew settings
Sync.ReconstructFinalizedStateFromBlockAccessListstrueInit.PipelineWarmupEnabledtrueJsonRpc.TraceBlockParallelism4JsonRpc.MaxBufferedTraceLogSize268435456(256 MiB)0= unlimitedJsonRpc.RpcTxSyncMaxConcurrentRequests128eth_sendRawTransactionSync;0disablesFlatDb.DeferStorageTrieCommittrueFlatDb.ApplyStorageWritesOnIdleThreadtrueFlatDb.MaxInMemorySnapshotBytes0(off)FlatDb.InMemorySnapshotBloomBitsPerKey14.00disablesSendPolicy.Enabled/RulesPath/JournalPath/WarnOnlyfalse/null/null/falseTxPool.FrameTx*(9 keys)Blocks.PreWarmHandoff,Blocks.PrefetchBlockAccessListCode(hidden)true,falseBlocks.BlockProcessingTimeoutMs180000(3 min)0disablesDeprecated:
FlatDb.HistoryTransactionIndexTraceParallelism(hidden; useJsonRpc.TraceBlockParallelism). Removed keys: none.Bundled configs: new
mainnet_aztec.json; sync pivots refreshed forop-mainnet,op-sepolia,worldchain-mainnet,worldchain-sepolia; OP Superchain chainspecs refreshed (#13944, #14231).Chains/hoodi.jsongainsamsterdamTimeandbeaconChainGenesisTimestamp.Sync, database & state
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)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)ctx.txIndexreports the transaction's position in its block. (#13666, #13529, #14249)vmTraceandstateDifftraces, selects them like live replay, and serves stored transaction traces only from canonical blocks. (#14093, #14115, #14122)Engine API & block processing
engine_getPayloadV3/V4choose their fork window by whether execution requests are enabled, not by EIP-7623. (#13833)engine_newPayloadhas already accepted stays queued for processing when the request's time budget runs out; the request still answersSYNCING. (#14337)Networking & protocol
Stability & hardening
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.ProtectedDataSystem.CommandLineMicrosoft.Build.Tasks.Git,Microsoft.SourceLink.GitHubNethermind.RocksDbBindingsupdated to the stable11.8.1.153. (#14617)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
eth_sendRawTransaction(#13815); EIP-1559 params with zero elasticity and a non-zero denominator are rejected (#13816).extraDatais not exactly 7 bytes are rejected. (#13817)XDPoS_getV2Block*header encoding andXDPoS_getMissedRoundsInEpochByBlockNumbefore the V2 switch fixed. (#14175, #14008)Glamsterdam fork on Hoodi
42352641793036Fork 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 617EWhat's Changed
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.