You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: specs/phase0/p2p-interface.md
+9-4Lines changed: 9 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -355,17 +355,20 @@ to subscribing nodes (typically validators) to be included in future blocks.
355
355
356
356
The following validations MUST pass before forwarding the `signed_aggregate_and_proof` on the network.
357
357
(We define the following for convenience -- `aggregate_and_proof = signed_aggregate_and_proof.message` and `aggregate = aggregate_and_proof.aggregate`)
358
+
-_[REJECT]_ The committee index is within the expected range -- i.e. `aggregate.data.index < get_committee_count_per_slot(state, aggregate.data.target.epoch)`.
358
359
-_[IGNORE]_`aggregate.data.slot` is within the last `ATTESTATION_PROPAGATION_SLOT_RANGE` slots (with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` allowance) --
359
360
i.e. `aggregate.data.slot + ATTESTATION_PROPAGATION_SLOT_RANGE >= current_slot >= aggregate.data.slot`
360
361
(a client MAY queue future aggregates for processing at the appropriate slot).
361
362
-_[REJECT]_ The aggregate attestation's epoch matches its target -- i.e. `aggregate.data.target.epoch ==
362
363
compute_epoch_at_slot(aggregate.data.slot)`
364
+
-_[REJECT]_ The number of aggregation bits matches the committee size -- i.e.
-_[REJECT]_ The aggregate attestation has participants --
367
+
that is, `len(get_attesting_indices(state, aggregate.data, aggregate.aggregation_bits)) >= 1`.
363
368
-_[IGNORE]_ A valid aggregate attestation defined by `hash_tree_root(aggregate.data)` whose `aggregation_bits` is a non-strict superset has _not_ already been seen.
364
369
(via aggregate gossip, within a verified block, or through the creation of an equivalent aggregate locally).
365
370
-_[IGNORE]_ The `aggregate` is the first valid aggregate received for the aggregator
366
371
with index `aggregate_and_proof.aggregator_index` for the epoch `aggregate.data.target.epoch`.
367
-
-_[REJECT]_ The attestation has participants --
368
-
that is, `len(get_attesting_indices(state, aggregate.data, aggregate.aggregation_bits)) >= 1`.
369
372
-_[REJECT]_`aggregate_and_proof.selection_proof` selects the validator as an aggregator for the slot --
370
373
i.e. `is_aggregator(state, aggregate.data.slot, aggregate.data.index, aggregate_and_proof.selection_proof)` returns `True`.
371
374
-_[REJECT]_ The aggregator's validator index is within the committee --
@@ -378,6 +381,8 @@ The following validations MUST pass before forwarding the `signed_aggregate_and_
378
381
(via both gossip and non-gossip sources)
379
382
(a client MAY queue aggregates for processing once block is retrieved).
380
383
-_[REJECT]_ The block being voted for (`aggregate.data.beacon_block_root`) passes validation.
384
+
-_[REJECT]_ The aggregate attestation's target block is an ancestor of the block named in the LMD vote -- i.e.
@@ -425,7 +430,7 @@ The `beacon_attestation_{subnet_id}` topics are used to propagate unaggregated a
425
430
to the subnet `subnet_id` (typically beacon and persistent committees) to be aggregated before being gossiped to `beacon_aggregate_and_proof`.
426
431
427
432
The following validations MUST pass before forwarding the `attestation` on the subnet.
428
-
-_[REJECT]_ The committee index is within the expected range -- i.e. `data.index < get_committee_count_per_slot(state, data.target.epoch)`.
433
+
-_[REJECT]_ The committee index is within the expected range -- i.e. `attestation.data.index < get_committee_count_per_slot(state, attestation.data.target.epoch)`.
429
434
-_[REJECT]_ The attestation is for the correct subnet --
430
435
i.e. `compute_subnet_for_attestation(committees_per_slot, attestation.data.slot, attestation.data.index) == subnet_id`,
431
436
where `committees_per_slot = get_committee_count_per_slot(state, attestation.data.target.epoch)`,
@@ -439,7 +444,7 @@ The following validations MUST pass before forwarding the `attestation` on the s
439
444
-_[REJECT]_ The attestation is unaggregated --
440
445
that is, it has exactly one participating validator (`len([bit for bit in attestation.aggregation_bits if bit]) == 1`, i.e. exactly 1 bit is set).
441
446
-_[REJECT]_ The number of aggregation bits matches the committee size -- i.e.
0 commit comments