v2.10.2 brings WIT2 (BP-signed witness announcements with transitive relay), pipelined state root computation for block import (disabled by default), the sequence store / preconfirmation pipeline (disabled by default), and a set of p2p, sync and RPC hardening fixes. It also carries every fix shipped in v2.10.1-hotfix and v2.10.1-hotfix2.
No hardfork, no database schema change, no resync required.
Highlights
- WIT2 witness propagation (#2208, #2416, #2417): block producers sign each witness announcement; peers verify and relay it without executing the block, and serve witnesses pre-import. Cuts multi-hop milestone-vote latency for stateless validators. Mixed WIT1/WIT2 meshes are supported.
- Pipelined state root computation on import (#2180, #2371): overlaps SRC of block N with execution of block N+1. Off by default, enable with
[pipeline] enable-import-src = true. - Sequence store and preconfirmations (#2373, #2419, #2388, #2423 and follow-ups): block producers can publish the block lifecycle to a sequence store, with preconfirmation RPCs (
eth_sendRawTransactionForPreconf,bor_getPreconfTransactionReceipt,bor_getInvalidPreconfBlocks). Off by default, enable with[sequencer] enabled = true. - P2P traffic control (#2418, #2367): bounded per-peer reply queues and allowances, controlled tx rebroadcast, and dangling tx-fetch peers are retried instead of excluded forever.
- Stateless verification self-heal (#2401): detects and recovers from missing contract code instead of reporting it as a consensus divergence.
- Sync fixes (#2389, #2391, #2456, #2398, #2399, #2435): unfillable skeletons are classified as invalid, sync retries after peer-set replacements, no switch to snap sync in the middle of
SetHead, plus the forward-ported #2429 / #2432 downloader and whitelist fixes. - Go toolchain 1.26.8 (#2420) and dependency bumps (grpc 1.83.2, pion dtls/stun, amqp091-go, otel).
Fixes included from v2.10.1-hotfix / v2.10.1-hotfix2
core: state sync data is read under the already-heldstateSyncMu, removing a lock-ordering stall between block import and the miner (backport of #2371).eth/downloader: sync penalty exemptions restricted to trusted peers (#2429).eth/downloader/whitelist: re-import of canonical blocks below the whitelisted entry is accepted (#2432).
Operator notes
- Upgrade all WIT2-capable nodes in one window. The signed-announce wire format changed after
v2.10.2-beta,v2.10.2-preconfandv2.10.2-preconf2. Nodes still on those tags and nodes on v2.10.2 will drop connections with each other until everything runs the same format. Nodes coming from v2.10.1 are unaffected. - Clef users: whitelist the
application/x-bor-wit2-announcemimetype, otherwise the producer falls back to unsigned WIT1 announcements. - New config / flags (all opt-in, defaults keep current behaviour):
[pipeline]:enable-import-src(defaultfalse),import-src-logs(defaultfalse),warm-snapshot(defaulttrue, only takes effect when import SRC and witnesses are both on).[sequencer]:enabled(defaultfalse),publisher-endpoint,consumer-endpoint,poll(default200ms).rpc.txsync.maxconcurrent: cap oneth_sendRawTransactionSynccalls waiting for a receipt at once (default4096,0= no limit).
- Docker images are no longer published to Docker Hub (#2372).
What's Changed
- core, miner, consensus/bor, eth, triedb/pathdb: pipelined state root computation for block import by @pratikspatil024 in #2180
- ci: bump kurtosis-pos pin and Actions versions in kurtosis workflows by @kamuikatsurgi in #2370
- core, miner: fix nightly pipeline race failures by @pratikspatil024 in #2371
- tests/bor: harden test peering against simultaneous-connect collisions by @pratikspatil024 in #2369
- ci: add pipeline-enabled kurtosis e2e leg (POS-3697) by @pratikspatil024 in #2368
- Removing support to publish images on dockerhub by @0xsajal in #2372
- ci: bump kurtosis-pos pin to v1.4.2 by @marcello33 in #2377
- build: increase race-test package timeout by @pratikspatil024 in #2378
- eth, eth/fetcher, eth/protocols/eth: retry dangling tx-fetch peers instead of excluding them forever by @marcello33 in #2367
- ci: run kurtosis E2E safely on fork PRs by @pratikspatil024 in #2380
- chore(ci): upgrade to codegenie@v0.5.6 by @0xPolygonBot in #2379
- eth/protocols/wit, consensus/bor: WIT2 — BP-signed witness announcements with transitive relay and pre-import serving by @lucca30 in #2208
- build(deps): bump github.com/pion/dtls/v3 from 3.0.11 to 3.1.4 by @dependabot[bot] in #2338
- build(deps): bump github.com/pion/stun/v3 from 3.1.1 to 3.1.5 by @dependabot[bot] in #2339
- consensus/bor: don't leak the live tracer into non-import system transactions by @nebojsa94 in #2353
- rpc, ethapi: release the execution slot while eth_sendRawTransactionSync waits by @pratikspatil024 in #2385
- core/blockstm, core: exclude base-code senders from V2 nonce pre-compute; harden witness parity harness by @cffls in #2383
- eth, core: add sequence store preconfirmation pipeline and RPC support by @rukimedo in #2373
- build(deps): bump github.com/rabbitmq/amqp091-go from 1.10.0 to 1.13.0 by @dependabot[bot] in #2384
- build(deps): bump google.golang.org/grpc from 1.79.3 to 1.83.1 by @dependabot[bot] in #2381
- eth: avoid race in relay-fetch test setup by @pratikspatil024 in #2387
- v2.10.1 to master by @pratikspatil024 in #2390
- rpc: fix rpc_ep_workers_http being stopped on first request by @ChanHongMing in #2364
- eth, eth/sequencer: serve head-state pending in the preconf import gap by @cffls in #2393
- eth: preserve preconfirmation RPC availability by @rukimedo in #2394
- eth/downloader: classify unfillable skeletons as invalid by @rukimedo in #2389
- build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2 by @dependabot[bot] in #2395
- eth: retry sync after peer-set replacements by @rukimedo in #2391
- eth/sequencer: cap coalesced published records at the store message limit by @cffls in #2400
- eth/downloader/whitelist: bound fork-check slice preallocation by @kriss39 in #2398
- eth/downloader/whitelist: keep valid result meters monotonic by @kriss39 in #2399
- sequencer: stop paying for a store that is not answering by @pratikspatil024 in #2406
- build: bump Go toolchain to 1.26.8 by @pratikspatil024 in #2420
- sequencer, rawdb, ethapi: audit the store for the window a node did not watch by @pratikspatil024 in #2388
- ci: notify Slack when the nightly govulncheck fails by @pratikspatil024 in #2421
- core/txpool, eth, p2p: control rebroadcast and peer traffic by @rukimedo in #2418
- core, eth: detect and self-heal missing contract code on stateless verification by @lucca30 in #2401
- build(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc from 1.37.0 to 1.45.0 by @dependabot[bot] in #2424
- eth/sequencer, ci: trip read breaker on a frozen store tail; add kurtosis sequencer e2e leg by @cffls in #2423
- Block sequencing by @cffls in #2419
- eth, eth/fetcher: bound witness page count by the gas-derived ceiling instead of a cross-peer vote by @lucca30 in #2417
- eth/sequencer, rawdb: record served preconfirmations to close the open-block loss window by @kamuikatsurgi in #2427
- eth/sequencer: don't falsely invalidate state-sync blocks by @kamuikatsurgi in #2428
- eth/protocols/wit, eth: WIT2 size oracle — accept non-deterministic witnesses within a signed size band by @lucca30 in #2416
- eth/sequencer: number preconfirmation logs per block by @cffls in #2430
- eth/downloader, eth/downloader/whitelist, internal/cli/server: forward-port #2429 and #2432 from v2.10.1-candidate by @lucca30 in #2435
- eth/sequencer: judge served preconf commitments the audit watermark already passed by @kamuikatsurgi in #2434
- eth: extend the pending head fallback to PendingLogRange by @cffls in #2437
- core, eth/sequencer, internal/ethapi: preserve preconf receipts across canonical import by @kamuikatsurgi in #2439
- eth, eth/sequencer: skip receipt copy on pending state reads by @kamuikatsurgi in #2444
- core, eth: don't switch to snap sync in the middle of SetHead by @kamuikatsurgi in #2456
- eth/sequencer: don't hold a build behind our own acked parent seal by @cffls in #2458
- v2.10.2 candidate by @cffls in #2466
New Contributors
- @0xPolygonBot made their first contribution in #2379
- @nebojsa94 made their first contribution in #2353
- @kriss39 made their first contribution in #2398
Full Changelog: v2.10.1...v2.10.2