Skip to main content

Overview

A Starknet block is a list of transactions and a block header that contains multiple fields, including the hash of the previous block and a commitment to their state diff, as well as commitments to the transactions, events, and receipts it includes.

Block header fields

Block hash

A block hash is defined by:
Where:
  • h is the Poseidon hash function
  • transaction_count || event_count || state_diff_length || l1_da_mode is the concatenation of the 64-bit representations of transaction_count, event_count, and state_diff_length with 0 if l1_da_mode is CALLDATA and 1 if l1_da_mode is BLOB
  • gas_prices_hash is defined by:
    where h is the Poseidon hash function and l1_gas_price_wei, l1_gas_price_fri, l1_data_gas_price_wei, l1_data_gas_price_fri, l2_gas_price_wei, and l2_gas_price_fri are the wei and fri denominated prices for the three resource types.
For a reference implementation, see block_hash_calculator.rs in the Starknet sequencer’s GitHub repository

State diff commitment

The state diff commitment is defined by:
Where:
  • h is the Poseidon hash function
  • 1 and 0 are placeholders that may be used in the future
  • ci,ki,1, vi,1, … , ki,mi,vi,mi are mi updates (ki,1, vi,1), … ,(ki,mi, vi,mi) to contract addresses ci

Transactions, events, and receipts commitments

The commitment to transactions, the commitment to events and the commitment to receipts are all roots of height-64 binary Merkle Patricia tries where the leaf at index i corresponds to:
  • For transactions: h(transaction_hash, signature) for the i’th transaction included in the block, where h is the Poseidon hash function. Note that the signature is itself a (possibly empty) array of field elements.
  • For events: The event hash of the i’th emitted event included in the block
  • For receipts: The receipt hash of the i’th transaction receipt included in the block

Event hash

The hash of an event emitted by a contract whose address is emitter_address and a transaction whose hash is tx_hash is defined by:
Where h is the Poseidon hash function.

Receipt hash

The hash of a transaction receipt is defined by:
Where:
  • h is the Poseidon hash function
  • h(messages) for messages = (from1, to1, payload1), … , (fromn, ton, payloadn) is defined by: