Call Proof

eth_call returns the result of the call. In order to proof that the result is correct, we need to proof every single storage value and account..

  1. Patricia Merkle Proof for the Account Object in the execution layer (balance, nonce, codeHash, storageHash) and the storage values with its own Proofs. (using eth_getProof): Result StateRoot

  2. State Proof is a SSZ Merkle Proof from the StateRoot to the ExecutionPayload over the BeaconBlockBody to its root hash which is part of the header.

  3. BeaconBlockHeader is passed because also need the slot in order to find out which period and which sync committee is used.

  4. Signature of the SyncCommittee (taken from the following block) is used to verify the SignData where the blockhash is part of the message and the Domain is calculated from the fork and the Genesis Validator Root.

This Proof is used for the following RPC-Methods:

EthCallAccount

a proof for a single account.

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

class EthCallAccount(Container):
    accountProof : List [bytes_1024, 256]       # Patricia merkle proof
    address      : Address                      # the address of the account
    code         : Union [                      # the code of the contract
        Boolean,                                # no code delivered
        Bytes[4194304]]                         # the code of the contract
    storageProof : List [EthStorageProof, 4096] # the storage proofs of the selected

Referenced Types

EthCallProof

the main proof data for a call.

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

class EthCallProof(Container):
    accounts    : List [EthCallAccount, 256] # used accounts
    state_proof : EthStateProof              # the state proof of the account

Referenced Types

Last updated