fix(ssv_types): cap Role::Proposer QBFT rounds at 2 - #1173
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
pretty sure local claude re-pushed that 🙄 |
|
Claude finished @jnhsigmap's task in 1m 44s —— View job Review: cap Role::Proposer QBFT rounds at 2
Verdict: LGTM. The change is correct, minimal, and well-tested. One constant moves ( Correctness
Tests
Minor observations (non-blocking)
Verification noteI was unable to run |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## epbs #1173 +/- ##
=======================================
Coverage ? 69.02%
=======================================
Files ? 164
Lines ? 31915
Branches ? 0
=======================================
Hits ? 22029
Misses ? 9886
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
I updated the comment because it was referencing a commit and was stale. the SIP hasn't merged yet and the |
|
Looks great! Small nit: SIP-94 §7 only pins the cut-off for the new roles; // Caps both the incoming consensus-message round gate and the local QBFT
// instance round limit. Values mirror go-ssv's maxRound:
// https://github.com/ssvlabs/ssv/blob/d2352a3dba3e7b309ef090b7a23f4cac1d9002d1/message/validation/consensus_validation.go#L434-L443 |
yeah good point, fixed |
Merge Queue Status
This pull request spent 1 hour 53 minutes 20 seconds in the queue, including 1 hour 51 minutes 55 seconds running CI. Required conditions to merge
|
Problem, Evidence, and Context
Role::Proposercapped QBFT at round 6, so Anchor accepted proposer consensus messages at rounds 3-6 that go-ssv drops asErrRoundTooHigh.epbs-gloasmessage/validation/consensus_validation.gomaxRoundreturns 2 for the proposer-class roles, 6 for sync-committee contribution, 12 for the committee and aggregator roles.Change Overview
Role::Proposernow shares the round 2 cap withRole::EnvelopeProposer, mirroring how go-ssv groups the two proposer-class roles.Role::SyncCommitteekeeps its round 6 cap in its own match arm.max_roundcomment citing SSV SIP-94 (reference now cannot go stale).Role::EnvelopeProposer, committee and aggregator, the non-QBFT roles, round-timer durations, and timeout-mode selection.Risks, Trade-offs, and Mitigations
ssvkeeps its local cut-off role-independent at 12. However, rounds above the validation cap cannot reach quorum because peers drop them, so stopping the local instance there forfeits no reachable consensus.Validation
RoundTooHighand one at round 2 is still accepted, covering both sides of the boundary.cargo test -p ssv_types -p message_validator: 220 passed, 0 failed.make cargo-fmt-checkandmake lint: clean.Rollback
Role::ProposerandRole::SyncCommittee. No config, data, or migration impact.