Block Events — Block Lifecycle

Subscribe

{"subscribe": ["BlockStart", "BlockEnd", "BlockFinalized"]}

Or any subset: BlockStart, BlockEnd, BlockQC, BlockFinalized, BlockVerified, BlockReject.

Message Format

All events are delivered inside an Events batch:

{
  "seq": 42,
  "Events": [
    {
      "event_name": "BlockStart",
      "block_number": 56147820,
      "txn_idx": null,
      "txn_hash": null,
      "commit_stage": "Proposed",
      "payload": {
        "type": "BlockStart",
        "block_number": 56147820,
        "block_id": "0x...",
        "round": 1,
        "epoch": 100,
        "parent_eth_hash": "0x...",
        "timestamp": 1708345678,
        "beneficiary": "0x...",
        "gas_limit": 30000000,
        "base_fee_per_gas": "0x3b9aca00"
      },
      "seqno": 9876543210,
      "timestamp_ns": 1708345678000000000
    }
  ]
}

Event Types

BlockStart

Block execution begins. Triggers Proposed lifecycle stage.

Payload FieldTypeDescription
block_numbernumberBlock height
block_idstringConsensus block ID
roundnumberConsensus round
epochnumberEpoch
parent_eth_hashstringParent block Ethereum hash
timestampnumberBlock unix timestamp
beneficiarystringBlock producer address
gas_limitnumberGas limit
base_fee_per_gasstringEIP-1559 base fee (hex U256)

BlockEnd

Execution complete. Does not change the public lifecycle stage.

Payload FieldTypeDescription
eth_block_hashstringEthereum block hash
state_rootstringState root
receipts_rootstringReceipts trie root
logs_bloomstringBloom filter
gas_usednumberGas consumed

BlockQC

Quorum Certificate: 2/3+ validators voted. Triggers Voted stage (~400 ms).

Payload FieldTypeDescription
block_idstringBlock ID
block_numbernumberBlock height
roundnumberRound

BlockFinalized

Block finalized, irreversible. Triggers Finalized stage (~800 ms).

Payload FieldTypeDescription
block_idstringBlock ID
block_numbernumberBlock height

BlockVerified

State root verified. Verified stage (terminal).

Payload FieldTypeDescription
block_numbernumberBlock height

BlockReject

Block dropped. Rejected stage (terminal).

Payload FieldTypeDescription
reasonnumberRejection reason code

BlockPerfEvmEnter / BlockPerfEvmExit

EVM profiling markers. Blocked by default, available with --unrestricted.

Event Ordering Within a Block

BlockStart
  TxnHeaderStart(0) ... TxnEnd(0)
  TxnHeaderStart(1) ... TxnEnd(1)
  ...
  TxnHeaderStart(N) ... TxnEnd(N)
BlockEnd

Lifecycle events (BlockQC, BlockFinalized, BlockVerified) arrive separately, after the corresponding consensus event.

Usage Examples

Monitor New Blocks

{"subscribe": ["BlockStart"]}

Full Block Lifecycle

{"subscribe": ["BlockStart", "BlockEnd", "BlockFinalized"]}

Track Finalization

{"subscribe": ["BlockFinalized", "BlockVerified", "BlockReject"]}

The commit_stage Field

Every event carries commit_stage, the block's current stage at the time of sending. For live streams, BlockStart always arrives with commit_stage: "Proposed".

Frequency

~2-3 blocks per second (at 400 ms block time). Each block generates at minimum BlockStart + BlockEnd.