monero.supply logo

Monero.SupplyMathematical Proof Of The Circulating XMR Supply, Block By Block

byCR1337 logoCR1337

Protocol Expected Supply - Full Base Rewards

computing…XMR

A mathematical proof of circulating Monero - derived from the consensus emission formula, computed in exact integer arithmetic.

Latest Mined Height
-
Era
-
Base Reward
-
Last Updated (UTC)
-

Height source: loading…

Upper bound of issued subsidy from the consensus base-reward formula. Real issuance is at least 1,266.386450309046 XMR lower, because oversized blocks paid the block-size penalty - the bound is derived in step 6. Fees are not new coins.

H -computing…Verify

Derivation

Seven Steps From Genesis To Today's Number, 01 To 07

Every figure below is protocol expected supply (full base rewards), computed with 64-bit integer arithmetic exactly as the consensus code does it. Monero had no premine, no ICO, no founder allocation and no locked treasury.

  1. 01

    Step 01

    Units

    Monero amounts are uint64 atomic units; 1 XMR = 10^12 piconero.

    Twelve stacked sheets: 10^12 atomic units make one XMR.
    Fig. 01
    COIN         = 1000000000000
    MONEY_SUPPLY = 2^64 - 1 = 18446744073709551615
    1 XMR1,000,000,000,000 atomic
    MONEY_SUPPLY / 10^1218,446,744.073709551615 XMR

    18,446,744.073709551615 XMR is simply MONEY_SUPPLY divided by 10^12 - an implementation bound inside the emission formula, NOT a maximum circulating supply. Tail emission means supply grows forever, and this figure is never reached.

  2. 02

    Step 02

    Genesis, No Premine

    The first issuance is an ordinary miner reward at height 0.

    An empty balance scale: no premine, both pans vacant at genesis.
    Fig. 02
    baseReward(0, height 0) = (2^64 - 1) >> 20 = 17592186044415
    Genesis date2014-04-18
    Genesis block hash418015bb9ae982a1975da7d79277c2705727a56894ba0fb246adaabb1f4632e3
    Genesis reward17.592186044415 XMR

    There is no allocation branch in the code. The chain starts at zero already-generated coins and mints only through coinbase transactions.

  3. 03

    Step 03

    Smooth Emission

    Each block mints a fixed fraction of what is left of the 64-bit ceiling.

    A descending staircase whose steps shrink smoothly, with no cliff.
    Fig. 03
    baseReward = (MONEY_SUPPLY - alreadyGenerated) >> emissionSpeedFactor
    emissionSpeedFactor = 20  (1-minute era)
    emissionSpeedFactor = 19  (2-minute era)
    Shift by kfloor-divide by 2^k
    Height 1,000 reward17.575416817881 XMR
    Height 1,000,000 reward6.778664170600 XMR

    Because the remaining amount shrinks every block, the reward decays smoothly instead of stepping down in halvings. There is no halving schedule in Monero.

  4. 04

    Step 04

    The 2016 Block-Time Change

    At height 1,009,827 the target went from 60s to 120s and the per-block reward roughly doubled.

    A time rail whose sleepers double in spacing, with a taller reward step.
    Fig. 04
    height <  1009827 -> target 60s,  emissionSpeedFactor 20
    height >= 1009827 -> target 120s, emissionSpeedFactor 19
    Height 1,009,826 (last 1-min block)6.715439304825 XMR
    Height 1,009,827 (first 2-min block)13.430865800966 XMR
    XMR per minutecontinuous across the fork

    Halving the block rate and doubling the per-block reward keeps emission per unit of time unchanged. The curve you see later is smooth in time even though the per-block series jumps.

  5. 05

    Step 05

    Tail Emission Floor

    If the formula would pay less than 0.3 XMR per minute, the protocol pays exactly that floor.

    A falling curve landing on a hard horizontal shelf: the tail floor.
    Fig. 05
    floor = FINAL_SUBSIDY_PER_MINUTE * targetMinutes
          = 300000000000 * 2 = 600000000000  (0.6 XMR per 2-minute block)
    Theoretical tail start (this engine)2,639,513
    Observed mainnet tail start2,641,623 · 2022-06-09T00:28:57Z
    Difference2,110 blocks later

    The two heights differ because block-size penalties made some historical rewards smaller than the base reward. alreadyGeneratedCoins therefore grew more slowly, (MONEY_SUPPLY − already) stayed larger, and the real chain reached the 0.6 XMR floor about 2,110 blocks later. This site uses 2,639,513 inside the math engine and 2,641,623 only when describing what the real chain did.

  6. 06

    Step 06

    Sum Every Block

    Protocol expected supply is the running sum of base rewards from genesis through the latest mined block.

    A vertical stack of blocks, tall early ones and identical later slabs.
    Fig. 06
    protocolSupply(H) = sum over h = 0..H of baseReward(supply(h-1), h)
    
    After height 2639513:
    protocolSupply(H) = 18132171660159860661 + 600000000000 * (H - 2639512)
    Supply through height 2,639,51218,132,171.660159860661 XMR
    Each later block adds0.600000000000 XMR (base)
    So the curve becomesa straight line

    The sum is order-dependent - each reward depends on the running total - so the engine brute-forces every block up to the tail start and then switches to the exact O(1) closed form.

  7. 07

    Step 07

    What This Does Not Prove

    The number is an upper bound on issued subsidy, not a byte-for-byte on-chain coinbase sum.

    One open box beside a ring of sealed boxes: public coinbase, hidden amounts.
    Fig. 07
    protocolExpectedSupply - 1,266.386450309046 >= actualIssuedSubsidy
    
    because block 2641622 still paid above the floor:
    already(2641622) < MONEY_SUPPLY - 0.6e12 * 2^19
    Lost coinsnot measurable, not deducted
    Hidden RingCT outputsnot summed - ordinary amounts are private
    Transaction feesnot new supply
    Penalty shortfall (derived lower bound)≥ 1,266.386450309046 XMR overstated
    A row of bars with one taller bar whose top sliver is clipped: the block-size penalty.
    Fig. 07b - Penalty Haircut

    The gap is bounded, not guessed: because the real chain only hit the 0.6 XMR floor at height 2,641,623, its alreadyGeneratedCoins must have been at least 1,266.386450309046 XMR below the full-base-reward model - and since both series then grow by exactly 0.6 XMR per block, that gap never shrinks. Transfer soundness - that no hidden inflation happens inside RingCT - rests on range proofs / Bulletproofs that every node verifies, not on this page. See getmonero.org/2020/01/17/auditability.html. Nothing here should be read as a claim beyond the arithmetic shown.

