Bitcoin mining is essentially a process of brute-force guessing. The number of guesses required depends entirely on a consensus-driven value known as the "difficulty." A miner only solves the cryptographic puzzle when they find a number (a nonce) that results in a block hash meeting this difficulty requirement.
As more participants join the mining game, the puzzle would be solved more quickly. To maintain a constant average block time of approximately 10 minutes, the network recalculates the mining difficulty every 2016 blocks based on the time it took to find the previous set of blocks.
With the game becoming increasingly difficult, how can miners guess the answer before others? This led to the formation of team-based battles—mining pools—where participants combine their computational power to solve puzzles faster. However, as speed increases, so does the difficulty. This is a key reason why the difficulty value began growing exponentially around 2014 and 2015. Advancements in mining hardware (ASICs) have also accelerated this trend.
The difficulty value itself is not directly stored in a block. It is a derived floating-point number designed to give humans an intuitive sense of the mining challenge. It is calculated using the formula:
[ \text{difficulty} = \frac{\text{difficulty\_1\_target}}{\text{currentTarget}} ]
Here, difficulty_1_target is a constant, an extremely large number representing the maximum possible target. A smaller target value means the block is harder to generate.
How the Difficulty Value is Stored in a Block
What is stored in the block header is the Target, but it is encoded using a compact representation similar to a floating-point number, in a field called bits. For example, if a block's bits field is recorded as 0x1b0404cb, the actual 256-bit Target value in hexadecimal is calculated as:
0x0404cb * 2^(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000In this calculation, the last three bytes (0x0404cb) act as the significand (or mantissa), and the first byte (0x1b) acts the exponent. The general compression process is as follows:
- Convert the number into its 256-base representation.
- If the first digit is greater than 127 (0x7f), prepend a zero.
- The first byte of the compressed result stores the length of this 256-base number.
- The next three bytes store the first three digits of the 256-base number. If there are fewer than three digits, pad with zeros.
Example: Compressing the number 1000.
First, convert it to 256-base:1000 = 0x03 * 256 + 0xe8 * 1
This yields two digits: 03 e8.
- The first digit (
0x03) is not greater than0x7f, so no zero is added. - The length is 2, which is less than 3, so we pad with one zero.
The final compressed representation is:0x0203e800.
Example: Compressing the number (2^{(256-32)} - 1), whose 256-base representation is 28 bytes of 0xff:ff ff ff ff ... ff (28 times)
- The first digit (
0xff) is greater than0x7f, so we prepend a0x00. - The number is now 29 digits long (
0x1d). - We can only store the first three digits of the significand after the length byte.
The final compressed representation becomes:0x1d00ffffff. This results in a loss of precision, as the remaining 260xffbytes are discarded.
If we decompress 0x1d00ffffff, we get:0x00ffff * 256^(0x1d - 3)
This result differs from the original value. This decompressed value is Bitcoin's maximum target, which corresponds to the minimum difficulty of 1.
There are two common interpretations of this maximum target:
- Pool Difficulty (pdiff): Often represented by miners as
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, preserving trailing0xFFs. - Bitcoin Client Difficulty (bdiff): Represented in the Bitcoin Core client as
0x00000000FFFFFF0000000000000000000000000000000000000000000000000000, which does not preserve the trailing0xFFs.
How to Check the Current Difficulty
The current Bitcoin difficulty value and its historical chart can be viewed on several data service websites, which provide real-time and historical analytics.
What is the Maximum Possible Difficulty?
Theoretically, the difficulty approaches infinity as the currentTarget approaches zero. In practice, the currentTarget has a minimum value of 1. The maximum difficulty is therefore astronomically high, nearly (2^{(256-32)}).
What is the Minimum Difficulty?
The minimum difficulty is 1. This occurs when the currentTarget is equal to the constant difficulty_1_target (the maximum possible target).
How to Calculate Network Hash Rate from Difficulty
The network hash rate is the estimated number of hashes being calculated by the entire network per second to find new blocks.
The current target value dictates the current difficulty (D). The number of hashes required to find a block at difficulty D is:
[ \frac{ D 2^{256} }{ \text{difficulty\_1\_target} } = \frac{ D 2^{256} }{ 0xffff 2^{208} } = \frac{ D 2^{48} }{0xffff} \approx D * 2^{32} ]
Since the network aims to find a block every 600 seconds (10 minutes), the minimum required network hash rate (H) is:
[ H = \frac{ D * 2^{32} }{600} ]
At a difficulty (D) of 1, the network would need to compute approximately 7.16 million hashes per second (7.15 MH/s). Common units for measuring hash rate are:
- 1 KH/s (KiloHash per second) = 1,000 H/s
- 1 MH/s (MegaHash per second) = 1,000 KH/s
- 1 GH/s (GigaHash per second) = 1,000 MH/s
- 1 TH/s (TeraHash per second) = 1,000 GH/s
- 1 PH/s (PetaHash per second) = 1,000 TH/s
👉 View real-time network statistics and metrics
Bitcoin's Block Target Value
The target is a massive 256-bit number that the entire network agrees upon. The maximum target is defined by 0x1d00ffff.
Bitcoin's design aims for a new block to be generated, on average, every 10 minutes. To maintain this pace, the network dynamically adjusts the mining difficulty by recalculating and updating the target value every 2016 blocks.
2016 blocks * 10 minutes per block = 20,160 minutes = 14 days (2 weeks).
The Details of Target Calculation
The fundamental formula for calculating the new target is:
New Target = Old Target * (Actual Time of Last 2016 Blocks) / (Expected Time of 2016 Blocks: 2 Weeks)However, the actual implementation includes rules to prevent extreme adjustments and ensure network stability:
- Check for Retargeting: The target is only recalculated when a new block's height is an exact multiple of 2016.
- Calculate Timespan: The time taken to mine the previous 2016 blocks is calculated.
Clamp the Timespan: To prevent the difficulty from changing too drastically:
- If the actual timespan is less than half a week (1/4 of 2 weeks), it is set to half a week. This prevents the difficulty from increasing by more than a factor of 4.
- If the actual timespan is more than 8 weeks (4 times 2 weeks), it is set to 8 weeks. This prevents the difficulty from decreasing by more than a factor of 4.
- Calculate New Target: The new target is computed as
(Old Target * Clamped Timespan) / (2 Weeks). - Limit to Maximum: If the newly calculated target is larger than the maximum allowed target (
mainPowLimit), it is set to the maximum target.
This process ensures the network remains secure and responsive to changes in total computational power.
Frequently Asked Questions
What is the main purpose of Bitcoin's difficulty adjustment?
The primary purpose is to keep the average time between new blocks at roughly 10 minutes, regardless of the total computational power (hash rate) dedicated to mining. This ensures a predictable and stable rate of new Bitcoin issuance and transaction processing.
How often does the Bitcoin network difficulty change?
The difficulty is recalculated and potentially adjusted every 2016 blocks. Based on a 10-minute block time, this should happen approximately every two weeks. However, if blocks are found faster or slower than 10 minutes on average, the actual time between adjustments will be shorter or longer.
Can the difficulty ever decrease?
Yes, the difficulty can decrease. If miners leave the network and the total hash rate drops, it will take longer than two weeks to find 2016 blocks. The retargeting algorithm will then increase the target (which lowers the difficulty) to make it easier to find blocks and bring the block time back towards 10 minutes.
What does a higher difficulty number mean for miners?
A higher difficulty number means that the target value is smaller, making it statistically harder to find a valid block hash. Miners must perform more computations (hashes) on average to find a winning nonce, which increases their operational costs and requires more powerful and efficient hardware to remain competitive.
What is the difference between 'bdiff' and 'pdiff'?
'Bdiff' (Bitcoin difficulty) refers to the difficulty calculation used by the Bitcoin Core client, which uses a specific interpretation of the maximum target. 'Pdiff' (pool difficulty) is a common interpretation used by mining pools, which often results in a slightly different value for the minimum difficulty. The core concept and adjustment mechanism remain the same.
Where can I see the upcoming difficulty adjustment estimates?
Many blockchain explorers and data analytics websites provide real-time estimates for the next difficulty adjustment, projecting whether it will be an increase or decrease and by what percentage, based on the current pace of block discovery. 👉 Explore more strategies for tracking blockchain data