Fix multiple equal selection signatures in Aggregator Committee#603
Merged
GalRogozinski merged 3 commits intoboolefrom Feb 12, 2026
Merged
Fix multiple equal selection signatures in Aggregator Committee#603GalRogozinski merged 3 commits intoboolefrom
GalRogozinski merged 3 commits intoboolefrom
Conversation
Contributor
|
Too many files changed for review. ( |
nkryuchkov
approved these changes
Feb 10, 2026
Contributor
|
@greptileai can you review only these files? |
GalRogozinski
approved these changes
Feb 10, 2026
dknopik
approved these changes
Feb 12, 2026
Contributor
@MatheusFranco99 just a note that this issue isn't just for devnet. |
|
agree that this solution alleviates the issue |
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.
Overview
Context
For the sync committee Ethereum duty, 512 validators are selected to submit head votes, distributed through 4 subnets, and a fraction of them are selected to become sync committee contributors. While a validator can belong to multiple subnets, it expected to be assigned to a subnet only once. Still, on small devnets with few validators, it's possible for a validator to be assigned multiple times to the same subnet.
Issue and Fix
Issue: In the pre-consensus phase of the aggregator committee duty, selection proof signatures are created to check whether the validator is a sync committee contributor or not. If it's assigned more than once to the same subnet, our current implementation would sign the same selection data multiple times and add them to the partial-signature message, which is redundant as the signature is the same.
Fix: We simply sign once per subnet and let the message have unique signatures per (validator index, subnet).
Test
A new test is added with specification:
{0,0,1,129,129,130}. Subnet is computed asindex/(512/4). Thus, they map to subnets{0,0,0,1,1,1}.PartialSignatureMessage(one root for0and another for1).Testing Utils Changes
TestingContributionProofIndexesis changed from{0, 1, 2}to{0, 129, 257}so we can have different subnets for the default tests.contributionProofMsg(the core testing function for creating partial-signature messages for sync committee contribution) is extended with an argument for validator sync committee indices.SSV repo PR: ssvlabs/ssv#2681