feat(qbft_manager): wire EnvelopeProposer per-proposer QBFT instances - #1188
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## epbs #1188 +/- ##
=======================================
Coverage ? 69.44%
=======================================
Files ? 164
Lines ? 32173
Branches ? 0
=======================================
Hits ? 22342
Misses ? 9831
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:
|
|
@claude, review this PR |
|
Claude finished @jnhsigmap's task in 2m 58s —— View job PR Review: wire EnvelopeProposer per-proposer QBFT instances
Reviewed against What I verified
Observations (non-blocking)
Note on verificationI could not re-run |
|
my justification for I added the comment about |
|
Queued — the merge queue status continues in this comment ↓. |
Merge Queue Status
This pull request spent 28 minutes 20 seconds in the queue, including 27 minutes 3 seconds running CI. Required conditions to merge
|
Problem, Evidence, and Context (Required)
Role::EnvelopeProposerbut leftqbft_managerrouting as a stub that rejects every message, so operators cannot participate in envelope-signing consensus (SIP-94 §6).EnvelopeConsensusData, unblocking this wiring; it is the next step in the ePBS envelope-signing milestone.Change Overview (Required)
qbft_manager.EnvelopeProposerInstanceIdwith validator and instance height. NoValidatorDutyKind, which differs toProposerInstanceId.envelope_consensus_data_instancestoQbftManager.TODOinreceive_datathat rejected validator duty executorEnvelopeProposermessages.EnvelopeProposermatch arm that rejects before Gloas and routes the new map to the qbft instance at/after Gloas.gloas_enabled_at_slothelper to handle duplicated call. This reads from Ethereum consensus spec and not the SSV fork schedule. Existing Gloas beacon-vote gate also adopts it..retain(sameQBFT_RETAIN_SLOTSthreshold as siblings).QbftDecidableforEnvelopeConsensusDatamirroring peers' structure.Risks, Trade-offs, and Mitigations (Required)
RoleNotActivestill thrown).message_validator'svalidate_role_for_fork; both read the sameArc<ChainSpec>, so they cannot disagree. Reaching the gate logs atwarn!(parity with the AggregatorCommittee Boole gate).Validation (Required)
envelope_dispatch_testsmodule: pre-Gloas rejection for both duty-executor spellings with map-emptiness assertions; post-Gloas routing into the envelope map without touching the proposer map; Gloas activation boundary (last pre-fork slot rejects, first fork slot routes);message_idis validator-scoped and distinct from the block-proposal id for the same validator.envelope_proposer_any_executor_decodes_as_validator_transient_role_not_activeis toenvelope_proposer_rejected_before_gloasand moved into new moduleanchor/qbft_manager/src/tests/envelope_dispatch_tests.rs, preserving its record of why a committee-executorEnvelopeProposerid is unconstructable.cargo test -p qbft_manager: 38 passed.make test,make lint,make cargo-fmt-check: clean.Rollback (Required for behavior or runtime changes; optional otherwise)
Blockers / Dependencies (Optional)