Conversation
chore: fix incorrect comment in ssvNodeFilter function
* Enable msg processing spectest root check * fix spec tests
* ci: align unit-test Go setup with go.mod and enable cache
* attempt to cache generated spec artifacts
* spec-test: reuse pre-generated ssv-spec JSON fixtures
* spec-test: reduce spectest log noise
* ci: remove redundant spec-test-raceless workflow
* full-test: remove verbose go test output
* spec-test: run explicit spectest packages
* make: remove unused raceless spec-test targets
* ci: enable Go dependency cache across test workflows
* ci(unit): run core and ssvsigner tests in separate jobs
* ci: remove redundant make installation steps
* ci(unit): rename job to ssv for clarity
* test(duties): reduce sync committee test wall time near period boundary
* ci(spec): split spec tests into qbft and ssv jobs
* update Go to 1.25
* revert splitting spec test pipelines
* operator/duties: use synctest to mock real clock in tests
* beacon/goclient: use synctest for some tests
* exporter/api: use synctest for some tests
* operator/{slotticker,validator}: use synctest for some tests
* protocol/v2/qbft/roundtimer: use synctest for some tests
* protocol/v2/queue/worker: use synctest for some tests
* attempt to fix linter
* attempt to fix unit tests cache
* attempt to improve caching
* CI cache adjustments
* cache spec tests
* attempt to cache ssvsigner e2e
* attempt to optimize Docker build
* fix check in MsgProcessingSpecTest
* code review comments
* fix code review comments
…#2608) * fee-recipient-update: self-throttle validator-registrations * fix closure typos/issues * minor code restructuring * address review comments
* unit-tests: run concurrently * fix flakyness caused by slot-ticker mocks * enable cache for tests * fix flaky scheduler tests * check if cache works * apply the same pattern as in other tests * revert: check if cache works * reduce flakyness related to duty-scheduler tests * reduce flakyness related to duty-scheduler tests (part 2, also fixing certain issues with part 1) * minor improvements * apply review suggestions * make waitForDutiesFetch non-flaky * remove redundant nil-check in tests * disable caching * bump timeouts * enable caching * fix flaky TestFetchLogsInBatches behavior * simplify test assertion
* feat(api): add pagination to validators list * feat(api): rename pagination structs * feat(api): Add OpenAPI spec to validators endpoint * feat(api): add comment * feat(api): add param validation to pagination struct
* unit-tests: run concurrently * fix flakyness caused by slot-ticker mocks * enable cache for tests * fix flaky scheduler tests * check if cache works * apply the same pattern as in other tests * revert: check if cache works * reduce flakyness related to duty-scheduler tests * reduce flakyness related to duty-scheduler tests (part 2, also fixing certain issues with part 1) * minor improvements * apply review suggestions * make waitForDutiesFetch non-flaky * remove redundant nil-check in tests * disable caching * bump timeouts * enable caching * fix flaky TestFetchLogsInBatches behavior * simplify test assertion * use WaitGroup instead of a Pool for graceful shutdown * remove debug printout * correct Scheduler.Wait
* duty-fetching: simplify AttesterHandler * update comment to clarify * tmp * minor adjustments * minor fixes * clarify comments * do not use reorgEpoch as it might not be correct (since we only care about duties for the current/next epochs) * review-based adjustments/corrections * use more appropriate context for background tasks (duty-fetch handlers) * fix typo with the method-receiver(s)
…ith-error fix(eventparser): replace panic with error return in constructor
fix(ttl): add context support to prevent goroutine leak
* fix(p2p): replace Fatal calls with graceful error handling * fix(p2p): reset state on startup failure with defer rollback * fix(p2p): return error on double Start instead of silent no-op
* Interval - fix ticket leak, remove redundant Go context * P2P - Implement context shutdown listeners and unit tests * Longer test timeout, minor refactor
* beacon/goclient: cache domain data by epoch * code review comments * fix code review comment * fix a code review comment
* protocol/v2/ssv/runner: add proposer runner block proposal tests * code review comments * fix code review comment * fix another round of review comments * yet another round of review comments * one more round of review comments * review comments * add requested tests * attempt to fix unit tests
* test(qbft): cover proposal processing * test(qbft): cover prepare processing * test(qbft): cover commit processing * test(qbft): cover round change processing * test(qbft): cover timeout handling * test(qbft): cover instance dispatch and validation * fix struct names * test(qbft): polish instance test helpers * code review comments
* qbft: simplify & clarify ProcessMsg func * inline BaseMsgValidation for simplicity
…2785) * dutystore: add regression coverage for independent duty-type locks * code review comments * code review comments * code review comments
* message/validation: enable lowest allowed round check * fix TestMsgValidator * code review comments * special case for proposer * msg-validation: round-timeout validation refactoring (#2811) * msg-validation: round-timeout validation refactoring * fix typo * further adjustments * clean up comments * optimize * misc improvements * fix linter * add a test to validate/bind EstimatedRoundAt against RoundTimeout * clean up * finish the clarifying comment * finish the clarifying comment * rename roundTimeoutOffset->roundTimeoutForRound * change Height->Slot to finish the merge cleanly * proposer round should be validated via maxRound, not roundBelongsToAllowedSpread * add/update tests for round validation * review adjustments * fix linter --------- Co-authored-by: iurii-ssv <183610124+iurii-ssv@users.noreply.github.com> Co-authored-by: iurii <sidorenko@ssvlabs.io>
* identity/store: rollback p2p network key storage to plaintext * identity/store: remove dead encrypted write path * identity/store: drop unused protect callback * identity/store: remove redundant test assertions
* operator/validator: reduce router fan-out to 48 * code review comments * code review comments * code review comments * code review comments [2] * fix linter after merging stage * code review comments
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
#2845) Mirror WithAllowDelayedStart(true) on the multi-client constructor (it was already set on individual CL clients). Without this flag the constructor returned ErrNotActive immediately on transient CL inactivity at startup, killing the SSV node before the existing 60s longTimeout-bounded beaconConfigInit wait could even run. Also adds a clarifying comment on the addSingleClient loop: bailing on the first error is intentional, a malformed CL address must reach the operator rather than be silently skipped. Refs: ssvlabs/ssv-node-board#1042
merge: main -> stage (v2.4.2)
momosh-ssv
previously approved these changes
May 14, 2026
ljuba-ssv
previously approved these changes
May 14, 2026
* Fix late voluntary exit scheduling * Clarify voluntary exit test names * executionclient: lock follow distance as a network-wide invariant (#2852) * executionclient: lock follow distance as a network-wide invariant Make the EL follow-distance a fixed constant (rename DefaultFollowDistance → FollowDistance) instead of a per-instance option: - drop the followDistance field from ExecutionClient and MultiClient - drop the WithFollowDistance option and its only call site - have production code read the const directly The voluntary-exit duty handler derives a network-agreed dutySlot from the exit event's block slot plus voluntaryExitSlotsToPostpone, which is itself a function of FollowDistance. If operators ran with different follow distances, some would still compute the same dutySlot (it's a compile-time constant) but the slow-EL ones would receive the event after their dutySlot had already passed and fire immediately on the next tick, defeating the cross-operator coordination that pre-consensus signing depends on. Encoding the invariant in the type system removes any temptation to expose this as a CLI flag later. Also rewrite the docstrings on voluntaryExitSchedulingSlack, voluntaryExitSlotsToPostpone, and the "deterministic dutySlot" comment in HandleDuties to explain the actual reason determinism is load-bearing (VoluntaryExit.Epoch derives from dutySlot; divergent slots near an epoch boundary break BLS partial-signature aggregation). Tests previously bypassing follow-distance via WithFollowDistance(0) now either call fetchLogsInBatches directly (where they were bypassing pipeline setup anyway) or mine FollowDistance dummy blocks so the event clears the window naturally. * eventhandler: bypass StreamLogs in TestHandleBlockEventsStream The previous refactor swapped the test's WithFollowDistance(0) shortcut for a helper that mined FollowDistance dummies per event and drained progression markers from StreamLogs. That worked locally but on slower CI runners the cumulative wall-clock delay (~25 iterations × stream-propagation per call) crossed the 12s slot boundary, breaking the highestProposal == EstimatedCurrentSlot() assertion in test_ClusterLiquidated_event_handle: the slashing-protection slot was stored at one wall-clock slot and checked at a later one. This test exists to exercise HandleBlockEventsStream (the handler), not the log stream — it constructs eventsCh manually and feeds it. Replace the streaming-based block-fetch with a direct FilterLogs call, which restores the original tight timing the WithFollowDistance(0) shortcut gave us and removes the unrelated dummy-mining bookkeeping. blockNum increments by one per iteration again. --------- Co-authored-by: iurii-ssv <183610124+iurii-ssv@users.noreply.github.com>
ljuba-ssv
approved these changes
May 18, 2026
oleg-ssvlabs
approved these changes
May 18, 2026
ljuba-ssv
approved these changes
May 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Clean merge of stage -> main, no conflicts.
Related to ssvlabs/ssv-node-board#1041