Documentation · Protocol
Minerva supply statement
docs/05-supply-statement.md · commit e561109 · 2026-10-23
Status: draft reconciled from code (2026-10-20). Numbers marked whitepaper are allocation targets that no genesis implements yet; numbers marked code are what the node and contracts in this repository enforce today.
1. Mined issuance (code)
Source: blockReward schedule in every Minerva genesis (network/clients/minerva-node/config/*/genesis.json),
paid by minervaBlockReward to the block winner only (no uncle rewards, no difficulty bomb,
disposalBlock: 0). Tests: the reward schedule test across halving boundaries in
params/mutations.
| Era | From block | Reward per block | Era issuance | Cumulative |
|---|---|---|---|---|
| 0 | 0 | 1 MRV | 10,500,000 MRV | 10,500,000 MRV |
| 1 | 10,500,000 | 0.5 MRV | 5,250,000 MRV | 15,750,000 MRV |
| 2 | 21,000,000 | 0.25 MRV | 2,625,000 MRV | 18,375,000 MRV |
| 3 | 31,500,000 | 0.125 MRV | 1,312,500 MRV | 19,687,500 MRV |
| 4 | 42,000,000 | 0.0625 MRV | 656,250 MRV | 20,343,750 MRV |
| 5 | 52,500,000 | 0.03125 MRV | 328,125 MRV | 20,671,875 MRV |
| ... | halving every 10,500,000 blocks | |||
| 60 | 630,000,000 | 0 | 0 | 21,000,000 MRV |
- Total scheduled issuance: 21,000,000 MRV (sum of the schedule, 61 entries, zero from the 61st).
- No tail emission: from block 630,000,000 the only miner revenue is transaction fees.
- Base fee split (decision D8, implemented): from the emission activation the block producer
receives the priority fee plus 30 % of the base fee; 70 % of the base fee is burned
(
MinervaBaseFeeMinerShare, verified byTestMinervaBaseFeeSplitand live bypnpm devnet:migration-smoke, which reconciles a block's coinbase delta).
2. Genesis allocations
| Allocation | Amount | Whitepaper or code | Where |
|---|---|---|---|
| Migration reserve (one-way claim programme) | 1,000,000 MRV | code (contract) + whitepaper (amount) | MinervaMigrationReserve at 0x...0205 in every Minerva genesis; funded with 1,000,000 MRV on minerva-devnet (exercise only) and on mainnet when its genesis is built; 0 on testnet |
| Treasury (vested) | 3,000,000 MRV | whitepaper | not in any genesis; vesting not built |
| Liquidity and audits | 1,500,000 MRV | whitepaper | not in any genesis |
| Mining | 21,000,000 MRV | code | schedule above |
| Cap | 26,500,000 MRV | whitepaper | not enforced by code beyond the mining schedule; the 1,000,000 migration reserve sits inside this cap; no other allocation exists |
Development profiles prefund accounts that are not allocations:
| Profile (chain id) | Prefund | Purpose |
|---|---|---|
minerva-devnet (77137) |
1,000,000 MRV to the devnet PQ account | local development and smokes |
minerva-testnet (77138) |
none; the faucet is paid from mined MRV | public testnet |
A Minerva mainnet genesis does not exist yet; when it is built, this table becomes its source of truth and the migration reserve, treasury and liquidity lines must appear as genesis balances of contracts with their own ledgers (vesting, one-way claim path).
3. Migration reserve and claims to date
MinervaMigrationReserve (network/contracts/src/MinervaMigrationReserve.sol, system address
0x...0205) holds the allocation and pays it through a one-way claim path: the controller (a
PQ-controlled account written into storage slot 0 at genesis) publishes one Merkle root over
(recipient, amount) leaves with a claim deadline; each leaf is claimable once and only to its
recipient; after the deadline the controller sweeps the remainder to a named treasury; nothing
claimed can come back as a claim. ledger() returns reserve, allocated, claimed, outstanding and
swept. Evidence: 6 Foundry tests and pnpm devnet:migration-smoke (root set once, claim once,
re-claims and bad proofs refused, ledger reconciles).
Claims to date on a public network: 0 (no public Minerva network yet). The eligibility snapshot that produces the root is a governance decision and must be published with the root.
4. Burned base fees to date
Devnet only; no public Minerva network is running. The reconciliation for a public network is
sum(baseFeePerGas * gasUsed) over all blocks, which the explorer will publish once the testnet
launches.
5. Bridge inventory per ledger category
The vaults expose their ledgers on-chain (bridge/):
- Ethereum
MRVBridgeLiquidityVault.ledger():lp,protocol,queuedWithdrawals,reserved,balance, withbalance == lp + protocol + queuedWithdrawalsandreserved <= lp + protocol. - Minerva
MinervaNativeBridgeVault.ledger():lpInventory,protocolInventory,escrow,balance, withbalance == lpInventory + protocolInventory + escrow(escrow is the outstanding refund liability). - Sepolia deposit adapter:
balance == escrowedMRV + settledLpMRV + settledProtocolMRV.
These identities are fuzzed by LedgerInvariants.t.sol. Live figures belong to the public
testnet status page, not to this statement.
6. Long-run security budget
After block 630,000,000 the scheduled issuance is zero. Security then rests on fees alone: priority fees plus 30 % of base fees to miners, 70 % of base fees burned (D8, implemented). The split changes the miner share of fees, not the 21,000,000 MRV issuance.
