Every ledger header examined on Pi Mainnet reports 100,000,000,000 π, and the chain shows no issuance operation — consistent with the documented protocol rule that removed native issuance before Pi’s genesis.
Measured, not asserted: the number is read out of the raw header bytes — not the API’s summary — and those bytes are bound to the network by SHA-256, across a sweep from ledger 2 to the live head.
node examples/run-all.mjs
Status: self-tested. Not independently audited — an open request to break it.
The claim
| # | Claim | Status |
|---|---|---|
| A | totalCoins = 100,000,000,000 π on every ledger examined |
✅ Measured — 70-ledger sweep, raw XDR |
| B | Any single ledger’s supply is readable from its raw header bytes, tied by SHA-256 to the network’s hash chain | ✅ Verifiable |
| C | Circulating / “effective” supply, allocation, unlock schedules, price | ❌ Not claimed |
If someone says this proves “100 billion π are in circulation”, they are describing Claim C — which is not made here. Pi names that number differently and computes it off-ledger.
Claim A is a measurement. The step from “the field is constant” to “the protocol cannot increase it” is a separate, weaker statement — documented and observed, not proven from protocol source — and it is labelled as such throughout.
The evidence
| Observation | Value |
|---|---|
| Documented maximum supply | 100,000,000,000 π |
| Earliest ledger served | 2 — 2020-12-31T22:47:31Z — total_coins = 100000000000.0000000 |
| Ledger 1 | HTTP 410 Gone — the claim’s lower bound |
| Head at last retrieval | 29,284,884 — 2026-10-18T21:08:55Z — total_coins = 100000000000.0000000 |
| Ledgers sampled across the range | 70 |
| Ledgers not at the cap | 0 |
totalCoins from the raw XDR |
1000000000000000000 stroops |
inflationSeq from the raw XDR |
0 — the issuance counter has never moved |
sha256(header) vs the ledger hash |
equal on every header walked; adjacent headers chain by SHA-256 |
fee_pool |
0.0000000 at genesis → 11781341.5131664 at the head |
Why it is expected — and observed — not to move
Stellar’s ledger-header documentation is explicit: “Total coins — Total number of lumens in existence”, and the inflation sequence “no longer changes” because the inflation operation was deprecated at Protocol 12 on 10/28/2019.
inflation was the protocol’s only native-issuance operation. Pi’s genesis is 2020-12-31 — fourteen
months later — and Pi runs Protocol 28. Pi documents the cap itself, and states in its own words
that “all tokens were minted at the genesis as technically required by the blockchain protocol”.
A constant header field is not, by itself, an economic proof. The protocol clause here is documented and observed, scoped to the version verified in the runs above — not asserted as a promise about eternity.
Read more
| The proof, end to end | PROOF |
| The exact claim and its limits | docs/SCOPE |
| Every official source, verbatim, pinned | docs/SOURCES |
| How to falsify this | docs/FALSIFICATION |
| What each script asserts | docs/VERIFICATION |
| Every objection, one table | docs/FAQ-ALL-OBJECTIONS |
| An open request to break it | docs/AUDIT-REQUEST |
| What is defended, and what is not | docs/THREAT-MODEL |
One line, no code
curl -s https://api.mainnet.minepi.com/ledgers/2 | grep -o '"total_coins":"[^"]*"'
curl -s https://api.mainnet.minepi.com/ledgers?order=desc\&limit=1 | grep -o '"total_coins":"[^"]*"'
Both print "total_coins":"100000000000.0000000".
Honest limits. The sweep is a sample, not an enumeration. The lower bound is ledger 2,
because ledger 1 is not served. total_coins is a header field, not a sum of account balances.
Circulating supply is a different number. Pi’s Whitepaper reserves the question of future
inflation, so the claim is about the current protocol and the observable present — never about eternity.
The raw headers are hashed and chained locally, but the anchor hash still comes from the node
you query: use more than one independent endpoint, or run your own.