Account Proof

An Acccount Proof represents the account and storage values, including the Merkle proof, of the specified account.

  1. Execution-Layer Proof A Patricia Merkle Proof is constructed for the account object in the execution layer. This proof includes the account’s balance, nonce, codeHash, and storageRoot, as well as separate proofs for all accessed storage keys. The resulting root of this proof corresponds to the block’s stateRoot. (Equivalent to the data returned by eth_getProof.)

  2. State Proof An SSZ Merkle Proof links the stateRoot from the execution layer to the ExecutionPayload, and further through the BeaconBlockBody to its root hash, which is included in the BeaconBlockHeader.

  3. Consensus Reference The BeaconBlockHeader is included in the proof to provide the slot information, which identifies the sync committee period responsible for signing the corresponding block root.

  4. Sync Committee Signature The BLS aggregate signature from the sync committee of the following block is verified against the SignData containing the block hash. The signing domain is derived from the fork version and the Genesis Validator Root, confirming that the account data originates from a block included in the canonical chain.

This Proof is used for the following RPC-Methods:

EthStateProof

The stateRoot proof is used as part of different other types since it contains all relevant proofs to validate the stateRoot of the execution layer.

The Type is defined in src/chains/eth/ssz/verify_proof_types.h.

class EthStateProof(Container):
    block        : Union [             # the block to be proven
        None,                          # no block-proof for latest
        Bytes32,                       # proof for the right blockhash
        Uint64]                        # proof for the right blocknumber
    proof        : List [bytes32, 256] # the merkle prooof from the executionPayload.state down to the blockBodyRoot hash
    header       : BeaconBlockHeader   # the header of the beacon block
    header_proof : Union [             # the proof for the correctness of the header
        EthSignatureBlockProof,        # proof fby provding signature of the sync_committee
        EthHistoricBlockProof,         # proof for a historic block using the state_root of a current block.
        EthHeadersBlockProof]          # proof block giving headers up to a verifyable header.

Referenced Types

EthStorageProof

Represents the storage proof of a key. The value can be taken from the last entry, which is the leaf of the proof.

The Type is defined in src/chains/eth/ssz/verify_proof_types.h.

class EthStorageProof(Container):
    key   : Bytes32                 # the key to be proven
    proof : List [bytes_1024, 1024] # Patricia merkle proof

EthAccountProof

The main proof data for an account.

The Type is defined in src/chains/eth/ssz/verify_proof_types.h.

class EthAccountProof(Container):
    accountProof : List [bytes_1024, 256]      # Patricia merkle proof
    address      : Address                     # the address of the account
    storageProof : List [EthStorageProof, 256] # the storage proofs of the selected
    state_proof  : EthStateProof               # the state proof of the account

Referenced Types

EthStorageProofData

Represents the storage proof of a key. The value can be taken from the last entry, which is the leaf of the proof.

The Type is defined in src/chains/eth/ssz/verify_data_types.h.

class EthStorageProofData(Container):
    key   : Bytes32                # the key
    value : Bytes32                # the value
    proof : List [bytesList, 1024] # Patricia merkle proof (simplified)

EthProofData

Container type for storage proof data Account proof data as returned by eth_getProof. Contains the account state and Merkle proofs for account and storage values.

The Type is defined in src/chains/eth/ssz/verify_data_types.h.

class EthProofData(Container):
    balance      : Uint256                         # the account balance
    codeHash     : Bytes32                         # the hash of the contract code (empty for EOA)
    nonce        : Uint256                         # the account nonce
    storageHash  : Bytes32                         # the root hash of the storage trie
    accountProof : List [bytesList, 256]           # Patricia Merkle proof for the account (from state root to account)
    storageProof : List [EthStorageProofData, 256] # the storage proofs for requested storage keys

Referenced Types

Last updated