Testnet Only Version, don't deploy to mainnet environment
Release Notes
Changes compared with the previous testnet release v2.9.1-testnet. For the full list of changes since mainnet v2.7.1, see the v2.9.1-testnet release notes.
๐ Highlights
- Block import no longer drops or penalizes peers for failures that come from the local node (missing state, gap snapshots, stored ancestors, clock drift, interrupted imports). This fixes peers being disconnected during sync and nodes getting stuck.
- BFT messages are queued while syncing, and failed syncs back off per peer.
- RPC connections no longer hang after a dead connection or a cancelled call.
- Prague groundwork: EIP-2537 BLS12-381 precompiles, EIP-7951 P256VERIFY precompile and Multicall3 preinstall. They are not scheduled on testnet in this release (
PragueBlockis unset).
๐ Stability & Bug Fixes
Block Import & Sync
- Insertion errors are now classified as local or peer faults, and only peer faults lead to the peer being blamed or dropped.
- The node no longer blames the peer when:
- its own state commit fails or a parent state can't be opened
- a gap-block snapshot or canonical gap header is missing
- a rebuilt ancestor has no stored body
- a parent has no total difficulty
- a block is ahead of the local clock
- a sidechain reorg is refused, or the local chain is inconsistent
- Stored ancestors are rebuilt before a batch is verified; known or already executed blocks are adopted instead of being re-run.
- A batch is judged by the blocks it actually executed, and the engine is given the head rather than the batch tail.
- The head event fires when a batch fails after moving the head, and when a pruned sidechain rebuild moves it.
- A batch that starts in the future is parked as a whole.
- Interrupted receipt imports and a stopping chain are reported as interrupted, and the error that stopped the import loop is reported.
- A missing fast sync head record is reported instead of causing a crash.
- A pruned re-import is no longer flagged as a shadow-state attack.
- The checkpoint signal no longer blocks import.
getResultBlockholds the chain mutex during rebuilds and handles missing total difficulty.- The gap snapshot and head markers are written in one batch.
- BFT messages are queued during sync, and failed syncs back off per peer.
CalculatedBlock.stopis now atomic.- A trie flush refused by the database is logged instead of silently dropped.
RPC
- Calls still hanging after a dead connection's read error now fail.
- Connection teardown finishes while a call waits on its context.
- The
finalizedtag is guarded against missing commit info.
EVM
- Calls to precompile
0x0afail instead of faking success. - The history contract code is checked after the Prague gate.
Accounts & ABI
- Ledger can sign EIP-7702 transactions.
- The keystore keeps the timezone sign in keyfile names and uses fsnotify on linux/arm64.
- The correct wallet is kept when the target wallet is missing.
- The smartcard wallet pairing file is truncated before rewriting.
- Several abigen / ABI fixes: v2 binding custom error names, event signature errors exported, logs with a mismatched event signature skipped,
--v2=falsehonored, library deployments awaited before linking, contract ABI parsed once per binding, and corrected unpack error messages.
โจ New Features
- EIP-2537 BLS12-381 precompiles (Prague).
- EIP-7951 P256VERIFY precompile (Prague).
- Multicall3 is preinstalled at the Prague block.
--set-headaccepts hex numbers and relative offsets.- Chain rewind progress is reported.
โก Performance
- MODEXP uses
go-bigmodexpfix.
๐งน Maintenance & Documentation
- Updated mainnet bootnodes.
make cleanalso cleans the Go test and module caches.- Added the abigen v2 binding test suite and re-enabled skipped keystore tests.
- Documented blob opcodes, missing EIP-7825 / EIP-7934 caps, devnet fork activation, and archival system contract sources.
Full Changelog: v2.9.1-testnet...v2.9.2-testnet