> 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/proofs/account-proof.md).

# Account Proof

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

1. **Execution Block:** The execution block is verified via `ETH_EL_PROOF_UNION` (`c4_verify_block`). This yields a verified RLP EL header and its keccak `blockHash`.
2. **Account Inclusion:** A Patricia Merkle proof against the header's `stateRoot` delivers the account object (`nonce`, `balance`, `storageRoot`, `codeHash`). Equivalent to the data returned by `eth_getProof`.
3. **Storage Inclusion:** Each requested storage key has its own Patricia Merkle proof against the account's `storageRoot`. The value is the leaf of that proof.

![](https://1306347641-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhWyjkndFSkqQ8UEoWFD1%2Fuploads%2Fgit-blob-8eca2b4797f17a2c17bdaecf1cf2c720068d6d5f%2Fmermaid_3ebf4199.png?alt=media)

This Proof is used for the following RPC-Methods:

* [eth\_getProof](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-proof)
* [eth\_getBalance](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-balance)
* [eth\_getCode](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-code)
* [eth\_getTransactionCount](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-transaction-count)
* [eth\_getStorageAt](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-storage-at)
* [eth\_getProof](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-get-proof)
* [eth\_getBalance](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-get-balance)
* [eth\_getCode](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-get-code)
* [eth\_getTransactionCount](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-get-transaction-count)
* [eth\_getStorageAt](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-get-storage-at)

## EthAccountProof

The main proof data for an account.

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

```python
class EthAccountProof(Container):
    accountProof : ProgList [bytes_1024]      # Patricia merkle proof
    address      : Address                    # the address of the account
    storageProof : ProgList [EthStorageProof] # the storage proofs of the selected
    elProof      : Union [                    # EL header proof of the account
        Bytes32,                              # 0: cached: verifier already holds this verified EL header
        EthClHeaderProof,                     # 1: full consensus-layer proof of the EL header
        EthSequencerProof,                    # 2: sequencer-signed execution payload (OP-Stack)
        EthWitnessHeaderProof]                # 3: reserved; c4_verify_block rejects until ecrecover+allow-list exist
```

**Referenced Types**

* [EthStorageProof](#ethstorageproof)
* [EthClHeaderProof](/specification-colibri-stateless/specifications/ethereum/proofs/consensus-layer-header-proof.md#ethclheaderproof)
* [EthSequencerProof](/specification-colibri-stateless/specifications/ethereum/proofs/execution-layer-header-proof.md#ethsequencerproof)
* [EthWitnessHeaderProof](/specification-colibri-stateless/specifications/ethereum/proofs/execution-layer-header-proof.md#ethwitnessheaderproof)

## 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](https://github.com/corpus-core/colibri-stateless/blob/dev/src/chains/eth/ssz/verify_proof_types.h#L493).

```python
class EthStorageProof(Container):
    key   : Bytes32               # the key to be proven
    proof : ProgList [bytes_1024] # Patricia merkle proof
```

## 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](https://github.com/corpus-core/colibri-stateless/blob/dev/src/chains/eth/ssz/verify_data_types.h#L259).

```python
class EthProofData(Container):
    address      : Address                        # the account address (per JSON-RPC spec)
    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 : ProgList [bytesList]           # Patricia Merkle proof for the account (from state root to account)
    storageProof : ProgList [EthStorageProofData] # the storage proofs for requested storage keys
```

**Referenced Types**

* [EthStorageProofData](#ethstorageproofdata)

## 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](https://github.com/corpus-core/colibri-stateless/blob/dev/src/chains/eth/ssz/verify_data_types.h#L248).

```python
class EthStorageProofData(Container):
    key   : Bytes32              # the key
    value : Uint256              # the value (QUANTITY per RPC spec)
    proof : ProgList [bytesList] # Patricia merkle proof (simplified)
```
