This patch release improves the reliability of message validation and peer discovery on top of v2.5.0, and updates the Go toolchain and dependencies. There are no config or DB changes.
🔐 Upgrade Priority
| Network | Priority |
|---|---|
| Sepolia | 🔥 Highly recommended |
| Hoodi | 🔥 Highly recommended |
| Mainnet | 👍 Recommended |
⚠️ Always ensure your Execution + Consensus clients and any remote signers (web3signer, external signers) are updated, SSV strives to support latest released versions of these clients.
🐳 Docker image
docker pull ssvlabs/ssv-node:v2.5.1⚠️ Operator notes
- Drop-in upgrade from v2.5.0. No config changes, no DB migration.
- Message validation metric reasons. On
ssv.p2p.message.validations.ignored(attributessv.p2p.message.validation.discard_reason):- New reason
slot is too far in the future, for messages whose slot is more than 3 epochs past the current slot. - The late-slot reason now lists every role it covers. It changes from
current time is above duty's start +34(committee, aggregator, and aggregator committee) or +3(proposer, sync committee contribution) slotstocurrent time is above duty's start +34 (committee, aggregator, aggregator committee), +3 (proposer, sync committee contribution, PTC attestation) or +2 (proposer preferences) slots. Update any dashboard or alert that matches the old text.
- New reason
- Prometheus
/metricsoutput. With the OpenTelemetry update, the exporter no longer emits theotel_scope_infoseries and adds anotel_scope_schema_urllabel to every series. Metric names and suffixes are unchanged. Update any query or recording rule that joins onotel_scope_infoor expects an exact label set. - Building from source.
go.modnow pinstoolchain go1.26.10. With the defaultGOTOOLCHAIN=auto, an older Go 1.26.x downloads it automatically.
What's Changed
Message validation
- Messages whose slot is more than 3 epochs ahead of the current slot are now ignored early, under the new
slot is too far in the futurereason. Results for all other messages are unchanged. - Improved error handling in message validation.
- Cleanup of slot-time helpers: the duplicate
TimeAtSlotis removed. - The late-slot error and the related code comments now spell out each role's bound, including PTC attestation (+3) and proposer preferences (+2).
- More validation test coverage across all roles, message types and fork configs.
P2P & discovery
- ENR
domaintypeandnext_domaintypeentries are now decoded strictly as 4 bytes, matching how SSV and Anchor nodes encode them. Other values are skipped asinvalidDomainType. - Improved error handling in peer discovery.
- More discovery and ENR decoding tests.
Build / CI / dependencies
- Go toolchain pinned to go1.26.10, and release images are now built with it (previously golang:1.26.0).
- Dependency updates: gRPC v1.83.2, OpenTelemetry v1.45.0 with its exporters and contrib aligned (Prometheus exporter v0.67.0, otelhttp v0.70.0, semconv v1.43.0), chi v5.3.2, golang.org/x/crypto v0.58.0, golang.org/x/net v0.62.0 and the rest of golang.org/x, go-ipld-prime v0.23.0, brotli v1.2.7 and klauspost/compress v1.20.2.
- ssv-signer: dependencies matched to the node, and fasthttp v1.70.0, which parses HTTP headers more strictly (CRLF line endings only, exactly one
Hostheader, URI format checks). The node's client is unaffected. - CI:
go testconcurrency tuned for GitHub's hosted runners, and a faster max-validators spec test. - Renovate: stage's config now applies (weekly schedule, grouped updates, Go toolchain and golang images bumped together).
PRs: #3176, #3177, #3178, #3179, #3180, #3181