> For the complete documentation index, see [llms.txt](https://corpus-core.gitbook.io/specification-colibri-stateless/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://corpus-core.gitbook.io/specification-colibri-stateless/specifications/ethereum/call-proof.md).

# Call Proof

`eth_call` returns the result of a smart contract call. To verify that this result is correct, every referenced account, contract code, and storage value must be validated against the canonical chain state.

1. **Execution-Layer Proof** A **Patricia Merkle Proof** is constructed for each involved account and all accessed storage values in the execution layer. For every account, this includes the `balance`, `nonce`, `codeHash`, and `storageRoot`, as well as the specific storage slots read or modified during the call. Each of these elements is verified through its corresponding Merkle proof, resulting in a verified **stateRoot** for the execution block. (Equivalent to the combined data returned by `eth_getProof` for all accounts and storage keys involved.)
2. **State Proof** An **SSZ Merkle Proof** connects the `stateRoot` of the execution layer to the **ExecutionPayload**, and continues through the **BeaconBlockBody** to its root hash, which is referenced in the **BeaconBlockHeader**.
3. **Consensus Reference** The **BeaconBlockHeader** is included in the proof to provide the `slot` information. This determines which sync committee is 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` that includes the block hash. The signing domain is derived from the fork version and the **Genesis Validator Root**, confirming that the block and its execution state belong to the canonical chain.

The **Call Proof** provides full verifiability of `eth_call` results by cryptographically proving all involved account and storage states without reliance on any RPC provider.

![](/files/8jWi1fsOsqwzqKtdl2e1)

This Proof is used for the following RPC-Methods:

* [eth\_call](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-call) Freshness gate for `"latest"` proofs (shared by all block-tag methods) message.start/len spans the JSON string token (incl. quotes); a substring search is sufficient to recognise the oblivious node's availability signal. ETH\_OBLIVIOUS
* [eth\_estimateGas](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-estimate-gas)
* [colibri\_simulateTransaction](/specification-colibri-stateless/specifications/ethereum/colibri-rpc-methods/colibri_simulatetransaction.md)
* [eth\_createAccessList](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-create-access-list)
* [eth\_call](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-call)
* [eth\_createAccessList](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-create-access-list)
* [eth\_estimateGas](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-estimate-gas)

## EthCallAccount

A proof for a single account.

The Type is defined in [src/chains/eth/ssz/verify\_proof\_types.h](https://github.com/corpus-core/colibri-stateless/blob/v2.0.4/src/chains/eth/ssz/verify_proof_types.h#L574).

```python
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**

* [EthStorageProof](/specification-colibri-stateless/specifications/ethereum/account-proof.md#ethstorageproof)

## EthCallProof

The main proof data for a call.

The Type is defined in [src/chains/eth/ssz/verify\_proof\_types.h](https://github.com/corpus-core/colibri-stateless/blob/v2.0.4/src/chains/eth/ssz/verify_proof_types.h#L583).

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

**Referenced Types**

* [EthCallAccount](#ethcallaccount)
* [EthStateProof](/specification-colibri-stateless/specifications/ethereum/account-proof.md#ethstateproof)
