Block structure

In StarkNet, the block is defined as a list of transactions and a block header.

The following fields define the block header:

Name Type Description Implemented

`parent_block_hash`

`FieldElement`

The hash of this block’s parent

`block_number`

`Integer`

The number (height) of this block

`global_state_root`

`FieldElement`

The state commitment after this block

`sequencer_address`

`FieldElement`

The StarkNet address of the sequencer who created this block

`block_timestamp`

`Timestamp`

The time the sequencer created this block before executing transactions

`transaction_count`

`Integer`

The number of transactions in a block

`transaction_commitment`

`FieldElement`

A commitment to the transactions included in the block

`event_count`

`Integer`

The number of events

`event_commitment`

`FieldElement`

A commitment to the events produced in this block

`protocol_version`

`Integer`

The version of the StarkNet protocol used when creating this block

`extra data`

`FieldElement`

Extraneous data that might be useful for running transactions

 The commitment fields `transaction_commitment` and `event_commitment` are the roots of a height 64 binary Merkle Patricia tree. The leaf at index $i$ corresponds to the hash of the $i'th$ event/transaction.

Block hash

The block hash is defined as the Pedersen hash over the header’s elements.

\begin{aligned} h(B)=h(&\text{block_number}, \text{ global_state_root}, \text{ sequencer_address}, \text{ block_timestamp}, \\ &\text{transaction_count}, \text{ transaction_commitment}, \text{ event_count},\\ & \text{event_commitment}, 0, 0, \text{ parent_block_hash}) \end{aligned}

Where $h$ is the Pedersen hash.

 Zeroes inside the hash computation of an object are used as placeholders, to be replaced in the future by meaningful fields.