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?

1 Answer 1

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
9
  • 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) / T
    – Shubham
    Commented May 28, 2018 at 11:11
  • 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: en.bitcoin.it/wiki/Difficulty "How is difficulty stored in blocks?"
    – Zergatul
    Commented May 28, 2018 at 11:23
  • Please let me know what formula you have used to calculate the difficulty.
    – Shubham
    Commented May 28, 2018 at 11:24
  • 1
    I think the question is about how difficulty is calculated from bits, not about how the difficulty is actually determined from previous block timestamps. Commented May 28, 2018 at 14:54
  • 1
    @Shubham oh, sorry, I updated the answer.
    – Zergatul
    Commented May 28, 2018 at 16:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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