Interactive

Compute Protocol Expected Supply At Any Height

Protocol expected supply (full base rewards) at a height of your choice, with the era, base reward and implied annual inflation.

Eratail
Approximate Date (Target Block Times)2022-06-06
Base Reward At This Height0.600000000000 XMR
Base Reward (Atomic)600,000,000,000
Cumulative Protocol Expected Supply18,132,172.260159860661 XMR
Implied Annual Inflation0.8702 %

Date → height is derived from target block times only and is approximate; height → supply is exact integer arithmetic. Annual inflation is the next 262,980 blocks of base rewards divided by supply at that height.

Charts

The Emission Curve, Drawn From The Engine

Protocol expected supply (full base rewards), sampled every 2,000 blocks straight from the same BigInt engine that produces the hero number - not from hand-entered figures.

Summing every block from genesis to build the chart series…

Live Identity Card

Where The Chain Is Right Now

Protocol expected supply (full base rewards) alongside the live height reported by public no-key APIs.

Live Identity Plate

Chain Tip Reported By Source (Latest Mined Block)-
Height Used For The Sum (Blocks 0 … Tip)-
Era-
Base Reward-
Latest Reported Coinbase Reward (API)not reported
Protocol Expected Supply (Full Base Rewards)computing…
Upper Bound Minus Proven Penalty Shortfallcomputing…
Target Daily Emission432 XMR (720 × 0.6)
Target Yearly Emission157,788 XMR (262,980 × 0.6)
Instant Annual Inflation-
Height Sourceloading…

The reported coinbase reward can exceed the 0.6 XMR base reward because it includes transaction fees, and can fall below it when an oversized block pays the quadratic block-size penalty. Fees are recycled coins, not new issuance. The chain tip is read directly from the source - no ±1 block adjustment is applied.

Tail Emission

Why Monero Never Stops Paying Miners

Protocol expected supply (full base rewards) grows linearly forever, by design.

Why The Tail Exists

  • The miner security budget must not fall to zero. A chain whose subsidy decays to nothing has to pay for proof of work entirely out of fees.
  • Monero has a dynamic block size, so blocks are not a scarce fixed resource. A fee-only market on an elastic block size is an unreliable way to fund security.
  • The tail pays a base reward of 0.6 XMR per 2-minute block - or less, when a block is oversized and pays the block-size penalty.

Source: Moneropedia, “Tail Emission” - getmonero.org/resources/moneropedia/tail-emission.html

Two Tail Heights

theoretical tail start = 2639513
observed mainnet start = 2641623  (2022-06-09T00:28:57Z)

Block-size penalties made some historical rewards smaller than the base reward, so alreadyGeneratedCoins grew more slowly, (MONEY_SUPPLY − already) stayed larger, and the 0.6 XMR floor was reached about 2,110 blocks later on the real chain.

Steady-state emission: 157,788 XMR per year (262,980 blocks × 0.6), or 157,680 XMR using the cruder 365-day approximation. That is a fixed number of coins per year, so inflation is a falling percentage of a growing supply.

Verify It Yourself

Do Not Trust This Page - Reproduce It

Protocol expected supply (full base rewards) is reproducible from a full node and from the official source code.

Sum The Real Coinbases Yourself

Coinbase amounts are public even though ordinary transaction amounts are hidden. A full node will add them up for you.

monerod
# in the monerod console
print_coinbase_tx_sum 0 <height>

# or over RPC
curl http://127.0.0.1:18081/json_rpc \
  -d '{"jsonrpc":"2.0","id":"0","method":"get_coinbase_tx_sum",
       "params":{"height":0,"count":<height>}}' \
  -H 'Content-Type: application/json'

The daemon result is the actual on-chain coinbase sum including fees paid to miners; it will not equal the protocol expected supply on this page exactly. Subtract fees and expect the issued total to be slightly below this page's upper bound.

Read The Code, Check Another Checker

  • Consensus formula: monero/src/cryptonote_basic/cryptonote_basic_impl.cpp → get_block_reward()
  • Constants: monero/src/cryptonote_config.h
  • Independent checker: moneroinflation.com