Bitcoin's Supply Schedule: Subsidy, Halving and the 21 Million Limit

Bitcoin's issuance is not a policy that gets reviewed; it is two constants and a bit shift. The subsidy starts at 50 BTC, is divided by two every 210,000 blocks, and stops entirely once the shift runs out of bits. This guide reads the function that computes it, derives the 21 million limit from the same constants, and checks the current block height against the schedule.

CoinSoso EditorialPublished Article #00085Updated

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.

Key takeaways

  • Bitcoin Core's GetBlockSubsidy starts at 50 BTC and right-shifts it once per halving, where halvings is the height divided by the halving interval.
  • The mainnet halving interval is 210,000 blocks, set in chainparams.cpp, so the subsidy halves at every multiple of 210,000.
  • Because the shift is integer division, the subsidy reaches zero on the 33rd halving, long before the code's guard at 64.
  • The 21 million limit is arithmetic, not a constant in the code: 50 BTC times 210,000 blocks times two.
  • On 2026-10-26 the chain tip was 973,154, which puts it in the fifth subsidy epoch and pays 3.125 BTC per block before fees.

Two constants and a shift

The entire issuance schedule fits in a dozen lines. Bitcoin Core’s GetBlockSubsidy takes a block height and the consensus parameters, divides the height by the halving interval to get a count of halvings, and shifts a starting value of 50 BTC right by that count. A right shift by one is a division by two, so each halving halves the subsidy.

The current source reads:

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    // Force block reward to zero when right shift is undefined.
    if (halvings >= 64)
        return 0;

    CAmount nSubsidy = 50 * COIN;
    // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
    nSubsidy >>= halvings;
    return nSubsidy;
}

chainparams.cpp sets consensus.nSubsidyHalvingInterval = 210000 for mainnet. The comment in the function says the cut occurs approximately every four years, and the word “approximately” is doing real work: 210,000 blocks at a ten-minute target is about 1,458 days, but block intervals vary, so the calendar date of a halving is an estimate while the height is exact.

Reading the schedule

Combining the two constants gives a table that can be computed rather than looked up:

Halving count Height range Subsidy per block
0 0 – 209,999 50 BTC
1 210,000 – 419,999 25 BTC
2 420,000 – 629,999 12.5 BTC
3 630,000 – 839,999 6.25 BTC
4 840,000 – 1,049,999 3.125 BTC
5 1,050,000 – 1,259,999 1.5625 BTC

Each row is the previous subsidy divided by two, and each range is 210,000 blocks wide. The arithmetic is the whole policy. No vote changes a row, and no parameter adjusts the curve between halvings.

The 21 million limit is a sum, not a constant

The frequently quoted cap does not appear in the source as a number. It falls out of the table. The subsidy per halving is 50 BTC, then 25, then 12.5, and so on, each paid for 210,000 blocks. The total is a geometric series:

50 + 25 + 12.5 + … = 100 BTC per block-equivalent 100 × 210,000 blocks = 21,000,000 BTC

That is where the figure comes from. It is the sum of an infinite series that the code truncates, which is why the actual total is a fraction below 21,000,000 rather than exactly at it. The difference is the final subsidy that integer division rounds down to zero, a few thousandths of a bitcoin in total.

The practical consequence is that the cap is enforced by the subsidy function rather than by a separate check. A block’s coinbase output cannot exceed the subsidy plus the fees of the transactions it contains; ConnectBlock compares the coinbase value against nFees + GetBlockSubsidy(...) and rejects the block if it pays more. The cap holds because every block’s issuance is computed from the same function.

Where the chain is now

On 2026-10-26, the mempool.space tip-height endpoint returned 973,154. Dividing by 210,000 gives 4 with a remainder, so the chain is in the fifth epoch — the one that began at height 840,000 — and the subsidy is 50 BTC shifted right four times, or 3.125 BTC.

Two numbers follow from that height:

Figure Value
Current epoch 5th (halvings = 4)
Subsidy per block 3.125 BTC
Blocks into the epoch 133,154 of 210,000
Next halving height 1,050,000
Blocks remaining 76,846

The blocks-remaining figure is exact; the date it corresponds to is not. At a ten-minute average that is roughly 534 days, but the network has produced blocks faster and slower than the target for long stretches, so the calendar estimate moves while the height does not.

What the subsidy is and is not

The subsidy is new issuance. It is paid to the miner of a block through the coinbase transaction, and it is the only way new bitcoin enters circulation. Fees are separate: they are existing bitcoin transferred from spenders to the miner, and they do not change the supply.

