v2.10.3 is a security and stability release on top of v2.10.2. It's the public release of v2.10.3-priv, which most validators and major RPC providers already run.
No hardfork, no database schema change, no resync required. Nodes can be upgraded one at a time, in any order.
Highlights
- Execution: parallel (BlockSTM V2) balance reads are resolved correctly across a self-destruct boundary (#2403). Shared block caches are size-capped and per-tx code hashes memoized, which lowers importer memory under heavy keccak / ecrecover load. Log counting while tracing no longer copies logs (#2460).
- Txpool: pending chains stranded behind a head that can't be mined are evicted after
txpool.strandedlifetime. Filtered addresses also apply to SetCode (type 4) authorizations. The pool signer is no longer swapped whenallow-unprotected-txsis set (#2464). - Storage trie preload: segmented BFS queue for the preload, plus optional address-cache persistence across restarts. On a mainnet sentry, preload on restart drops from about 1h25m to about 4s.
- P2P: static peers stay dialed across jails and full dynamic slots (#2438), and are kept out of the peer dropper.
- RPC: the execution slot is re-acquired between batch items, and the RPC execution pool request timeout from config is applied.
- Heimdall client: the configured request timeout is now honored (#2411).
- Go toolchain 1.26.8.
Operator notes
- Check
[heimdall] timeout/--bor.heimdalltimeout. Before this release the value was ignored. It's now honored, and the default is30s. If your config sets a low value explicitly (older templates had5s), remove it or raise it to30sunless you need something else. - New config (defaults are safe):
[txpool] strandedlifetime: how long a pending head can stay below the base fee before its chain is evicted (default3h,0disables). On by default.[cache] addresscachepersist: persist the address-biased trie caches on shutdown and reload them on startup (defaultfalse). Needs disk space for the snapshot, about 9 GB on mainnet with the default cache sizes. The first restart after enabling it still does a cold preload. If the snapshot is missing, bor falls back to the normal preload.
What's Changed
- v2.10.3 candidate by @marcello33 in #2492
Full Changelog: v2.10.2...v2.10.3