Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new gossip rule to REJECT sidecars with index >= MAX_BLOBS_PER_BLOCK #3525

Merged
merged 2 commits into from
Oct 18, 2023

Conversation

tbenr
Copy link
Contributor

@tbenr tbenr commented Oct 18, 2023

Introduce a new rule to avoid propagation of sidecars that have an index >= MAX_BLOBS_PER_BLOCK.
Current rules allow proposer to publish an unbounded number of sidecars that will be accepted by clients.

@@ -149,6 +149,7 @@ This topic is used to propagate signed blob sidecars, where each blob index maps
The following validations MUST pass before forwarding the `signed_blob_sidecar` on the network, assuming the alias `sidecar = signed_blob_sidecar.message`:

- _[REJECT]_ The sidecar is for the correct subnet -- i.e. `compute_subnet_for_blob_sidecar(sidecar.index) == subnet_id`.
- _[REJECT]_ The sidecar's index is consistent with `MAX_BLOBS_PER_BLOCK` -- i.e. `sidecar.index < MAX_BLOBS_PER_BLOCK`.
Copy link
Contributor

Choose a reason for hiding this comment

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

actualy the previous check itself assures that this is not unbounded : compute_subnet_for_blob_sidecar(sidecar.index) == subnet_id so this is a redundant check

Copy link
Contributor

@StefanBratanov StefanBratanov Oct 18, 2023

Choose a reason for hiding this comment

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

Not true though because compute_subnet_for_blob_sidecar calculates the subnet_id using mod BLOB_SIDECAR_SUBNET_COUNT, so for example for subnet 4 and index 100, compute_subnet_for_blob_sidecar(100) == 4 thus valid according to the rule.

Copy link
Contributor

@g11tech g11tech Oct 18, 2023

Choose a reason for hiding this comment

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

ahh in that case do we want it to be hardfork independent MAX_BLOB_COMMITMENTS_PER_BLOCK or MAX_BLOBS_PER_BLOCK? (although the tighter bound of max blobs per block makes sense)

Copy link
Contributor

Choose a reason for hiding this comment

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

I believe @tbenr and @StefanBratanov are correct and that this should be bounded

There is an equivalent condition for beacon_attestation subnets here -- https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#beacon_attestation_subnet_id

REJECT] The committee index is within the expected range -- i.e. data.index < get_committee_count_per_slot(state, data.target.epoch)

I would argue that this should be the first condition -- before the second condition that calls compute_subnet_for_blob_side_car. Tossing out junk first (and mirroring the order in the attestation subnet)

Copy link
Contributor Author

@tbenr tbenr Oct 19, 2023

Choose a reason for hiding this comment

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

I would argue that this should be the first condition ...

True, we could save the function call but currently computes just a modulo.
Teku will perform this in this order in any case because we do the subnet_id check closer to the networking layer and the actual gossip validation runs on top of it.

g11tech

This comment was marked as outdated.

Copy link
Contributor

@g11tech g11tech left a comment

Choose a reason for hiding this comment

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

redundant check already enforced by subnet id check

@djrtwo djrtwo mentioned this pull request Oct 18, 2023
4 tasks
Copy link
Contributor

@djrtwo djrtwo left a comment

Choose a reason for hiding this comment

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

I"m going to get this into the release today

@djrtwo djrtwo merged commit 1e552f1 into ethereum:dev Oct 18, 2023
26 checks passed
@djrtwo
Copy link
Contributor

djrtwo commented Oct 18, 2023

Thanks @tbenr for finding this!

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.

7 participants