Three things the subsidy is not:

  • It is not a price floor. The schedule fixes how much new supply is issued, not what anyone pays for it. A halving reduces the flow of new coins; it says nothing about demand.
  • It is not a difficulty adjustment. Difficulty retargets every 2,016 blocks to keep the block interval near ten minutes. The subsidy schedule is independent of it, which is why the halving height is fixed while the date is not.
  • It is not a promise about miner revenue. Miner revenue is subsidy plus fees. As the subsidy halves, the fee share of that revenue grows, and the security budget becomes a question about fees rather than about issuance.

The end of the schedule

The shift is integer division, so the subsidy does not decay smoothly to a tiny positive number. It truncates. At the 32nd halving the reward is 1 satoshi per block; at the 33rd it is zero, because 5,000,000,000 satoshis shifted right 33 places is 0.58 of a satoshi, which the integer type cannot represent.

The guard in the function checks for 64 or more halvings, not 33. That is a different concern: shifting a 64-bit value by 64 or more places is undefined behavior in C++, so the function returns zero before the shift can be performed out of range. The economic end of issuance arrives at 33; the guard exists to keep the operation well defined.

After that, blocks are paid by fees alone. The schedule does not say whether that is enough to secure the chain — that is a question about demand for block space, not about the subsidy function.

Why the dates drift and the heights do not

A halving is triggered by a block height, so it happens when the 210,000th block of an epoch is mined, whatever the calendar says. The ten-minute target is maintained by the difficulty adjustment, which itself only responds every 2,016 blocks, and hash rate changes between adjustments push the actual interval above or below the target.

That is why announcements frame halvings as estimates until the height is reached. The height is the fact the protocol enforces; the date is a projection made from recent block times. Reading the schedule in heights, as the table above does, avoids the ambiguity entirely.

Risk note. The subsidy function, the halving interval and the block-reward check in this article were read from the Bitcoin Core source on 2026-10-26. The tip height was a live snapshot from mempool.space on the same date and will be stale immediately. Derived totals are arithmetic on the source constants, not quotations from a document. Nothing here is investment advice.

Sources

How this was researched. Written from primary documentation and the exchange or protocol's own published material, with sources listed at the end of the article.

Primary sources for the factual claims on this page. A date appears only where a human has actually read the source; where it is missing, the check is still outstanding.

  1. Bitcoin Core — GetBlockSubsidy and block reward check (validation.cpp)(read 2026-10-26)
  2. Bitcoin Core — nSubsidyHalvingInterval (kernel/chainparams.cpp)(read 2026-10-26)
  3. mempool.space — chain tip height (live snapshot)(read 2026-10-26)

Frequently asked questions

Where is the 21 million cap written in the code?

It is not written as a constant. The cap follows from the 50 BTC starting subsidy and the 210,000-block halving interval: 50 × 210,000 × 2 = 21,000,000. The code enforces the subsidy schedule, and the total is the sum of that schedule.

What is the block subsidy right now?

On 2026-10-26 the chain tip was 973,154. Dividing by 210,000 gives four completed halvings, and 50 BTC shifted right four times is 3.125 BTC. That is the subsidy per block before transaction fees.

When is the next halving?

The fifth halving falls at height 1,050,000. With the tip at 973,154 on 2026-10-26, that is 76,846 blocks away. The date depends on block intervals, so the height is the fixed fact and the date is an estimate.

Does the subsidy ever reach exactly zero?

Yes, and earlier than the code's guard suggests. The reward is an integer number of satoshis, and 5,000,000,000 satoshis shifted right 33 times truncates to zero. From the 33rd halving there is no new subsidy, and miners are paid by fees only.

Why does the code check for 64 halvings if the subsidy is zero at 33?

Because shifting a 64-bit integer by 64 or more is undefined behavior in C++. The guard returns zero for any halving count at or above 64 so the shift itself is never performed out of range. It is a safety check, not the point where issuance ends.

Where to go next

Independent research. Each card shows the platform’s invite code, and its Create Account button is a referral link that may earn us a commission at no extra cost to you. Whether an account can be opened is decided by the platform at sign-up.

Binance

One of the largest global exchanges by traded volume, with a very broad product range.

20% Trading Fee Rebate

Use invite code con888 when signing up to enjoy trading fee benefits.

Download Android App

Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.

Do not install an APK from an unknown source, or one that has been modified or cannot be checked.

Read review →

OKX

A large global exchange offering spot, derivatives and a self-custody wallet.

20% Trading Fee Rebate

Enter invite code con888 when signing up to check available trading fee benefits.

Download Android App

Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.

Do not install an APK from an unknown source, or one that has been modified or cannot be checked.

Read review →