Merge pull request #3680 from ethereum/validator-guide-aggregate
Use validator guide `compute_on_chain_aggregate` in testing
This commit is contained in:
commit
b02be79a05
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue