Bitcoin - Fixed 80-Byte Header

Bitcoin employs a fixed 80-byte block header structure that has remained consistent since genesis. The header is double-SHA256 hashed for proof-of-work validation.

Packet Diagram

┌──────────────┬────────────────────────────────────────────────────────┐
│ Offset       │ 0    4    8    12   16   20   24   28   32   36        │
├──────────────┼────────────────────────────────────────────────────────┤
│ 0x00 (0)     │ Version (4 bytes) │ Previous Block Hash (32 bytes)     │
│              │ [LE uint32]       │ [Internal byte order]              │
├──────────────┼───────────────────┴────────────────────────────────────┤
│ 0x24 (36)    │ Merkle Root (32 bytes)                                 │
│              │ [Internal byte order - root of transaction tree]       │
├──────────────┼────────────────────────────────────────────────────────┤
│ 0x44 (68)    │ Timestamp (4)  │ Bits/Difficulty (4) │ Nonce (4)      │
│              │ [LE uint32]    │ [LE uint32 compact] │ [LE uint32]    │
└──────────────┴────────────────┴─────────────────────┴────────────────┘
Total: 80 bytes (fixed)

Field Specifications

Unique Features: Fixed size, double-SHA256 proof-of-work, compact difficulty encoding

Ethereum - RLP-Encoded Variable Header

Ethereum uses RLP (Recursive Length Prefix) encoding for variable-length headers. Post-merge changes significantly altered consensus fields.

Pre-Merge Header Structure

┌─────────────────────────────────────────────────────────────────────┐
│ RLP-Encoded Array of Fields (Variable Length)                       │
├─────────────────────────────────────────────────────────────────────┤
│ [0] parentHash        │ 32 bytes  │ Keccak256 of parent header     │
│ [1] ommersHash        │ 32 bytes  │ Hash of uncle list              │
│ [2] beneficiary       │ 20 bytes  │ Miner/validator address         │
│ [3] stateRoot         │ 32 bytes  │ Root of state trie              │
│ [4] transactionsRoot  │ 32 bytes  │ Root of transaction trie        │
│ [5] receiptsRoot      │ 32 bytes  │ Root of receipt trie            │
│ [6] logsBloom         │ 256 bytes │ Bloom filter for logs           │
│ [7] difficulty        │ Variable  │ PoW difficulty (big-endian)     │
│ [8] number            │ Variable  │ Block number (big-endian)       │
│ [9] gasLimit          │ Variable  │ Block gas limit                 │
│ [10] gasUsed          │ Variable  │ Gas consumed                    │
│ [11] timestamp        │ Variable  │ Unix timestamp                  │
│ [12] extraData        │ ≤32 bytes │ Arbitrary data                  │
│ [13] mixHash          │ 32 bytes  │ PoW mix hash/RANDAO             │
│ [14] nonce            │ 8 bytes   │ PoW nonce                       │
│ [15+] baseFeePerGas   │ Variable  │ EIP-1559 base fee               │
│       Additional fields added by various EIPs...                    │
└─────────────────────────────────────────────────────────────────────┘

Post-Merge Changes