# 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. – Nate Eldredge May 5 '14 at 18:57
• Hi. At recent source, there is no CBigNum, what it have been changed? – creator Feb 24 '18 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.