> 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/execution-layer-header-proof.md).

# Execution Layer Header Proof

All proofs are based on the correct blockhash of the execution block. In order to prove this blockhash the `ETH_EL_PROOF_UNION` offers four variants:

* `clProof`: a full consensus-layer proof of the EL header
* `sequencerProof`: a sequencer-signed execution payload (OP-Stack and other L2s)
* `witnessProof`: a list of witness signatures over the EL block hash ( not implemented yet )
* `cached`: a cached verified EL header, which simply means no proof, since the client already holds this verified EL header

The `clProof` is the most complete proof and is used to prove the EL header. The `sequencerProof` is used to prove the execution payload of an OP-Stack or other L2. The `witnessProof` is used to prove the EL block hash with a list of witness signatures.

## EthWitnessHeaderProof

Witness-signed EL header. `keccak256(elHeader)` is the blockHash that each witness signed. The header is otherwise unauthenticated until those signatures are checked against configured witness keys (not implemented yet).

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#L257).

```python
class EthWitnessHeaderProof(Container):
    elHeader  : ProgBytes                      # RLP-serialized execution-layer header
    witnesses : List [EthBlockhashWitness, 16] # cap 16 is the product allow-list size, not an encoding limit
```

**Referenced Types**

* [EthBlockhashWitness](#ethblockhashwitness)

## EthBlockhashWitness

One witness attestation of `keccak256(elHeader)`. `address` is the claimed signer; `signature` is secp256k1 (r, s, v). Verification (ecrecover + allow-list) is reserved for a later release.

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#L248).

```python
class EthBlockhashWitness(Container):
    address   : Address         # claimed signer (must match ecrecover of signature)
    signature : ByteVector [65] # secp256k1 signature over keccak256(elHeader)
```

## EthSequencerProof

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#L240).

```python
class EthSequencerProof(Container):
    payload   : Union [         # execution payload (compressed or uncompressed)
        Bytes[1073741824],      # ZSTD-compressed prefixed execution payload
        Bytes[1073741824]]      # uncompressed prefixed execution payload
    signature : ByteVector [65] # sequencer secp256k1 signature (r, s, v)
```
