Why is the target truncated?

1

Reading the docs on target:

The maximum target used by SHA256 mining devices is:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Because Bitcoin stores the target as a floating-point type, this is truncated:

0x00000000FFFF0000000000000000000000000000000000000000000000000000

I know that the purpose is to force miners to generate hashes with a value lower than the target. But the docs are vague, why is this truncation required? And then, why truncate after the first four Fs?

Paul Razvan Berg

Posted 2018-06-24T10:53:59.333

Reputation: 227

Answers

2

Target is stored in block header (it's called Bits), and it takes only 4 bytes. We derive target 256-bit value from these 32 bits. That's why it is getting truncated.

There is no need to store all 256 bits, or even 224 bits (if we assume first 4 bytes are zero). We don't need such precision.

You can read in wiki, how target is getting calculated from Bits.

You can also check my answer here, with example: How does difficulty is defined for block '55798'?

Zergatul

Posted 2018-06-24T10:53:59.333

Reputation: 948

This was really clear, thanks! Just to make sure, setting the trailing bites of the 256-bit version to zero means that when a miner finds a hash with a value which has the correct number of zeros, but it is higher than the target, that hash is invalid?Paul Razvan Berg 2018-06-24T12:20:34.693

@PaulRBerg right, we talk about trailing zeros for simple explanation. In the reality we compare two 256-bit integersZergatul 2018-06-24T13:59:25.537