BlockEmission
Storage Plain v101 → currentHolds the base emission constant of 1 TAO per block . The rate actually minted each block is derived from total issuance by calculate_block_emission, not read from here.
Explore chainThe Big Picture
Every block mints new TAO until issuance reaches the 21M cap. The minted amount is 1 TAO divided by 2^floor(log2(1 / (1 - issuance / 21M))), computed fresh from TotalIssuance on every call. Issuance passing 10.5M TAO took the rate to 0.5 TAO per block, 15.75M takes it to 0.25, and each subsequent halving needs half the remaining distance to the cap. This storage entry holds the 1 TAO numerator of that expression.
Why This Matters
Daily emission is the current rate times 7200 blocks per day at 12s blocks. Take the rate from calculate_block_emission or from the SubnetTAO/Emission entries, not from this value, which stays at 1 TAO across every halving.
Example Scenario
Query BlockEmission() returns 1000000000 (1 TAO in RAO). At runtime v454, with TotalIssuance at 11,316,160 TAO, floor(log2(1 / (1 - 11.316M / 21M))) is 1, so the chain minted 500000000 RAO per block, about 3,600 TAO per day across all subnets.
Common Questions
- Does this value change?
- No. Nothing in the runtime writes it, so it returns the 1 TAO ValueQuery default at every runtime version. The minted rate does change: it halves each time issuance covers half the remaining distance to the 21M cap.
- How is this distributed?
- Block emissions go to subnets based on root network weights. Each subnet then distributes to its neurons based on consensus.
- What happens at max supply?
- get_block_emission_for_issuance returns 0 once total issuance reaches TotalSupply, so nothing is minted. This entry still reads 1 TAO.
Use Cases
- Calculate expected rewards per epoch
- Estimate APY for staking
- Track emission schedule progress
- Build reward calculators
- Research tokenomics and inflation
Purpose & Usage
Purpose
Carries the pre-halving base rate that the emission curve divides down. The runtime reads the DefaultBlockEmission type value directly, so this entry is never written and always returns its 1 TAO default.
Common Query Patterns
- Read the base rate the halving curve divides down
- Anchor a supply model on the same constant the runtime uses
Stored Value
Value in RAO (÷10⁹ for TAO)
RAO -> TAO (/ 10^9)
Default Value
Absent keys read as this value — querying a key that has never been written returns this default, not an error or empty result.
Code Examples
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443
const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);
// Query BlockEmission storage (no keys - plain value)
const result = await api.query.SubtensorModule.BlockEmission.getValue();
console.log("BlockEmission:", result);Runtime Info
View Source- Pallet
- SubtensorModule
- Storage Kind
- Plain
- First Version
- v101
- Current Version
- v472