The bits field is the compact representation of the target.


bits: 1d00ffff
target: 00ffff0000000000000000000000000000000000000000000000000000

bits: 1cfff00
target: ffff0000000000000000000000000000000000000000000000000000

But these two actually represent the same number.

int(target) -> 26959535291011309493156476344723991336010898738574164086137773096960 for both of the above targets.

What (if anything) makes bits a unique representation of the target?


In regular interactions with numbers, this kind of thing doesn't really matter, as a few leading zeros don't affect how we interpret the number. However, in Bitcoin, the bits field is used as part of the hash of the block. Therefore, a different bits representation would produce a different hash of the block.

  • Thanks, I understand the question now. – Nate Eldredge Apr 18 '19 at 15:25
  • @NateEldredge Thanks for pointing this out. I've added a clarification to the question. – Stephen Cowley Apr 18 '19 at 15:28
  • Some related fun, try and establish why the there is a sign bit in the target. – Anonymous Apr 18 '19 at 15:40
  • @Anonymous Is there a sign bit? – Stephen Cowley Apr 18 '19 at 15:45
  • There is a sign bit. – Anonymous Apr 18 '19 at 16:05

In short: no, the nBits encoding is not unique (there may be multiple 32-bit values that correspond to the same 256-bit target), but the nBits value as required by the network consensus rules is unique.

The reason for that is that all calculations happen on the target, which is then converted (using a deterministic algorithm) into nBits format. That nBits value is then required to match the value in the block header.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.