Back to Store

Block Anatomy Explorer

Explore the internal structure of blockchain blocks

Block #0 (Genesis Block) - January 3, 2009
Version
1
The block version number indicates which set of block validation rules to follow. Version 1 was used from the genesis block. Later versions (2, 3, 4) activated soft forks like BIP34 (height in coinbase), BIP66 (strict DER sigs), and BIP65 (CHECKLOCKTIMEVERIFY).
Previous Hash
0000000000000000000000000000000000000000000000000000000000000000
A 256-bit hash referencing the previous block. The genesis block has all zeros because there is no preceding block. This field creates the "chain" in blockchain - each block cryptographically commits to the entire history before it. Changing any prior block invalidates all subsequent hashes.
Merkle Root
4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
The root of a Merkle tree (binary hash tree) of all transactions in the block. Allows efficient verification that a transaction is included without downloading all transactions (SPV proofs). The genesis block's Merkle root is just the hash of the single coinbase transaction.
Timestamp
2009-01-03 18:15:05 UTC (1231006505)
Unix timestamp of when the miner started hashing the block header. Nodes reject blocks with timestamps more than 2 hours in the future. The median of the last 11 blocks must be less than the new block's timestamp. This prevents timestamp manipulation for difficulty gaming.
Difficulty (Bits)
486604799 (0x1d00ffff)
Compact representation of the target threshold. The block hash must be below this target to be valid. Difficulty 1 (the genesis value) means the target is the maximum possible. Adjusts every 2,016 blocks (~2 weeks) to maintain ~10 minute block intervals regardless of total network hash power.
Nonce
2083236893
A 32-bit number miners increment to find a hash below the target. With modern difficulty, 2^32 nonces are insufficient - miners also vary the coinbase transaction's extra nonce, timestamp, and transaction ordering. The genesis nonce means Satoshi tried ~2 billion combinations before finding a valid hash.

Transactions (1)

4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
Coinbase transaction - 50 BTC block reward
Inputs (Coinbase)
No input (newly generated coins)
ScriptSig: "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"
Outputs
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
50.00000000 BTC

Bitcoin Block Header (80 bytes)

Version
4 bytes
Protocol version for validation rules.
Prev Block Hash
32 bytes
SHA-256d of previous block header.
Merkle Root
32 bytes
Root of transaction Merkle tree (double SHA-256).
Timestamp
4 bytes
Unix time. Must be > median of last 11 blocks.
Bits (Target)
4 bytes
Compact difficulty target. Adjusts every 2016 blocks.
Nonce
4 bytes
Miner-varied field for PoW.
Model: UTXO (Unspent Transaction Outputs)
Consensus: SHA-256 Proof of Work
Block time: ~10 minutes
Max size: 1 MB (4 MB weight)

Ethereum Block Header (~500+ bytes)

Parent Hash
32 bytes
Keccak-256 hash of parent block header.
State Root
32 bytes
Root of the world state trie (all account balances, contract storage). This is unique to account-model chains.
Transactions Root
32 bytes
Root of trie of all transactions in block.
Receipts Root
32 bytes
Root of trie of transaction receipts (logs, gas used, status).
Gas Limit / Used
8+8 bytes
Computational budget for the block. Unlike Bitcoin's byte-size limit, Ethereum limits computation (gas).
Base Fee
32 bytes
EIP-1559 base fee (burned). Adjusts per-block based on utilization.
Model: Account-based (balances + state)
Consensus: Proof of Stake (since The Merge)
Block time: ~12 seconds
Max size: ~30M gas limit

How the Block Header Hash is Computed

Bitcoin uses double SHA-256. The 80-byte header is hashed twice to produce the block's identity.

1
Serialize header fields in order: version + prev_hash + merkle_root + timestamp + bits + nonce
2
Result is exactly 80 bytes in little-endian format
3
Apply SHA-256: hash1 = SHA256(header_bytes)
4
Apply SHA-256 again: block_hash = SHA256(hash1)
5
Reverse byte order for display (big-endian)
6
Check: is block_hash < target? If yes, block is valid!
Genesis Block Hash (result of above process):
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
Notice: starts with many zeros. The more leading zeros, the harder it was to find (lower target = higher difficulty).

Try It: Adjust Nonce

Change the nonce and watch the hash change completely (avalanche effect).

Input (simplified): "block_data_" + nonce
Click "Hash" to compute