This release delivers improvements to observability, performance, and validator duty handling, focusing mainly on bug fixes and optimizations, in particular for higher amount of validators (e.g 3k).
π 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.3.5
β¨ Features & Improvements
-
Telemetry
- Introduced Tracing for the SSV node utilizing OpenTelemtry traces (mostly focuesd on duty flow for now). (#2076)
- Added and improved observability calls in runners and consolidated observability packages. (#2272, #2388)
- New validator status metrics (e.g.
attesting
) and additional metrics for attestation client selection and quorum counts. (#2404, #2414, #2420)
-
Validator Duty & Scheduler
- Configurable proposer delay and related safety/logging improvements. (#2260, #2267, #2269)
- Enhancements for validator registration and duty handling; improvements to aggregation duty logic. (#2130, #1817)
- Slashing-protection improvements and E2E slashing-protection tests for ssv-signer. (#2294)
- faster fee-recipient updates (~2 epochs now vs ~10 epochs prior)
-
SSV Signer & Remote Signing
-
Networking & P2P
-
Performance & Scalability
-
Metrics
-
EL/CL support
- Updated to the latest
go-eth2-client
version + implemented enhanced failover in ssvlabs/go-eth2-client#11
- Updated to the latest
π Fixes
-
Execution client improvements
-
Databse
-
Beacon / Sync
-
Message validation & Duties
-
Tests and misc
π Docs & Developer Experience
- New and updated docs:
TRACES.md
, attestations/performance docs, MEV considerations, and contributor guidance. (#2299, #2293, #2416, #2427) - CI / tooling improvements: run CI on forked PRs, deduplicate runs, move coverage to Codecov. (#2288, #2362, #2307)
- Linter & formatting enhancements; useful linters enabled to prevent regressions. (#2222, #2259, #2388)
β What to expect after upgrading
- Better handling and logging for proposer delays, execution client streaming, and signer interactions.
- Generally reduced flakiness and improved test coverage which should reflect in operational stability.
Exporter
This version includes major exporter updates and configuration, if you are using exporter please wait for future release with clear instruction about configuration changes and new features. (upcoming soon)
What's Changed
- hotfix(message/validation): optimize signer state memory usage by @nkryuchkov in #1874
- slotticker: improve and clarify by @iurii-ssv in #1860
- beacon: pass context to methods by @nkryuchkov in #2188
- all: avoid passing logger to methods by @nkryuchkov in #1968
- message/validation: index state by peer ID + message ID by @nkryuchkov in #2126
- Removing redundant variable copies in for loop by @LeonLow97 in #2198
- fix: code after lastest merge by @MatusKysel in #2205
- p2p: simplify discovery by @iurii-ssv in #2092
- eventhandler: log expected nonce on malformed event by @nkryuchkov in #2203
- Allow previous round decided messages by @nkryuchkov in #1343
- refactor(network/records): change subnets type to [16]byte by @nkryuchkov in #1813
- fix: subnets count parsing empty string by @y0sher in #2210
- ssvsigner: fix panic on remote signer initialization by @nkryuchkov in #2217
- linter: enable shadow check by @iurii-ssv in #2222
- all: replace context.Background() in tests and requests by @nkryuchkov in #2202
- refactor(networkconfig): extract beacon parameters from BeaconNetwork interface by @nkryuchkov in #2145
- fix(network/p2p/p2p_setup.go): scoreParamsFactory not set error in P2P scoring by @kchojn in #2211
- fix: prevent
indicesChange
call for non-committee validators & no-op metadata updates by @olegshmuelov in #2060 - OperatorData: change PublicKey type to string by @nkryuchkov in #2143
- message/validation: fix previous epoch duty count calculation by @nkryuchkov in #2190
- Revert "message/validation: fix previous epoch duty count calculation⦠by @MatusKysel in #2242
- executionclient: fix log streaming logic by @nkryuchkov in #2174
- fix(eth/executionclient): halve log events batch size on error by @kchojn in #2204
- fix(eth/executionclient/defaults.go): revert DefaultHistoricalLogsBatchSize to 200 to prevent websocket read limit errors by @kchojn in #2248
- fix(beacon-network-config) - Do not instantiate EKM network by @oleg-ssvlabs in #2245
- Bump ssv-signer dependency to the latest by @oleg-ssvlabs in #2250
- fix(go.mod): update go-eth2-client version to fix fetching config from teku 25.5.0 by @nkryuchkov in #2253
- message/validation: remove redundant slot checks by @nkryuchkov in #2226
- fix(go.mod): rebase go-eth2-client fix onto stable branch by @nkryuchkov in #2254
- Align stage to main. by @y0sher in #2255
- proposer-duty: configurable proposer delay by @iurii-ssv in #2260
- compilation: fix due to skipped pipeline by @iurii-ssv in #2263
- feat(traces): OTeL Traces implementation(duty flow) by @oleg-ssvlabs in #2076
- proposer-delay: log warn for capped value by @iurii-ssv in #2267
- proposer-delay: don't block when context is done by @iurii-ssv in #2269
- fix(validator slashing protector): epoch '0' check when setting highest source epoch by @oleg-ssvlabs in #2273
- feat(signer package version) - bump the package to the Stage branch latest by @oleg-ssvlabs in #2275
- docs: add
CLAUDE.md
by @olegshmuelov in #2276 - runners: add missing observability calls by @iurii-ssv in #2272
- update go-eth2 library by @MatusKysel in #2282
- linter: fix & improve formatting by @iurii-ssv in #2259
- feat(db): add pebbledb support by @anatolie-ssv in #2194
- chore: remove unused NewSubnetTopicOptsValidators function by @diegomrsantos in #2287
- run github actions on PRs that are targeting
stage
by @vaclav-ssvlabs in #2288 - fix(workflows) remove duplicate 'on' section by @vaclav-ssvlabs in #2291
- backport: (stage <- main) proposer-duty: configurable proposer delay by @iurii-ssv in #2283
- feat(network/discovery/enode.go): make
HostDNS
andHostAddress
mutually exclusive by @kchojn in #2274 - ssvsigner: fix linter & UT, add CI checks [stage] by @nkryuchkov in #2277
- fix(validator): fetch stats with no allocations by @anatolie-ssv in #2280
- storage: (shares) fix flaky test by @iurii-ssv in #2298
- execution-client: fix flaky test by @iurii-ssv in #2296
- feat(traces): Traces enhancements by @oleg-ssvlabs in #2297
- validator: attempt to fix flaky test TestHandleNonCommitteeMessages by @iurii-ssv in #2300
- feat(documentation) - Update TRACES.md by @oleg-ssvlabs in #2299
- ssvsigner: handle request error after remote signer processed keys by @nkryuchkov in #2246
- validator: options refactoring (cleanup) by @iurii-ssv in #2308
- fix(deps): update opentelemetry-go monorepo by @renovate[bot] in #2252
- fix(observability) - fix wrong logger initialization order, add more logs by @oleg-ssvlabs in #2323
- Prometheus - enable legacy validation scheme by @oleg-ssvlabs in #2324
- gas-limit: default to 36 by @iurii-ssv in #2307
- chore: migrate coverage badge to Codecov and remove local implementation by @kchojn in #2326
- message/validation: fix previous epoch duty count calculation (replaces #2190) by @nkryuchkov in #2325
- feat(dutytracer): collect and expose all messages by @anatolie-ssv in #2008
- message/validation: group errors by ignored and rejected by @nkryuchkov in #2342
- netowkrconfig: use pointer receivers (to avoid lots of copies) by @iurii-ssv in #2304
- chore: fix linter by @MatusKysel in #2345
- fix(node): graceful shutdown network and db by @anatolie-ssv in #2301
- feat(docs) - Vouch acknowledgements by @oleg-ssvlabs in #2349
- ssvsigner: fix TLS args order in README.md by @nkryuchkov in #2334
- Stage <- Main + resolved conflicts by @nkryuchkov in #2347
- feat(exporter): allow configurable target subnets by @anatolie-ssv in #2209
- storage/basedb: simplify migration process by @nkryuchkov in #2348
- beacon/goclient: remove
nodeSyncingFn
by @nkryuchkov in #2337 - chore(log) - WAD and parallel submissions log on application startup by @oleg-ssvlabs in #2360
- duty-runners: remove redundant artifacts & improve logs by @iurii-ssv in #2261
- chore(ci) De-duplicate CI runs by @vaclav-ssvlabs in #2362
- chore(tools) - bump go tools, update go generate command by @oleg-ssvlabs in #2356
- beacon/goclient: check if at least one client is healthy by @nkryuchkov in #2339
- fix(network/p2p/p2p_setup.go): data race in connection stats during network initialization by @kchojn in #2365
- fix(eth/executionclient/multi_client.go): log all errors in MultiClient StreamLogs by @kchojn in #2378
- fix(syncer) - Metadata syncer bug fixes/improvements by @oleg-ssvlabs in #2374
- fix(exporter): missing cache lookup for links by @julienh-ssv in #2344
- chore: remove ANSI color codes from default log format by @olegshmuelov in #2394
- fix(message validation): partial signature logging shows wrong slot and consensus fields by @olegshmuelov in #2393
- all: cancelable sleep by @nkryuchkov in #2375
- protocol/v2/qbft/{controller,instance}: use method fields directly instead of passing as args by @nkryuchkov in #2373
- feat(e2e): add
SSV-Signer
slashing protection tests by @olegshmuelov in #2294 - feat(ssvsigner-e2e): implement mutual TLS for all E2E test connections by @olegshmuelov in #2402
- feat(performance / 3k validators): Run ProcessConsensus validator duty signing in separate goroutines by @oleg-ssvlabs in #2340
- Stage <- Main + resolved conflicts by @nkryuchkov in #2395
- re-enable duty scheduler for exporter by @MatusKysel in #2407
- fix(db): only use pebble for exporter by @y0sher in #2397
- chore: update go-eth package by @MatusKysel in #2411
- Add metric for attestation data client selection tracking by @zktaiga in #2414
- ssvsigner: add remote keys summary by @nkryuchkov in #2391
- Fix exporter-v2: publish decided quorums to websocket by @julienh-ssv in #2410
- migrations: fix order by @nkryuchkov in #2418
- feat(performance / 3k validators): Partially run ProcessPostConsensus phase in separate goroutines by @oleg-ssvlabs in #2399
- docs: attestations (measuring performance) by @iurii-ssv in #2293
- chore(validator status): Refactor validator share statuses by @oleg-ssvlabs in #2421
- fix(exporter): prevent empty HTTP responses for undecided round changes by @julienh-ssv in #2420
- feat(metrics) - New validator status - 'attesting' by @oleg-ssvlabs in #2404
- docs: (mev-considerations) update round-change-based estimates by @iurii-ssv in #2416
- linter: enable useful linters by @iurii-ssv in #2388
- chore(observability packages refactor) - consolidate observability related packages by @oleg-ssvlabs in #2405
- chore(docs) - Update NEW_NETWORK.md by @oleg-ssvlabs in #2427
- ssvsigner: log web3signer request duration by @nkryuchkov in #2389
- ssvsigner: log error from web3signer by @nkryuchkov in #2390
- networkconfig: delete mocks, refactor by @nkryuchkov in #2392
- validator-startup: simplify & address edge-cases by @iurii-ssv in #2268
- feat(exporter): add get all validator traces endpoint by @julienh-ssv in #2423
- feat(metrics) - introduction of a new metric (number of quorums), refactor, bug fix by @oleg-ssvlabs in #2428
- chore(e2e) - decommission old E2E implementation by @oleg-ssvlabs in #2432
- deps: update go-eth2-client by @iurii-ssv in #2431
- validator-registration: duty enhancements by @iurii-ssv in #2130
- aggregation-duty: clarify and clean up by @iurii-ssv in #1817
- duties: correct logger usage by @iurii-ssv in #2400
- fix(all): remove dead code by @julienh-ssv in #2447
- duties: correct logger usage (part 2) by @iurii-ssv in #2453
- flaky-test: TestScheduler_Attester_Early_Block by @iurii-ssv in #2458
- db: iterator should propagate error to the caller (not log it) by @iurii-ssv in #2292
- execution-client: add timeouts for every request by @iurii-ssv in #2469
- hotfix(exporter): reduce logs by @julienh-ssv in #2479
- generate-operator-keys: support legacy "pubKey" field in keystore by @nkryuchkov in #2462
- backport: duties: clarify & fix typos & fix sync-committee subscription by @iurii-ssv in #2484
- backport: CL: correct multi-client usage (Events) by @iurii-ssv in #2499
- main -> version/optimization with conflicts resolved by @oleg-ssvlabs in #2509
- Optimization conflicts by @oleg-ssvlabs in #2513
- Main <- version/optimization by @y0sher in #2511
New Contributors
- @LeonLow97 made their first contribution in #2198
- @diegomrsantos made their first contribution in #2287
- @renovate[bot] made their first contribution in #2252
Full Changelog: v2.3.4...v2.3.5