Bitcoin Data Model¶
This is a high-level overview of Bitcoin’s data model. For the full details, refer to https://bitcoin.org/en/developer-reference.
Block Headers¶
The 80 bytes block header hash encodes the following information:
| Bytes | Parameter | Type | Description | 
|---|---|---|---|
| 4 | version | i32 | The block version to follow. | 
| 32 | hashPrevBlock | char[32] | The double sha256 hash of the previous block header. | 
| 32 | merkleRoot | char[32] | The double sha256 hash of the Merkle root of all transaction hashes in this block. | 
| 4 | time | u32 | The block timestamp included by the miner. | 
| 4 | nBits | u32 | The target difficulty threshold, see also the Bitcoin documentation. | 
| 4 | nonce | u32 | The nonce chosen by the miner to meet the target difficulty threshold. | 
Transactions¶
A transaction is broadcasted in a serialized byte format (also called raw format). It consists of a variable size of bytes and has the following format.
| Bytes | Parameter | Type | Description | 
|---|---|---|---|
| 4 | version | i32 | Transaction version number. | 
| var | tx_in count | uint | Number of transaction inputs. | 
| var | tx_in | txIn | Transaction inputs. | 
| var | tx_out count | uint | The number of transaction outputs. | 
| var | tx_out | txOut | Transaction outputs. | 
| 4 | lock_time | u32 | A Unix timestamp OR block number. | 
Note
Bitcoin uses the term “CompactSize Unsigned Integers” to refer to variable-length integers, which are used to indicate the number of bytes representing transaction inputs and outputs. See the Developer Reference for more details.
Inputs¶
Bitcoin’s UTXO model requires a new transaction to spend at least one existing and unspent transaction output as a transaction input. The txIn type consists of the following bytes. See the reference for further details.
| Bytes | Parameter | Type | Description | 
|---|---|---|---|
| 36 | previous_output | outpoint | The output to be spent consisting of the transaction hash (32 bytes) and the output index (4 bytes). | 
| var | script bytes | uint | Number of bytes in the signature script (max 10,000 bytes). | 
| var | signature script | char[] | The script satisfying the output’s script. | 
| 4 | sequence | u32 | Sequence number (default 0xffffffff). |