Bitcoin Mining · Chart

Bitcoin difficulty chart with every 2016-block adjustment

Bitcoin protocol difficulty plotted as a step-function across every 2016-block retarget. Difficulty is the auditable, on-chain record of network hashrate: the protocol adjusts it every 2016 blocks (~2 weeks) to keep the average block-time at 10 minutes. Upward adjustments (green dots) mean blocks came faster than 10 minutes during the prior epoch, indicating hashrate was rising. Downward adjustments (red dots) mean blocks came slower, indicating hashrate falling. The two biggest downward adjustments in Bitcoin's history bracket the May-July 2021 China mining ban. Hover any adjustment for the exact difficulty value, block height, and percentage change.

Chart

Log-scale Bitcoin difficulty from 2014 onwards, plotted as a step-function (difficulty holds flat between adjustments). Each adjustment is marked with a green dot (upward) or red dot (downward), sized by the magnitude of the change. Hover any adjustment for the exact value, block height, and percentage change.

Loading data...

What is Bitcoin difficulty?

Bitcoin difficulty is a dimensionless number that controls how hard it is to find a valid block. Mathematically, valid block hashes must be less than a target value proportional to 2^256 / difficulty. The higher the difficulty, the lower the target, the smaller the fraction of random hashes that qualify as valid, and the more hashes a miner must try before finding a winning nonce.

Difficulty is one of two ways the Bitcoin protocol expresses network security:

  • Difficulty. The auditable, on-chain protocol parameter. Stored in every block header (encoded via the bits field). Adjusts every 2016 blocks.
  • Hashrate. The actual computational throughput of mining ASICs in hashes per second. Inferred from observed block-times, not stored on-chain.

Difficulty is the authoritative record. If you want to prove how much work was done securing the chain between two dates, you point to difficulty values from each epoch (and verify them against the block headers). Hashrate is the higher-resolution real-time estimate of the same quantity.

How the 2016-block adjustment works

At every block whose height is an exact multiple of 2016 (a retarget block), the protocol executes the following calculation:

  1. Look at the timestamp of the current block and the timestamp 2015 blocks earlier (block height - 2015).
  2. Compute actual_interval = current_ts - prior_ts. Target interval = 2016 × 10 minutes = 20,160 minutes = 1,209,600 seconds.
  3. New difficulty = old difficulty × (target / actual). If blocks came faster than 10 minutes on average, the new difficulty is higher. If slower, lower.
  4. Hard caps: the adjustment cannot exceed 4x up or 0.25x down in a single epoch. If genuine hashrate change exceeded those bounds, the next epoch will continue to adjust.

The 2016-block window is a compromise: long enough to filter out short-term block-time variance from luck, short enough to respond reasonably quickly to genuine hashrate changes. Two weeks is the practical responsiveness floor on the network.

Difficulty vs hashrate

Bitcoin difficulty vs hashrate: two views of network mining capacity.
MetricWhat it isUpdate frequencyAuthority
DifficultyProtocol parameter that scales mining targetEvery 2016 blocks (~14 days)On-chain, auditable, exact
HashrateComputational throughput of mining networkContinuous (estimated daily)Off-chain inference from block-times

The two metrics tell the same story over months but diverge over days and weeks:

  • Difficulty leads hashrate during a halving. After the April 2024 halving, hashrate fell sharply for ~3 weeks as the highest-cost ASICs switched off. The next difficulty adjustment then dropped to reflect the new hashrate, and the cycle stabilised within two epochs.
  • Difficulty lags hashrate during regulatory shocks. When the China mining ban hit in mid-May 2021, hashrate fell almost immediately. Difficulty did not fall until the next retarget block, two weeks later. The 2-week lag is structural to the protocol.
  • Difficulty is more cyclically smooth. Daily hashrate estimates can swing 5-10 percent purely from block-time variance. Difficulty smooths that variance into clean step-changes every two weeks.

Methodology

  1. Inputs. Per-adjustment Bitcoin difficulty from /assets/data/btc-difficulty.json. Live source: mempool.space (primary) which exposes the full difficulty-adjustment history. Fallback: blockchain.info charts API.
  2. Step-function rendering. Difficulty holds flat between adjustments, so the chart line steps horizontally for ~14 days then jumps vertically at each retarget block. This is the protocol-accurate visualisation.
  3. Adjustment markers. Each adjustment is plotted as a coloured dot at the new difficulty level. Green if positive (upward), red if negative (downward). Dot radius scales with the magnitude of the percentage change.
  4. Adjustment percentage. Computed as (new_difficulty - old_difficulty) / old_difficulty × 100. Stored per row in the data file.
  5. Static-first. If the upstream API is unreachable, the existing JSON file is preserved and the build continues. The chart always renders against the last-known-good dataset.

Frequently asked questions

Difficulty is a dimensionless number that controls how hard it is to mine a new block on the Bitcoin network. Specifically, it is the multiplier on the genesis-block difficulty (D=1) such that valid block hashes must lie below a target proportional to 2^256 / difficulty. Higher difficulty = lower target = fewer valid hashes per attempt = more work per block. The protocol adjusts difficulty every 2016 blocks (roughly every two weeks) to keep average block-time at exactly 10 minutes.

At every block whose height is a multiple of 2016 (the retarget block), the protocol measures the actual wall-clock time the previous 2016 blocks took. If that interval was less than 2016 × 10 minutes = 20160 minutes, blocks came faster than target = hashrate has risen = difficulty rises proportionally. If the interval was longer, hashrate has fallen = difficulty falls. Maximum adjustment per epoch is capped at 4x up or 0.25x down. Adjustments outside that range require multiple epochs.

Hashrate is the actual computational power on the network at any given moment, estimated from observed block-times. Difficulty is the protocol parameter that the network adjusts every 2016 blocks based on hashrate. Difficulty is a lagged, smoothed proxy for hashrate: it tells you what hashrate was averaging over the prior 2016 blocks. Hashrate is real-time (and noisy); difficulty is delayed (and stepwise) but is the authoritative on-chain record. The two move together over months. Both metrics are tracked here: hashrate on the Bitcoin Hashrate chart, difficulty on this one.

The 27.94 percent downward adjustment at block 689,472 in early July 2021 was the largest single downward retarget in Bitcoin's history. It was followed almost immediately by another double-digit downward adjustment, making the cumulative drop from mid-May to early August 2021 the largest sustained hashrate withdrawal Bitcoin has ever seen. Both were caused by the China mining ban, which forced an estimated 50-65 percent of global mining offline almost overnight. Difficulty took roughly 8 months to recover to its May 2021 level.

Not by itself. Difficulty falls when miners switch off, which happens in three benign scenarios: (1) electricity price shocks that make some fleets unprofitable temporarily, (2) seasonal hydro-power shifts in mining regions, (3) hardware upgrade cycles where old ASICs are decommissioned faster than new ones come online. A difficulty drop after a halving is structurally expected: half the revenue per block means the highest-cost miners switch off until the network rebalances. The 2021 China-ban drops were unusual in their magnitude (-28 percent in one epoch), not their direction. Difficulty has fallen many times in benign cycles.

Difficulty adjusts every 2016 blocks. At the target 10-minute block-time that is exactly 14 days. In practice block times deviate from target by a few percent so adjustments arrive in a range of roughly 12 to 17 days. The exact next-adjustment date depends on the current epoch's accumulated block-time. mempool.space, blockchain.info, and most block explorers display a live countdown to the next retarget block. This chart shows the historical sequence of every past adjustment.

About the author

Govind Satoshi
Former Institutional Trader. Founder, SatoshiMacro.
Traded allocated institutional capital at a Sydney proprietary trading firm.