Difference between revisions of "Block header"

 
(7 intermediate revisions by 3 users not shown)
Line 10: Line 10:
 
|-
 
|-
 
|Version
 
|Version
|Block version number
+
|Block version
|You upgrade the software and it specifies a new version
+
|
 
|4
 
|4
 
|-
 
|-
Line 21: Line 21:
 
|hashMerkleRoot
 
|hashMerkleRoot
 
|256-bit hash based on all of the transactions in the block
 
|256-bit hash based on all of the transactions in the block
|A transaction is accepted
+
|An updated merkle tree is completed
 
|32
 
|32
 
|-
 
|-
Line 31: Line 31:
 
|Bits
 
|Bits
 
|Current [[target]] in compact format
 
|Current [[target]] in compact format
|The [[difficulty]] is adjusted
+
|The [[difficulty]] is adjusted (approx 2 weeks)
 
|4
 
|4
 
|-
 
|-
Line 40: Line 40:
 
|}
 
|}
  
The body of the block contains the transactions. These are hashed only indirectly through the Merkle root. Because transactions aren't hashed directly, the proof of work needed to mine a block with 1 transaction takes exactly the same amount of effort as for a block with 10,000, 10,000,000 or 10,000,000,000 transactions.
+
The body of the block contains the transactions. These are hashed only indirectly through the [[Merkle root]]. Because transactions aren't hashed directly, the proof of work needed to mine a block with 1 transaction takes exactly the same amount of effort as a block with 10,000, 10,000,000 or 10,000,000,000 transactions.
  
The format of target is a floating-point encoding using a 3 byte mantissa, the leading byte as exponent (where only the 5 lowest bits are used) and its base is 256.
+
The format of target is a [[floating-point]] number encoded using a 3 byte mantissa with the leading 5 bytes as exponent. The number's range is within 2 <sup>256</sup>.
  
It is not possible for two nodes to be working on the same Merkle root because the Coinbase transaction is unique to that node, generating a different hash output. Every hash attempt made has the same chance of winning as every other hash calculated across the network.
+
It is not possible for two nodes to be working on the same Merkle root because the [[Coinbase]] transaction is unique to that node, generating a different hash output. Every hash attempt made has the same chance of winning as every other hash calculated across the network.
  
 
==Endianess==
 
==Endianess==
Note that the hash, which is a 256-bit number, has lots of leading zero bytes when stored or printed as a big-endian hexadecimal constant, but it has trailing zero bytes when stored or printed in little-endian. For example, if interpreted as a string and the lowest (or start of) the string address keeps lowest significant byte, it is little-endian.
+
Note that the hash, which is a 256-bit number, has lots of leading zero bytes when stored or printed as a [[big-endian]] [[hexadecimal]] constant, but it has trailing zero bytes when stored or printed in [[little-endian]]. For example, if interpreted as a string and the lowest (or start of) the string address keeps lowest significant byte, it is little-endian.
  
 
Most block explorers display the hash values as big-endian numbers; notation for numbers is usual (leading digits are the most significant digits read from left to right).
 
Most block explorers display the hash values as big-endian numbers; notation for numbers is usual (leading digits are the most significant digits read from left to right).

Latest revision as of 05:37, 22 April 2022

The block header is the first piece of information propagated by a node when it finds a valid block solution. Other nodes on the network can validate the node's hash solution and determine whether the proposed block warrants the further checking required to secure its place as the top-most link in the longest chain of valid proof of work.

A block header contains these fields:

Field Purpose Updated when... Size (Bytes)
Version Block version 4
hashPrevBlock 256-bit hash of the previous block header A new block comes in 32
hashMerkleRoot 256-bit hash based on all of the transactions in the block An updated merkle tree is completed 32
Time Current block timestamp as seconds since 1970-01-01T00:00 UTC Every few seconds 4
Bits Current target in compact format The difficulty is adjusted (approx 2 weeks) 4
Nonce 32-bit number (starts at 0) A hash is tried (increments) 4

The body of the block contains the transactions. These are hashed only indirectly through the Merkle root. Because transactions aren't hashed directly, the proof of work needed to mine a block with 1 transaction takes exactly the same amount of effort as a block with 10,000, 10,000,000 or 10,000,000,000 transactions.

The format of target is a floating-point number encoded using a 3 byte mantissa with the leading 5 bytes as exponent. The number's range is within 2 256.

It is not possible for two nodes to be working on the same Merkle root because the Coinbase transaction is unique to that node, generating a different hash output. Every hash attempt made has the same chance of winning as every other hash calculated across the network.

Endianess

Note that the hash, which is a 256-bit number, has lots of leading zero bytes when stored or printed as a big-endian hexadecimal constant, but it has trailing zero bytes when stored or printed in little-endian. For example, if interpreted as a string and the lowest (or start of) the string address keeps lowest significant byte, it is little-endian.

Most block explorers display the hash values as big-endian numbers; notation for numbers is usual (leading digits are the most significant digits read from left to right).