Merge pull request #3680 from ethereum/validator-guide-aggregate

Use validator guide `compute_on_chain_aggregate` in testing
This commit is contained in:
Alex Stokes 2024-04-17 14:07:53 -06:00 committed by GitHub
commit b02be79a05
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 58 deletions

View File

@ -66,7 +66,12 @@ def compute_on_chain_aggregate(network_aggregates: Sequence[Attestation]) -> Att
committee_flags = [(index in committee_indices) for index in range(0, MAX_COMMITTEES_PER_SLOT)]
committee_bits = Bitvector[MAX_COMMITTEES_PER_SLOT](committee_flags)
return Attestation(aggregation_bits, data, committee_bits, signature)
return Attestation(
aggregation_bits=aggregation_bits,
data=data,
committee_bits=committee_bits,
signature=signature,
)
```
#### Deposits

View File

@ -225,51 +225,6 @@ def get_valid_attestations_at_slot(state, spec, slot_to_attest, participation_fn
)
def _get_aggregate_committee_indices(spec, attestations):
"""
Aggregate all unique committee indices from the given attestations.
"""
all_committee_indices = set()
for attestation in attestations:
committee_indices = spec.get_committee_indices(attestation.committee_bits)
assert len(committee_indices) == 1
all_committee_indices.add(committee_indices[0])
return all_committee_indices
def _aggregate_aggregation_bits_and_signatures(spec, state, slot, aggregate, attestations):
"""
Aggregate the aggregation bits and signatures from the attestations,
incorporating the calculation of aggregation bits offset directly.
"""
# initialize aggregation bits for the aggregate attestation
aggregate.aggregation_bits = get_empty_eip7549_aggregation_bits(
spec, state, aggregate.committee_bits, slot)
signatures = []
offset = 0
attestations = sorted(attestations, key=lambda att: spec.get_committee_indices(att.committee_bits)[0])
for attestation in attestations:
# retrieve the single committee index for the attestation.
committee_index = spec.get_committee_indices(attestation.committee_bits)[0]
# update the aggregate's aggregation bits based on each attestation.
for i, bit in enumerate(attestation.aggregation_bits):
aggregate.aggregation_bits[offset + i] = bit
# collect signatures for aggregation.
signatures.append(attestation.signature)
# update offset
committee = spec.get_beacon_committee(state, slot, committee_index)
offset += len(committee)
# aggregate signatures from all attestations.
aggregate.signature = bls.Aggregate(signatures)
def get_valid_attestation_at_slot(state, spec, slot_to_attest, participation_fn=None, beacon_block_root=None):
"""
Return the aggregate attestation post Electra.
@ -282,19 +237,9 @@ def get_valid_attestation_at_slot(state, spec, slot_to_attest, participation_fn=
beacon_block_root=beacon_block_root,
))
if not attestations:
return None
raise Exception("No valid attestations found")
# initialize the aggregate attestation.
aggregate = spec.Attestation(data=attestations[0].data)
# fill in committee_bits
all_committee_indices = _get_aggregate_committee_indices(spec, attestations)
for committee_index in all_committee_indices:
aggregate.committee_bits[committee_index] = True
_aggregate_aggregation_bits_and_signatures(spec, state, slot_to_attest, aggregate, attestations)
return aggregate
return spec.compute_on_chain_aggregate(attestations)
def next_slots_with_attestations(spec,