Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
Feature
What does this PR do? Why is it needed?
This PR produces necessary changes to the attestation pool in order to extend it to Electra.
Currently attestations are keyed in the pool using
[32]byte
, which is an HTR of anAttestation
/AttestationData
or a result of callinghash.Proto
on one of these two types. For all practical purposes, both HTR andhash.Proto
are interchangeable. In fact, this PR abandonshash.Proto
and uses HTR everywhere for uniformity.We want to separate Phase0 and Electra attestations so that we don't mix them together in operations. An obvious solution is to key by version on top of the hash. We create an
Id
type and use it as the key in all attestation maps.This is sufficient for hashing full attestations, but not for attestation data (at least not without some additional work). In Electra committee index is stored in a new
CommitteeBits
field and the committee index of attestation data is always0
. This means that two Electra attestations with a different committee index but the same (slot, beacon block root, source, target) tuple will have equal attestation data. To fix this, we make a copy of Electra attestation data in theNewId
constructor function, set its committee index to the value fromCommitteeBits
and hash that copy.Other than changes to how we key attestations, this PR extends the pool with two new functions:
AggregatedAttestationsBySlotIndexElectra
UnaggregatedAttestationsBySlotIndexElectra