How does difficulty is defined for block '55798'?

1

I know that the formula for calculating the difficulty is below -

Difficulty = T (max) / T
Where T (max) = 1d00ffff in decimal it is 486604799.

**enter image description here**

As you can see in the above screenshot the difficulty of block '55798' is 12.85. I'm trying to calculate this value using formula but getting the different result.

D = T (max) / T

When I put the correct values in the formula, It becomes like -

D = (486604799 / 471067731) = 1.03

I don't know why I'm getting the different difficulty. The correct value is 12.85. Can you please let me know the reason of this?

Shubham

Posted 2018-05-28T10:13:15.680

Reputation: 113

Answers

3

How to calculate difficulty from Bits fields (which is stored in block).

  1. Convert value to hex: bits=471067731 -> 0x1c13ec53
  2. Split hex value, take 8 high bits (0x1c), and 24 low (0x13ec53)
  3. Use formula to get 256-bit target value: T = low * 2 ^ (8 * (high - 3)). In our case it will be: T = 0x13ec53 * 2 ^ (8 * (0x1c - 3)) = 0x0000000013ec5300000000000000000000000000000000000000000000000000
  4. Divide highest possible target Tmax (0x00000000ffff0000000000000000000000000000000000000000000000000000) by our T. If we truncate zeros, it will be: 0x13ec53 / 0xffff00 = 12.849

Network recalculates difficulty every 2016 blocks (2 weeks). This is how 12.85 is getting recalculated from block timestamps:

block -  diff - time stamp
...
52415 -  7.82 (2010-04-21 21:50:53)
52416 - 11.46 (2010-04-21 21:52:52) <- difficulty update
...
54430 - 11.46 (2010-05-04 09:39:19)
54431 - 11.46 (2010-05-04 09:40:03)
54432 - 12.85 (2010-05-04 09:46:16) <- difficulty update
...
55798 - 12.85 (2010-05-14 16:21:05) <- your block

When network recalculates difficulty, it takes time to mine the latest 2015 blocks (due to bug in code, it should take 2016). In our example, it would be:

2010-05-04 09:40:03 - 2010-04-21 21:52:52 = 12.491 days

In normal scenario 2016 block should be mined in 14 days. So, new difficulty:

11.46 * 14 / 12.491 = 12.844

Zergatul

Posted 2018-05-28T10:13:15.680

Reputation: 948

Thanks for your help. But why we added 11.46 in our calculation? any reason for this? and why you added 12.491? what about the formula D = T(max) / TShubham 2018-05-28T11:11:25.333

1

11.46 is previous difficulty. To calculate new difficulty network takes previous one. You can't use Bits field directly and do division. It has internal format, You can read wiki for details: https://en.bitcoin.it/wiki/Difficulty "How is difficulty stored in blocks?"

Zergatul 2018-05-28T11:23:04.887

Please let me know what formula you have used to calculate the difficulty.Shubham 2018-05-28T11:24:39.703

new_diff = old_diff * ratioZergatul 2018-05-28T11:28:19.457

1I think the question is about how difficulty is calculated from bits, not about how the difficulty is actually determined from previous block timestamps.Nate Eldredge 2018-05-28T14:54:35.793

1@Shubham oh, sorry, I updated the answer.Zergatul 2018-05-28T16:06:57.863

@Zergatul Thanks you so much for your great help. I really appreciate it.Shubham 2018-05-29T05:35:05.037

@Zergatul Can you please let me know how to convert the '0x0000000013ec5300000000000000000000000000000000000000000000000000' floating point number into decimal. ? Any online conversion link would really help me.Shubham 2018-05-29T06:07:12.830

@Shubham I prefer to use programming languages, for example in javascript: 0x13ec53 * Math.pow(2, 8 * (0x1c - 3)). And result: 2.0981516864422112e+66Zergatul 2018-05-29T07:36:33.060