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:

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.

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

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.

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

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.

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

Last updated