github 0xPolygon/bor v2.10.2

4 hours ago

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-held stateSyncMu, 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-preconf and v2.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-announce mimetype, otherwise the producer falls back to unsigned WIT1 announcements.
  • New config / flags (all opt-in, defaults keep current behaviour):
    • [pipeline]: enable-import-src (default false), import-src-logs (default false), warm-snapshot (default true, only takes effect when import SRC and witnesses are both on).
    • [sequencer]: enabled (default false), publisher-endpoint, consumer-endpoint, poll (default 200ms).
    • rpc.txsync.maxconcurrent: cap on eth_sendRawTransactionSync calls waiting for a receipt at once (default 4096, 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

Full Changelog: v2.10.1...v2.10.2

Don't miss a new bor release

NewReleases is sending notifications on new releases.