# Transaction Proof

A Transaction Proof represents the verification of a specific transaction and its inclusion within a verified execution block.

1. Transaction Payload Root: The payload of the transaction is used to compute its SSZ hash tree root, establishing a deterministic reference to the transaction within the block.
2. Execution Payload Proof: An SSZ Merkle proof links the transactions field of the ExecutionPayload to the blockBodyRoot. The total proof depth for this structure is 29.
3. Consensus Reference: The BeaconBlockHeader is included in the proof to provide the slot information, which determines the sync committee period responsible for signing the corresponding block root.
4. Sync Committee Signature: The BLS aggregate signature from the sync committee of the following block is verified against the SignData containing the block hash. The signing domain is derived from the fork version and the Genesis Validator Root, ensuring that the transaction originates from a block that is part of the canonical chain.

The Transaction Proof confirms the inclusion and authenticity of a transaction without requiring full synchronization with the blockchain state.

![](/files/KbqgJau4SeOKDOvVDBCr)

This Proof is used for the following RPC-Methods:

* [eth\_getTransactionByHash](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-transaction-by-hash)
* [eth\_getTransactionByBlockHashAndIndex](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-transaction-by-block-hash-and-index)
* [eth\_getTransactionByBlockNumberAndIndex](https://www.alchemy.com/docs/node/ethereum/ethereum-api-endpoints/eth-get-transaction-by-block-number-and-index)

## EthTransactionProof

The main proof data for a single transaction.

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

```python
class EthTransactionProof(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
    baseFeePerGas    : Uint64             # the baseFeePerGas
    proof            : List [bytes32, 64] # the multi proof of the transaction, 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**

* [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)

## EthAccessListData

These masks control which optional fields are included in simulation results. They are used with the \_optmask field in SSZ containers to enable/disable specific fields. Log field masks for ETH\_SIMULATION\_LOG anonymous field (i=1) inputs field (i=2) name field (i=3) raw field (i=4) all fields for testing only raw log data decodedInput field (i=1) decodedOutput field (i=2) from field (i=3) gas field (i=4) gasUsed field (i=5) input field (i=6) method field (i=7) output field (i=8) subtraces field (i=9) to field (i=10) traceAddress field (i=11) type field (i=12) value field (i=13) all fields for testing no trace fields (empty) blockNumber field (i=1) cumulativeGasUsed field (i=2) gasUsed field (i=3) logs field (i=4) logsBloom field (i=5) status field (i=6) trace field (i=7) type field (i=8) returnValue field (i=9) stateChanges field (i=10) all fields for testing essential fields only clean output: gasUsed, logs, status, returnValue (no logsBloom, no type) Entry in the access list of a transaction or call.

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

```python
class EthAccessListData(Container):
    address     : Address             # the address in the access list
    storageKeys : List [bytes32, 256] # the storage keys accessed at this address
```

## EthAuthorizationListData

Container type for access list entries Entry in the authorization list of a transaction or call.

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

```python
class EthAuthorizationListData(Container):
    address : Address # the codebase to be used for the authorization
    chainId : Uint32  # the chainId of the transaction
    nonce   : Uint64  # nonce of the transaction
    r       : Bytes32 # the r value of the transaction
    s       : Bytes32 # the s value of the transaction
    yParity : Uint8   # the yParity of the transaction
```

## EthTxData

Container type for authorization list entries (EIP-7702) The transaction data as result of an eth\_getTransactionByHash rpc-call. Supports all transaction types including Optimism Deposited Transactions (0x7E).

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

```python
class EthTxData(Container):
    _optmask              : Uint32                               # the bitmask defining the fields to be included
    blockHash             : Bytes32                              # the blockHash of the execution block containing the transaction
    blockNumber           : Uint64                               # the number of the execution block containing the transaction
    hash                  : Bytes32                              # the blockHash of the execution block containing the transaction
    transactionIndex      : Uint32                               # the index of the transaction in the block
    type                  : Uint8                                # the type of the transaction
    nonce                 : Uint64                               # the nonce of the transaction
    input                 : Bytes[1073741824]                    # the raw transaction payload
    r                     : Bytes32                              # the r value of the transaction
    s                     : Bytes32                              # the s value of the transaction signature
    chainId               : Uint32                               # the chain ID of the transaction
    v                     : Uint64                               # the v value of the transaction signature
    gas                   : Uint64                               # the gas limit
    from                  : Address                              # the sender of the transaction
    to                    : NullableBytes[20]                    # the target of the transaction
    value                 : Uint256                              # the value of the transaction
    gasPrice              : Uint64                               # the gas price of the transaction
    maxFeePerGas          : Uint64                               # the maxFeePerGas of the transaction
    maxPriorityFeePerGas  : Uint64                               # the maxPriorityFeePerGas of the transaction
    accessList            : List [EthAccessListData, 256]        # the access list of the transaction
    authorizationList     : List [EthAuthorizationListData, 256] # the authorization list of the transaction (EIP-7702)
    blobVersionedHashes   : List [bytes32, 16]                   # the blobVersionedHashes of the transaction
    yParity               : Uint8                                # the yParity of the transaction
    sourceHash            : Bytes32                              # unique identifier for deposit origin (OP Stack only)
    mint                  : Uint256                              # ETH value to mint on L2 (OP Stack only) - rendered as uint
    isSystemTx            : Boolean                              # system transaction flag as bytes (OP Stack only) - rendered as uint
    depositReceiptVersion : Uint8                                # deposit receipt version (OP Stack only) - rendered as uint
```

**Referenced Types**

* [EthAccessListData](#ethaccesslistdata)
* [EthAuthorizationListData](#ethauthorizationlistdata)


---

# 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/transaction-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.
