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..
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
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.
BeaconBlockHeader is passed because also need the slot in order to find out which period and which sync committee is used.
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