> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metalntwx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Block Headers

> Metal's extended Ethereum header, block hash, and RPC fields

`MetalHeader` adds consensus and interoperability fields around the standard
Ethereum execution header. The block hash commits to the complete RLP-encoded
`MetalHeader`.

## RLP layout

The outer RLP list has the following order:

| Index | Field | Encoding | Meaning |
| -: | - | - | - |
| 0 | `timestamp_millis_part` | RLP integer | Millisecond remainder of the block timestamp, from `0` to `999` |
| 1 | `inner` | RLP list | Standard Ethereum execution header |
| 2 | `proposer` | 48 bytes | BLS12-381 MinPk public key of the round proposer |
| 3 | `interop_message_root` | 32 bytes | Cumulative message root from the Metal outbox |
| 4 | `ethereum_update` | Byte string | Ethereum light-client consensus operation: kind byte followed by SSZ data; empty when absent |
| 5 | `validator_set_root` | 32 bytes | Root of the validator set for this block's epoch |
| 6 | `next_validator_set_root` | 32 bytes | Root of the validator set for the next epoch |
| 7 | `subblock_metadata_root` | 32 bytes, optional | Commitment to ordered subblock metadata |

`subblock_metadata_root` is a trailing optional field. A header without this
field remains unambiguous to the RLP decoder.

```text theme={null}
blockHash = keccak256(rlp(MetalHeader))
```

The nested header retains Ethereum's standard field order.

## Millisecond timestamp

The nested header stores whole seconds. `timestamp_millis_part` stores the
remaining milliseconds:

```text theme={null}
timestampMs = inner.timestamp * 1000 + timestamp_millis_part
```

Simplex consensus uses this canonical block time and requires it to increase
strictly. Standard Ethereum RPC fields continue to expose `timestamp` in
seconds.

## Proposer and fee recipient

`proposer` is the raw 48-byte compressed BLS public key of the validator that
proposed the block. The genesis header uses the all-zero key.

The JSON-RPC `miner` field identifies the EVM fee recipient. `proposer`
identifies the consensus validator.

## Message root

`interop_message_root` is the count-bound root of the Metal message tree after
the block finishes executing:

```text theme={null}
interop_message_root = keccak256(tree_root || leaf_count)
```

It is zero before the first cross-chain message. Destination-chain light
clients extract it from a finalized header, and `MetalInbox` contracts verify
message proofs against it.

## Subblock metadata root

When present, `subblock_metadata_root` commits to the ordered metadata of the
included subblocks. The block hash and finality certificate cover this field.

The field may be absent. Absence and a 32-byte zero value are distinct RLP
encodings.

## Ethereum consensus update

`ethereum_update` carries an Ethereum light-client operation chosen by the
validator and verified during block execution. Its bytes are committed by
the Metal block hash. The field is empty for a block without an operation;
a nonempty value begins with an operation-kind byte followed by its SSZ
encoding. Its maximum size is 64 KiB.

## Validator-set roots

`validator_set_root` commits to the validator set for the block's epoch.
`next_validator_set_root` commits to the next epoch's set, allowing a verifier
to authenticate a scheduled transition through the finalized header. The roots
are equal while the set is unchanged. Both are zero in the genesis header.

## JSON-RPC fields

Metal block responses add these fields to the standard Ethereum response:

| Field | JSON type | Meaning |
| - | - | - |
| `timestampMillisPart` | Quantity | Millisecond remainder added to `timestamp` |
| `proposer` | Hex data | 48-byte proposer BLS public key |
| `interopMessageRoot` | `DATA`, 32 bytes | Count-bound Metal message root |
| `ethereumUpdate` | Hex data | Ethereum light-client consensus operation, or `0x` when absent |
| `validatorSetRoot` | `DATA`, 32 bytes | Validator set for this block's epoch |
| `nextValidatorSetRoot` | `DATA`, 32 bytes | Validator set for the next epoch |
| `subblockMetadataRoot` | `DATA`, 32 bytes, optional | Ordered subblock metadata commitment |

Use [Block Timestamps](https://docs.metalntwx.com/reference/network-fundamentals/block-timestamps.md) for the JSON-RPC
calculation and EVM behavior.

## Finality

A Metal finality certificate authenticates the hash of the complete header.
It therefore covers the millisecond timestamp, proposer, message root,
Ethereum consensus update, validator-set roots, and optional subblock metadata
root.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.