# Block Proof

The **Block Proof** verifies that a specific block in the execution layer is valid and correctly referenced by the consensus layer (Beacon Chain).

1. **Execution Block Proof** A Merkle proof is generated for the block’s core fields (`blockNumber`, `blockHash`, `transactionsRoot`, `stateRoot`, `receiptsRoot`) within the **ExecutionPayload**. This ensures that all block data is included and consistent with the execution layer’s state.
2. **Payload–Header Link** An **SSZ Merkle Proof** connects the **ExecutionPayload** to the `blockBodyRoot`, and continues through the **BeaconBlockHeader**, proving that the execution block is part of the verified beacon block.
3. **Consensus Reference** The **BeaconBlockHeader** provides the `slot` context used to identify the correct sync committee for signature verification.
4. **Sync Committee Signature** The **BLS aggregate signature** from the sync committee of the **following block** is verified against the `SignData` that includes the beacon block root. The signing domain is derived from the fork version and the **Genesis Validator Root**, confirming that the block and its associated execution payload belong to the canonical chain.

The **Block Proof** thus establishes full trustless verification of an execution-layer block by cryptographically linking it to the verified consensus layer.

This Proof is used for the following RPC-Methods:

* [eth\_getBlockByHash](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-block-by-hash)
* [eth\_getBlockByNumber](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-block-by-number)
* [eth\_blockNumber](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-block-number)
* [eth\_getBlockHeader](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-block-header)
* [eth\_blobBaseFee](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-blob-base-fee)
* [eth\_maxPriorityFeePerGas](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-max-priority-fee-per-gas)
* [eth\_blobBaseFee](https://www.alchemy.com/docs/node/op-mainnet/op-mainnet-api-endpoints/eth-blob-base-fee)

## EthBlockProof

The stateRoot proof is used as part of different other types since it contains all relevant proofs to validate the stateRoot of the execution layer

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

```python
class EthBlockProof(Container):
    executionPayload : Union [             # the merkle prooof from the executionPayload.state down to the blockBodyRoot hash
        DenepExecutionPayload,             # DenepExecutionPayload
        GnosisExecutionPayload]            # GnosisExecutionPayload
    proof            : List [bytes32, 256] # the merkle prooof from the executionPayload.state down to the blockBodyRoot hash
    header           : BeaconBlockHeader   # the header of the beacon block
    header_proof     : Union [             # the proof for the correctness of the header
        EthSignatureBlockProof,            # proof fby provding signature of the sync_committee
        EthHistoricBlockProof,             # proof for a historic block using the state_root of a current block.
        EthHeadersBlockProof]              # proof block giving headers up to a verifyable header.
```

**Referenced Types**

* [DenepExecutionPayload](https://ethereum.github.io/consensus-specs/specs/deneb/beacon-chain/#executionpayload)
* GnosisExecutionPayload
* [BeaconBlockHeader](https://ethereum.github.io/consensus-specs/specs/phase0/beacon-chain/#beaconblockheader)
* [EthSignatureBlockProof](/specification-colibri-stateless/specifications/ethereum/header-proof.md#ethsignatureblockproof)
* [EthHistoricBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethhistoricblockproof)
* [EthHeadersBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethheadersblockproof)

## EthBlockNumberProof

for `eth_blockNumber` we need to proof the blocknumber and the timestamp of the latest block.

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

```python
class EthBlockNumberProof(Container):
    blockNumber  : Uint64              # the block number of the latest block
    timestamp    : Uint64              # the timestamp of the latest block
    proof        : List [bytes32, 256] # the multi merkle prooof from the executionPayload.blockNumber and executionPayload.timestamp  down to the blockBodyRoot hash
    header       : BeaconBlockHeader   # the header of the beacon block
    header_proof : Union [             # the proof for the correctness of the header
        EthSignatureBlockProof,        # proof fby provding signature of the sync_committee
        EthHistoricBlockProof,         # proof for a historic block using the state_root of a current block.
        EthHeadersBlockProof]          # proof block giving headers up to a verifyable header.
```

**Referenced Types**

* [BeaconBlockHeader](https://ethereum.github.io/consensus-specs/specs/phase0/beacon-chain/#beaconblockheader)
* [EthSignatureBlockProof](/specification-colibri-stateless/specifications/ethereum/header-proof.md#ethsignatureblockproof)
* [EthHistoricBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethhistoricblockproof)
* [EthHeadersBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethheadersblockproof)

## EthBlockHeaderProof

for `eth_getBlockHeader` we proof selected fields of the execution payload using a multi-merkle proof. The actual field values are carried in the data union (ETH\_BLOCK\_HEADER\_DATA), not in this proof container.

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

```python
class EthBlockHeaderProof(Container):
    proof        : List [bytes32, 256] # the multi merkle proof from the selected executionPayload fields down to the blockBodyRoot hash
    header       : BeaconBlockHeader   # the header of the beacon block
    header_proof : Union [             # the proof for the correctness of the header
        EthSignatureBlockProof,        # proof fby provding signature of the sync_committee
        EthHistoricBlockProof,         # proof for a historic block using the state_root of a current block.
        EthHeadersBlockProof]          # proof block giving headers up to a verifyable header.
```

**Referenced Types**

* [BeaconBlockHeader](https://ethereum.github.io/consensus-specs/specs/phase0/beacon-chain/#beaconblockheader)
* [EthSignatureBlockProof](/specification-colibri-stateless/specifications/ethereum/header-proof.md#ethsignatureblockproof)
* [EthHistoricBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethhistoricblockproof)
* [EthHeadersBlockProof](https://github.com/corpus-core/colibri-stateless-doc/blob/main/specification/specifications/ethereum/historic-block-proof.md#ethheadersblockproof)

## EthBlockData

Display the block data, which is based on the execution payload

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

```python
class EthBlockData(Container):
    _optmask              : Uint32                       # bitmask defining the properties shown in json
    number                : Uint64                       # the blocknumber
    hash                  : Bytes32                      # the blockhash
    transactions          : Union [                      # the transactions
        List [bytes32, 4096],                            # the transactions hashes
        List [EthTxData, 4096]]                          # the transactions data
    logsBloom             : ByteVector [256]             # the logsBloom
    receiptsRoot          : Bytes32                      # the receiptsRoot
    extraData             : Bytes[32]                    # the extraData
    withdrawalsRoot       : Bytes32                      # the withdrawalsRoot
    baseFeePerGas         : Uint256                      # the baseFeePerGas
    nonce                 : ByteVector [8]               # the nonce
    miner                 : Address                      # the miner
    withdrawals           : List [DenepWithdrawal, 4096] # the withdrawals
    excessBlobGas         : Uint64                       # the excessBlobGas
    difficulty            : Uint64                       # the difficulty
    gasLimit              : Uint64                       # the gasLimit
    gasUsed               : Uint64                       # the gasUsed
    timestamp             : Uint64                       # the timestamp
    mixHash               : Bytes32                      # the mixHash
    parentHash            : Bytes32                      # the parentHash
    uncles                : List [bytes32, 4096]         # the uncles (ommer block hashes)
    parentBeaconBlockRoot : Bytes32                      # the parentBeaconBlockRoot
    sha3Uncles            : Bytes32                      # the sha3Uncles of the uncles
    transactionsRoot      : Bytes32                      # the transactionsRoot
    stateRoot             : Bytes32                      # the stateRoot
    blobGasUsed           : Uint64                       # the gas used for the blob transactions
    requestsHash          : Bytes32                      # the requestHash ( eip-7685 )
```

**Referenced Types**

* [EthTxData](/specification-colibri-stateless/specifications/ethereum/transaction-proof.md#ethtxdata)

## EthBlockHeaderData

Compact block header data containing selected fields from the ExecutionPayload. Used by eth\_getBlockHeader, eth\_gasPrice, eth\_blobBaseFee, eth\_maxPriorityFeePerGas, and as a lightweight verified header cache for eth\_call privacy mode and log filters.

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

```python
class EthBlockHeaderData(Container):
    parentHash       : Bytes32          # the hash of the parent block
    stateRoot        : Bytes32          # the merkle root of the state at the end of the block
    receiptsRoot     : Bytes32          # the merkle root of the transaction receipts
    logsBloom        : ByteVector [256] # the bloom filter of the logs
    blockNumber      : Uint64           # the block number
    gasLimit         : Uint64           # the gas limit of the block
    gasUsed          : Uint64           # the gas used of the block
    timestamp        : Uint64           # the timestamp of the block
    baseFeePerGas    : Uint256          # the base fee per gas of the block
    blockHash        : Bytes32          # the hash of the block
    blobGasUsed      : Uint64           # the gas used for the blob transactions
    excessBlobGas    : Uint64           # the excess blob gas of the block
    feeRecipient     : Address          # the address of the fee recipient (coinbase)
    transactionsRoot : Bytes32          # ssz_hash_tree_root(transactions) -- NOT the EL Patricia root
```


---

# 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/block-proof.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.
