This release includes proposer-duty improvements, exporter refactors, minor duty scheduling bug-fixes, better logging, and various cleanups.
🔐 Upgrade Priority
| Network | Priority |
|---|---|
| Mainnet | 👍 Recommended |
| Hoodi | 👍 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.
⚠️ Always update testnet and check performance before updating mainnet nodes.
🐳 Docker image
docker pull ssvlabs/ssv-node:v2.4.0New features
Smart proposal selection for multi-CL setups
For proposer-duty operators utilizing multi-Beacon setups now will not only enjoy the additional redundancy (tolerating occasional CL failures to fetch a block), but also potentially better MEV rewards. This is because of the added scoring mechanism that compares block profits (for all the blocks operators successfully fetched from different CLs).
When fetching blocks from CLs operator will wait for a certain time-window (can be configured by WITH_PROPOSAL_SOFT_TIMEOUT and defaults to 1800ms otherwise) to see if there are any MEV blocks it can use to propose, and if not it will take the best non-MEV block available (or wait beyond the soft-timeout to get one).
What's Changed
Proposer: smarter proposal selection + tuned timeouts
Improves proposer behavior by collecting proposals within a configurable window (WITH_PROPOSAL_SOFT_TIMEOUT defaults to 1800ms), scoring them to select the best candidate, and optimizing for MEV/blinded blocks with early-exit behavior.
PRs: #2648
Duty scheduling and deadline fixes
Fixes duty fetching when the node starts at epoch boundaries, and corrects deadline handling for attester/aggregator duties. Also includes clarifications around BLS signature reconstruction in committee duties.
Exporter: introduce exporter2 core + WS refactor + test stability
Refactors exporter internals by extracting an exporter2 package to decouple core logic from HTTP handlers, migrates the websocket query endpoint to the new core, and fixes racy API tests.
Consensus: improved logging & minor bug fixes
Adds additional observability by logging QBFT “stage durations”, helping diagnose where time is spent during consensus. Fix an edge-case with incorrect SyncCommitteeSubnetID calculation in sync-committee-contribution runner.
Networking: libp2p dependency update
Updates the libp2p version.
PRs: #2588
Cleanup: remove obsolete flags and trim logs
Removes obsolete “majority fork” flags (MAJORITY_FORK_PROTECTION_STRICT) and trims unnecessary log lines.
Build / CI / release engineering improvements
Stabilizes tag versioning, fixes lint issues after CI updates, and updates the Golang base image used for multiarch Docker builds.
Tests and minor refactors
Improves spectests by using real value checkers, and simplifies code using slices.Contains.
CL/EL robustness: handle context cancellation more cleanly
Improves context-cancellation handling between CL/EL paths.
PRs: #2622