BlockEmission

Storage Plain v101 → current

Holds 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 chain
Queried by: validatorsminersanalyticsdevelopersstakers

The 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
Part of: Block Emission

Stored Value

Value in RAO (÷10⁹ for TAO)

RAO -> TAO (/ 10^9)

Default Value

1000000000 0x00ca9a3b00000000

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