feat(message_validator): admit builder request auth partial signatures - #1281
Conversation
Accept and forward RequestAuthPartialSig (kind 9) on Role::ProposerPreferences without emitting any, per SIP-94 §5/§7: add the ssv_types variant, widen the role's kind gate, and give the new kind its own budget of 8 distinct signing roots per (MessageId, operator, proposal_slot), independent of the 4-root preferences budget. Lands ahead of any emitter because a container with an unknown kind fails SSZ decode and is REJECT-classed, penalizing forwarding peers. Closes sigp#1277
|
@claude, please take a look |
|
Claude finished @shane-moore's task in 6m 18s —— View job Review:
|
|
@claude, re-checked ssv-spec#632 at head de34c611: |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## epbs #1281 +/- ##
=======================================
Coverage ? 78.45%
=======================================
Files ? 175
Lines ? 38988
Branches ? 0
=======================================
Hits ? 30589
Misses ? 8399
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:
|
shane-moore
left a comment
There was a problem hiding this comment.
Reviewed at 4a4a82dd.
Ship-shaped. I found no correctness, safety, security, or specification-alignment issues. The kind-9 wire value, role binding, independent per-kind root budgets, Ignore classifications, and update-after-signature-verification ordering match the current SIP-94 and ssv-spec #632 heads.
Non-blocking: two added test comments in anchor/message_validator/src/partial_signature.rs (lines 3997 and 4075) use U+2014 punctuation, which conflicts with the repository style rule.
Reviewed by gpt-5.6-sol max.
|
Claude finished @shane-moore's task in 48s —— View job Acknowledged — both loose ends closed, no changes neededThanks for chasing these down.
Nothing outstanding from my review. The one nit from the human review (U+2014 em-dashes in the two added test comments in Since this is already merged to |
Problem, Evidence, and Context (Required)
RequestAuthPartialSig = 9, one single-entry container per distinctBuilderRequestAuthsigning root. Today a kind-9 container fails SSZ decode during topic validation (extract_slotreturnsNone, so the packet REJECTs asUnknownMessageSlot), penalizing the forwarding peer's gossip score on synced nodes.Change Overview (Required)
PartialSignatureKind::RequestAuth = 9added; the role-8 gate admits kinds 8 and 9; kind 9 gets its own budget of 8 distinct signing roots per (MessageId, operator,proposal_slot), tracked separately from the 4-root preferences budget (SIP-94 §7: neither consumes the other). Membership is checked before capacity so a recorded root stays IGNORE when the set is full; duplicate-root and over-cap are both Ignore-class.SigningRootBudgetsonSignerState, allocated on the first role-8 packet, so the other roles' ring entries shrink from an inline map to one pointer.ssv_types/partial_sig.rs(wire kind) ->partial_signature.rs(role gate) ->duty_state.rs(budget + storage) ->message_counts.rs/lib.rs(compile-forced no-op arms, doc generalization).gotstrings now use the kind's Debug name).Risks, Trade-offs, and Mitigations (Required)
Validation (Required)
[9,0,0,0,0,0,0,0].make cargo-fmt-checkandmake lintclean;cargo test -p ssv_types --lib142 passed;cargo test -p message_validator --lib132 passed;cargo check --workspacegreen.Rollback (Required for behavior or runtime changes; optional otherwise)
Blockers / Dependencies (Optional)