EIP-7643: History accumulator for pre-PoS data

Commit to a single root for all block data before the merge.


Metadata
Status: DraftStandards Track: CoreCreated: 2024-02-29
Authors
lightclient (@lightclient), kdeme (@kdeme)

Abstract


Defines an SSZ object for accumulating all pre-PoS data and commit to the historical hashes accumulator's root 0xec8e040fd6c557b41ca8ddd38f7e9d58a9281918dc92bdb72342a38fb085e701.

Motivation


There are two main uses we consider for the historical hashes accumulator:

  • for users who wish to download the pre-PoS data for the execution chain and verify it without executing each block, they may simply compute each block hash, accumulate the epoch records, and then compare the local accumulator root with the expected value.
  • additionally, the accumulator root allows for O(log(n)) sized proofs to any pre-PoS block, whereas today to achieve something similar, one must recursively verify the header chain.

Specification


Historical Hashes Accumulator

The historical hashes accumulator commits to the set of pre-merge headers and their associated total difficulty. The format for this data is defined as:


Pre-PoS Root

The hash tree root of HistoricalHashesAccumulator for data before block 15537394 is 0xec8e040fd6c557b41ca8ddd38f7e9d58a9281918dc92bdb72342a38fb085e701.

Rationale


Inclusion of total difficulty

The total difficulty allowed so that clients may return the value for specific JSON-RPC methods which support it. It is also useful for verifying the TTD of the final proof-of-work block.

Backwards Compatibility


n/a

Test Cases



Security Considerations


The accumulator root should be verified by community members before being accepted. Although the accumulator root can be verified at anytime by anyone in the future, it is likely clients and other tooling will begin relying on proofs against the aforementioned root in the near term.

Copyright


Copyright and related rights waived via CC0.