# Ethereum Main Proof Request

The proofs are always wrapped into a ssz-container with the name `C4Request`. This Container holds the a version (4 bytes) and unions for different proof types.

The 4 `Version` Bytes are encoded as `dom, major, minor, patch`.

* 0 : `domain` . describe which chain-type is used. 1 = ethereum
* 1 : `major` . the major version of the prover.
* 2 : `minor` . the minor version of the prover.
* 3 : `patch` . the patch version of the prover.

The `data` union can hold different types which represents the final data to be verified.

The `proof` union can hold different types which represents the proof of the data.

The `sync_data` union holds optional data used to update the sync\_committee. Most of the time, this is empty since syncing the pubkey only is used whenever it is needed. But the structure allows to include those sync\_proofs enabling a fully stateless proof.

## C4Request

the main container defining the incoming data processed by the verifier

The Type is defined in [src/chains/eth/ssz/verify\_types.c](https://github.com/corpus-core/colibri-stateless/blob/v1.1.26/src/chains/eth/ssz/verify_types.c#L124).

```python
class C4Request(Container):
    version   : ByteVector [4]          # the [domain, major, minor, patch] version of the request, domain=1 = eth
    data      : Union [                 # the data to proof
        None,                           # 
        Bytes32,                        # the blockhash  which is used for blockhash proof
        Bytes[1073741824],              # the bytes of the data
        Uint256,                        # the balance of an account
        EthTxData,                      # the transaction data
        EthReceiptData,                 # the transaction receipt
        List [EthReceiptDataLog, 1024], # result of eth_getLogs
        EthBlockData,                   # the block data
        EthProofData,                   # the result of an eth_getProof
        EthSimulationResult,            # the result of an colibri_simulateTransaction
        EthBlockHeaderData,             # compact block header data
        List [EthReceiptData, 2048]]    # all receipts of a block
    proof     : Union [                 # the proof of the data
        None,                           # 
        EthAccountProof,                # 1: a Proof of an Account like eth_getBalance or eth_getStorageAt
        EthTransactionProof,            # 2: a Proof of a Transaction like eth_getTransactionByHash
        EthReceiptProof,                # 3: a Proof of a TransactionReceipt
        List [EthLogsBlock, 256],       # 4: a Proof for multiple Receipts and txs
        EthCallProof,                   # 5: a Proof of a Call like eth_call
        EthSyncProof,                   # 6: Proof as input data for the sync committee transition used by zk
        EthBlockProof,                  # 7: Proof for BlockData
        EthBlockNumberProof,            # 8: Proof for BlockNumber
        C4WitnessSigned,                # 9: Proof for Witness
        EthBlockHeaderProof,            # 10: Proof for compact BlockHeader
        EthBlockReceiptsProof,          # 11: Proof for all block receipts
        EthHybridAccountProof,          # 12: Hybrid account proof with embedded header_data
        EthHybridTransactionProof,      # 13: Hybrid tx proof (SSZ branch + header_data)
        EthHybridReceiptProof,          # 14: Hybrid receipt proof (Patricia + header_data)
        List [EthHybridLogsBlock, 256], # 15: Hybrid logs proof with embedded header_data per block
        EthHybridCallProof,             # 16: Hybrid call proof with embedded header_data
        EthHybridBlockProof,            # 17: Hybrid block proof (EP only)
        EthHybridBlockHeaderProof,      # 18: Hybrid block header/number proof (header_data only)
        EthHybridBlockReceiptsProof]    # 19: Hybrid block receipts proof (header_data only)
    sync_data : Union [                 # the sync data containing proofs for the transition between the two periods
        None,                           # 
        C4EthLcSyncdata,                # Light Client Sync Data
        C4EthZkSyncdata]                # ZK Proof Sync Data
```

**Referenced Types**

* [EthTxData](/specification-colibri-stateless/specifications/ethereum/transaction-proof.md#ethtxdata)
* [EthReceiptData](/specification-colibri-stateless/specifications/ethereum/receipt-proof.md#ethreceiptdata)
* [EthReceiptDataLog](/specification-colibri-stateless/specifications/ethereum/logs-proof.md#ethreceiptdatalog)
* [EthBlockData](/specification-colibri-stateless/specifications/ethereum/block-proof.md#ethblockdata)
* [EthProofData](/specification-colibri-stateless/specifications/ethereum/account-proof.md#ethproofdata)
* [EthSimulationResult](/specification-colibri-stateless/specifications/ethereum/colibri-rpc-methods/colibri_simulatetransaction.md#ethsimulationresult)
* [EthBlockHeaderData](/specification-colibri-stateless/specifications/ethereum/block-proof.md#ethblockheaderdata)
* [EthAccountProof](/specification-colibri-stateless/specifications/ethereum/account-proof.md#ethaccountproof)
* [EthTransactionProof](/specification-colibri-stateless/specifications/ethereum/transaction-proof.md#ethtransactionproof)
* [EthReceiptProof](/specification-colibri-stateless/specifications/ethereum/receipt-proof.md#ethreceiptproof)
* [EthLogsBlock](/specification-colibri-stateless/specifications/ethereum/logs-proof.md#ethlogsblock)
* [EthCallProof](/specification-colibri-stateless/specifications/ethereum/call-proof.md#ethcallproof)
* [EthSyncProof](/specification-colibri-stateless/specifications/ethereum/sync-proof.md#ethsyncproof)
* [EthBlockProof](/specification-colibri-stateless/specifications/ethereum/block-proof.md#ethblockproof)
* [EthBlockNumberProof](/specification-colibri-stateless/specifications/ethereum/block-proof.md#ethblocknumberproof)
* C4WitnessSigned
* [EthBlockHeaderProof](/specification-colibri-stateless/specifications/ethereum/block-proof.md#ethblockheaderproof)
* [EthBlockReceiptsProof](/specification-colibri-stateless/specifications/ethereum/block-receipts-proof.md#ethblockreceiptsproof)
* [EthHybridAccountProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridaccountproof)
* [EthHybridTransactionProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridtransactionproof)
* [EthHybridReceiptProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridreceiptproof)
* [EthHybridLogsBlock](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridlogsblock)
* [EthHybridCallProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridcallproof)
* [EthHybridBlockProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridblockproof)
* [EthHybridBlockHeaderProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridblockheaderproof)
* [EthHybridBlockReceiptsProof](/specification-colibri-stateless/specifications/ethereum/hybrid-proof-types.md#ethhybridblockreceiptsproof)
* [C4EthLcSyncdata](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/synccommittee.md#c4ethlcsyncdata)
* [C4EthZkSyncdata](/specification-colibri-stateless/specifications/ethereum/synccommittee-proof.md#c4ethzksyncdata)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://corpus-core.gitbook.io/specification-colibri-stateless/specifications/ethereum/ethereum-main-proof-request.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
