Receipt Proof

A Receipt Proof represents the cryptographic verification of a transaction receipt and its inclusion within the canonical blockchain structure.

  1. Receipt Merkle Proof: All transaction receipts of an execution block are serialized into a Patricia Merkle Trie. A Merkle proof is generated for the requested receipt, demonstrating its inclusion in the block’s receiptsRoot.

  2. Transaction–Receipt Association: The payload of the transaction is used to compute its SSZ hash tree root derived from the corresponding BeaconBlock. This step ensures that the receipt is cryptographically linked to the correct transaction hash.

  3. Execution Payload Proof: An SSZ multi–Merkle proof is then created, connecting the transactions, receipts, blockNumber, and blockHash fields within the ExecutionPayload to the blockBodyRoot. The total proof depth for this structure is 29.

  4. Consensus Reference: The BeaconBlockHeader is included in the proof to provide the slot information. This slot determines which sync committee is responsible for signing the corresponding block root.

  5. Sync Committee Signature: Finally, the BLS aggregate signature from the sync committee of the following block is verified. The signature covers the block root as part of the SignData, with the signing domain derived from the fork version and the Genesis Validator Root. Successful signature verification confirms that the block—and thus the contained receipt—is part of the canonical chain.

This Proof is used for the following RPC-Methods:

EthReceiptProof

The main proof data for a receipt.

The Type is defined in src/chains/eth/ssz/verify_proof_types.h.

class EthReceiptProof(Container):
    transaction      : Bytes[1073741824]     # the raw transaction payload
    transactionIndex : Uint32                # the index of the transaction in the block
    blockNumber      : Uint64                # the number of the execution block containing the transaction
    blockHash        : Bytes32               # the blockHash of the execution block containing the transaction
    receipt_proof    : List [bytes_1024, 64] # the Merklr Patricia Proof of the transaction receipt ending in the receipt root
    block_proof      : List [bytes32, 64]    # the multi proof of the transaction, receipt_root,blockNumber and blockHash
    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

EthReceiptData

Container type for log entries in transaction receipts The transaction receipt data as returned by eth_getTransactionReceipt.

The Type is defined in src/chains/eth/ssz/verify_data_types.h.

class EthReceiptData(Container):
    _optmask              : Uint32                        # bitmask defining the properties shown in json
    blockHash             : Bytes32                       # the blockHash of the execution block containing the transaction
    blockNumber           : Uint64                        # the number of the execution block containing the transaction
    transactionHash       : Bytes32                       # the hash of the transaction
    transactionIndex      : Uint32                        # the index of the transaction in the block
    type                  : Uint8                         # the type of the transaction
    from                  : Address                       # the sender of the transaction
    to                    : Bytes[20]                     # the target of the transaction
    cumulativeGasUsed     : Uint64                        # the cumulative gas used
    gasUsed               : Uint64                        # the gas address of the created contract
    logs                  : List [EthReceiptDataLog, 256] # the logs of the transaction
    logsBloom             : ByteVector [256]              # the bloom filter of the logs
    status                : Uint8                         # the status of the transaction
    effectiveGasPrice     : Uint64                        # the effective gas price of the transaction
    depositNonce          : Uint64                        # the deposit nonce of the transaction
    depositReceiptVersion : Uint32                        # the deposit receipt version of the transaction

Referenced Types

Last updated