Skip to content

Conversation

@MatheusFranco99
Copy link
Contributor

@MatheusFranco99 MatheusFranco99 commented Jan 7, 2026

Overview

This PR updates the message validation rules for the Boole fork.

  • SSVMessage.MsgID must include a CommitteeID encoded with a 16-byte 0x00 prefix to match ValidatorPublicKey length. If the CommitteeID doesn't exist in the current network, it should ignore the message.
  • If a ValidatorIndex in SignedPartialSignatureMessage.Message.Messages is incorrect, considering the ValidatorPublicKey or the CommitteeID in the MessageID, it should ignore the message.
  • For the Aggregator Committee duty, if the same ValidatorIndex appears more than five times in a PartialSignatureMessages (both for PostConsensusPartialSig and AggregatorCommitteePartialSig), the message is rejected.
    Five comes from the fact that, at most, a validator may have one aggregator duty and four sync committee contribution duties (one for each subnet).
  • Topic names must match boole fork syntax: /ssv/<ethereum_network_name>/boole/<subnet>
  • Message size constraints are updated

@MatheusFranco99 MatheusFranco99 self-assigned this Jan 7, 2026
Copilot AI review requested due to automatic review settings January 7, 2026 11:21
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates message validation rules for the Boole fork, introducing support for a new RoleAggregatorCommittee role and refactoring validation logic to handle committee-related roles more consistently.

Key Changes:

  • Introduced RoleAggregatorCommittee role and updated validation rules to distinguish between RoleCommittee and RoleAggregatorCommittee
  • Updated message size constants to accommodate larger messages (MaxMsgSize increased from ~4.9MB to ~9.1MB)
  • Refactored beacon duty validation to focus only on proposer duties, removing sync committee aggregation duty checks

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 7 comments.

File Description
p2p/MessageValidation/Rules.md Updated validation rules, constants, and logic to support the new AggregatorCommittee role; added helper function isCommitteeRole() to check committee-related roles; updated partial signature validation with role-specific limits
p2p/MessageValidation/ReceivedMessagesEstimation.md Added deprecation warning noting the document is outdated due to Alan and Boole fork protocol changes

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

GalRogozinski
GalRogozinski previously approved these changes Jan 12, 2026
Comment on lines 3 to 5
> [!WARNING]
> This document is deprecated due to protocol changes as the Alan and Boole forks.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how hard it is to do a simulator that auto updates from spec you reckon 😅 ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you have simulators in ssv/research?

@GalRogozinski GalRogozinski requested a review from y0sher January 12, 2026 00:02
Co-authored-by: Nikita Kryuchkov <nkryuchkov10@gmail.com>
Copilot AI review requested due to automatic review settings January 13, 2026 08:53
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

nkryuchkov
nkryuchkov previously approved these changes Jan 13, 2026
dknopik
dknopik previously approved these changes Jan 19, 2026
iurii-ssv
iurii-ssv previously approved these changes Jan 20, 2026
| -------------------- | ------------------------- | -------------- |--------------------------------------------------------------------------------------------------------------------------------------------|
| Signers in committee | ErrSignerNotInCommittee | Reject | Signers must belong to validator's or CommitteeID's committee. |
| Different Domain | ErrWrongDomain | Ignore | MsgID.Domain is different than self domain. |
| Invalid Role | ErrInvalidRole | Reject | MsgID.Role is wrong (not `RoleCommittee`, `RoleProposer`, `RoleValidatorRegistration`, `RoleVoluntaryExit`, or `RoleAggregatorCommittee`). |
Copy link

@nkryuchkov nkryuchkov Jan 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we define that Alan roles are rejected during Boole and vice versa? (ssvlabs/ssv#2503 (comment))

Copy link

@iurii-ssv iurii-ssv Jan 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's kind of defined implicitly I think ?

  • the updated rule set contains RoleAggregatorCommittee but not RoleAggregator/RoleSyncCommitteeContribution
  • and although there is no explicit list of roles prior to this PR, if it were there - it would contain RoleAggregator/RoleSyncCommitteeContribution but not RoleAggregatorCommittee

But it would be nice for us devs to see "what changed" rather than trying to decipher the diff :) Maybe we could get that for the next fork ...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have a taks to migrate to spec repo...
We need to think about how to make it as easy as possible.

Maybe you guys canuse this thread to write recommendations about what you like/don't like in the current structure

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you guys canuse this thread to write recommendations about what you like/don't like in the current structure

Not strictly about the structure of these files, but I would think some sort of writeup in English about every rule added/changed/deleted (before vs after the fork) would be useful to have whenever we are doing these changes

Copilot AI review requested due to automatic review settings January 25, 2026 11:18
@GalRogozinski GalRogozinski dismissed stale reviews from iurii-ssv, dknopik, and nkryuchkov via 49f11a9 January 25, 2026 11:18
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Type PartialSigMsgType -> Message count rules
Slot phase0.Slot -> Must belong to allowed spread, Satisfies a maximum number of duties per epoch for role, Must not be "old"
Messages []*PartialSignatureMessage -> Valid number of signatures (3 cases: committee duty, sync committee contribution, others)
Messages []*PartialSignatureMessage -> Valid number of signatures (3 cases: committee duty, aggregator committee duty, others)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find what is written in parentehsis confusing?

Copy link
Contributor

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The list of changes from the SIP are hard to see here so I will be adding it to the description

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants