# How does a proof of work limit of `~uint256(0) >> 20` translate into a difficulty of `1 / 2^12`?

In the Litecoin source it is written:

``````static CBigNum bnProofOfWorkLimit(~uint256(0) >> 20); // Litecoin: starting difficulty is 1 / 2^12
``````

How does that compute? `~uint256(0) >> 20` is `0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`. Hashes have an equal probability of being any given number, so the chance of getting a valid Litecoin hash (i.e. one that is smaller than this number) is `0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff / 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff` = `1 / 2^20`, not `1 / 2^12`. Is this a typo in the Litecoin source code or am I misunderstanding something?

• A good way to remember it is that a difficulty of 1 means an average of `2^32` hashes are needed to mine one block, and it scales linearly from there. This convention comes from Bitcoin where the minimum difficulty is in fact 1. May 5, 2014 at 18:57
• Hi. At recent source, there is no CBigNum, what it have been changed? Feb 24, 2018 at 10:09

To use the terminology on Litecoin's wiki, `~uint256(0) >> 20` is the target, and `1 / 2^12` is (approximately) the difficulty. You can see that by running the following in Python (or anything that can handle calculations on large numbers).
``````target = 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff # or 2**236-1
I believe the `1 / 2^20` figure you calculated is the probability that each hash will succeed, which is not the same as (although related to) the difficulty.