Table of Contents


This is an experimental section and may be changed in the future. It is not required for the initial release.

After the full execution of a block, the set of logs that are emitted MUST be merklized and included in the block header. This commitment MUST be included as the block header's extra data field. The events are serialized with using Simple Serialize aka SSZ.

The goal of committing to data in the extra data field is to make commitments to data required to verify executing messages easier. The commitment could also commit to the set of executing messages instead of just the logs which represent all possible initiating messages that originate in the block. This would reduce rounds of communication for nodes that use proofs to verify executing messages.

MAX_LOG_DATA_SIZEuint64(2**24) or 16,777,216
MAX_MESSAGES_PER_BLOCKuint64(2**20) or 1,048,576
class Log(Container):
    address: ExecutionAddress
    topics: List[bytes32, 4]
    data: ByteList[MAX_LOG_DATA_SIZE]
    transaction_hash: bytes32
    transaction_index: uint64
    log_index: uint64

  log_0, log_1, log_2, ...)

block.extra_data = logs.hash_tree_root()

Security Considerations