8

I'm looking at the stratum protocol and I'm having a problem with the nbits value of the mining.notify method. I have trouble calculating it, I assume it's the currency difficulty.

I pull a notify from a dogecoin pool and it returned 1b3cc366 and at the time the difficulty was 1078.52975077.

I'm assuming here that 1b3cc366 should give me 1078.52975077 when converted. But I can't seem to do the conversion right.

I've looked here, here and also tried the .NET function BitConverter.Int64BitsToDouble.

Can someone help me understand what the nbits value signify?

Charles
  • 50,943
  • 13
  • 104
  • 142
the_lotus
  • 12,668
  • 3
  • 36
  • 53

1 Answers1

14

You are right, nbits is current network difficulty.

Difficulty encoding is throughly described here.

Hexadecimal representation like 0x1b3cc366 consists of two parts:

  • 0x1b -- number of bytes in a target
  • 0x3cc366 -- target prefix

This means that valid hash should be less than 0x3cc366000000000000000000000000000000000000000000000000 (it is exactly 0x1b = 27 bytes long).

Floating point representation of difficulty shows how much current target is harder than the one used in the genesis block.

Satoshi decided to use 0x1d00ffff as a difficulty for the genesis block, so the target was 0x00ffff0000000000000000000000000000000000000000000000000000.

And 1078.52975077 is how much current target is greater than the initial one:

$ echo 'ibase=16;FFFF0000000000000000000000000000000000000000000000000000 / 3CC366000000000000000000000000000000000000000000000000' | bc -l
1078.52975077482646448605
max taldykin
  • 12,459
  • 5
  • 45
  • 64