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

EIP-7549: attestation pool #14121

Merged
merged 8 commits into from
Jun 25, 2024
Merged

EIP-7549: attestation pool #14121

merged 8 commits into from
Jun 25, 2024

Conversation

rkapka
Copy link
Contributor

@rkapka rkapka commented Jun 18, 2024

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 an Attestation/AttestationData or a result of calling hash.Proto on one of these two types. For all practical purposes, both HTR and hash.Proto are interchangeable. In fact, this PR abandons hash.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.

type Id struct {
	version int
	hash    [32]byte
}

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 always 0. 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 the NewId constructor function, set its committee index to the value from CommitteeBits and hash that copy.

Other than changes to how we key attestations, this PR extends the pool with two new functions:

  • AggregatedAttestationsBySlotIndexElectra
  • UnaggregatedAttestationsBySlotIndexElectra

@rkapka rkapka requested a review from a team as a code owner June 18, 2024 16:25
@rkapka rkapka requested review from nalepae, rauljordan and nisdas June 18, 2024 16:25
@rkapka rkapka changed the title Eip 7549 pool EIP-7549: attestation pool Jun 18, 2024
@rkapka rkapka marked this pull request as draft June 18, 2024 16:29
@rkapka rkapka added the Electra electra hardfork label Jun 18, 2024
@rkapka rkapka marked this pull request as ready for review June 19, 2024 14:07
@rkapka rkapka added the Ready For Review A pull request ready for code review label Jun 19, 2024
@james-prysm james-prysm requested review from potuz and prestonvanloon and removed request for rauljordan June 21, 2024 21:33
@rkapka rkapka added this pull request to the merge queue Jun 24, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jun 24, 2024
@rkapka rkapka added this pull request to the merge queue Jun 25, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Jun 25, 2024
@rkapka rkapka enabled auto-merge June 25, 2024 12:47
@rkapka rkapka added this pull request to the merge queue Jun 25, 2024
Merged via the queue into develop with commit b8aad84 Jun 25, 2024
16 of 17 checks passed
@rkapka rkapka deleted the eip-7549-pool branch June 25, 2024 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Electra electra hardfork Ready For Review A pull request ready for code review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants