Repository navigation
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