BitcoinMachine
BEGINNER_DOC_004 // BEGINNERS / DIFFICULTY
DIFFICULTY
Bitcoin's difficulty is a measure of how hard it is to find a valid block-hash/">block hash. It adjusts automatically every 2,016 blocks to keep the average time-10-minutes/">block time at 10 minutes, regardless of how much computing power joins or leaves the network.
THE GOAL — FIND A HASH BELOW THE TARGET
Target: 0000000000000000000320a70000000000000000000000000000000000000000 Block hash must be LESS THAN this number. The more leading zeros required, the harder it is to find. Low difficulty: 00ffffff... ← easy, many hashes qualify High difficulty: 00000000000000000003... ← very hard, very few hashes qualify
HOW MINERS FIND IT
THE MINING LOOP
nonce = 0 loop: candidate_hash = HASH256(block_header with this nonce) if candidate_hash < target: BLOCK FOUND ✓ — broadcast to network else: nonce = nonce + 1 try again
The Retargeting Algorithm
AUTO-ADJUST
Every 2,016 blocks (~2 weeks), every node independently calculates a new target based on how long the last 2,016 blocks actually took vs the expected 20,160 minutes.
Expected time: 2016 blocks × 10 minutes = 20,160 minutes If blocks came faster (e.g. 8 min avg): Actual time: 16,128 minutes Ratio: 16,128 / 20,160 = 0.8 New target = old target × 0.8 ← HARDER (smaller target) If blocks came slower (e.g. 12 min avg): Actual time: 24,192 minutes Ratio: 24,192 / 20,160 = 1.2 New target = old target × 1.2 ← EASIER (larger target)
The adjustment is capped at 4× in either direction to prevent extreme swings. This is a key piece of Bitcoin's self-regulating design.
Why 10 Minutes?
DESIGN CHOICE
Satoshi chose 10 minutes as a tradeoff between fast confirmations and giving blocks enough time to propagate across the global network before another block is found.
Too fast (<1 min): Network doesn't have time to receive the block before miners find the next one → many orphan blocks → unstable Too slow (>60 min): Payments take too long to confirm → poor user experience 10 minutes: reasonable propagation time + acceptable wait for users

NETWORK POWER
Hashrate is the total number of hash calculations the entire Bitcoin network performs per second. As more miners join, hashrate rises — so blocks would come faster. Difficulty rises to compensate.
2009: ~7 MH/s (megahashes per second) 2013: ~1,000 TH/s (terahashes) 2020: ~120 EH/s (exahashes) 2024: ~600 EH/s (exahashes — 600 quintillion hashes per second) Every time hashrate doubles, difficulty doubles to maintain 10-minute blocks.
The difficulty has increased by more than 10 trillion times since the Genesis Block. This represents the enormous growth in mining hardware over 15 years.
Adjustment period 2,016 blocks (~2 weeks)
Target block time 10 minutes
Max adjustment per period 4× harder or 4× easier
Difficulty encoded in header as Bits (4 bytes, compact format)
Current network hashrate (2024) ~600 EH/s
TERMINOLOGY_INDEX
Difficulty
A measure of how hard it is to find a valid block hash. Higher difficulty = more leading zeros required.
Target
The maximum value a block hash can be. Miners must find a hash below this number.
Hashrate
The total computing power of the Bitcoin network, measured in hashes per second (H/s).
Retarget
The automatic adjustment of the difficulty every 2,016 blocks to maintain 10-minute block times.
Bits
The compact 4-byte encoding of the target stored in each block header.
Proof of Work
The computational work miners do to find a valid hash. Provides security through energy expenditure.