Emission
Emission is the economic heartbeat of Bittensor—the process that continuously distributes newly created TAO and subnet-specific alpha tokens to network participants who contribute value through mining, validation, staking, and subnet creation.
As of June 2026: Bittensor has reverted to a price-based model for determining how TAO emissions are distributed across subnets. Each subnet's share of block emissions is proportional to its EMA (Exponential Moving Average) token price, normalized over all subnets with emissions enabled.
See:
Injection and Distribution: Two-Stages of the Emissions Process
Bittensor's emission system operates through two stages, reflecting the system's hierarchical, competitive nature:
-
Injection: Every block, new liquidity flows into each subnet's liquidity pools, based on subnet performance.
-
Distribution: At the end of each tempo (default ~360 blocks; owner-configurable), accumulated rewards within each subnet are distributed to the subnet's participants through Yuma Consensus, which evaluates individual performance and determines who deserves what share.
Subnet owners can also manually trigger an epoch via the trigger_epoch extrinsic on the SubtensorModule pallet. This operates independently of the automatic epoch schedule and allows an epoch to be executed on demand.
See also:
- Coinbase Implementation in the Subtensor codebase
- Yuma Consensus
- Dynamic TAO White Paper
Injection
The first stage of emissions is injection of liquidity into the subnet pools. Each subnet receives liquidity in proportion to its EMA token price relative to all other emission-enabled subnets.
Each block:
- TAO is injected into the subnet's TAO reserve: the amount for each subnet is determined by the emission distribution formula (see below)
- Alpha is injected into the subnet's alpha reserve: proportional to TAO injection to maintain price stability
- Alpha is allocated to alpha outstanding: set aside to be distributed by participants (miners, validators, stakers, subnet owner)
Distribution across Subnets
TAO emissions across subnets are determined by a price-based model. Each subnet's emission share is proportional to its EMA price (SubnetMovingPrice), normalized over all emission-enabled subnets — so subnets with higher EMA prices attract a greater share of block emissions. Emission-disabled subnets receive zero and their share is redistributed proportionally to enabled subnets.
From November 2025 to June 2026, emission shares were determined by a flow-based model that used an EMA of net TAO flows (staking minus unstaking activity) rather than price. That model's share logic (get_shares_flow()) is now deprecated.
TAO reserve injection
A subnet's TAO reserve injection is determined by its emission share, calculated from its EMA price (SubnetMovingPrice) relative to the sum of EMA prices across all emission-enabled subnets.
How it's calculated
Each subnet's share of the fixed block emission is weighted by three factors, then normalized over all emission-enabled subnets:
where:
- =
SubnetMovingPrice— the subnet's EMA price (not the live spot price) - =
root_proportion= — shrinks as a subnet ages, reallocating emission toward newer subnets - =
MinerBurned— the proportion (0–1) of the most recent tempo's miner incentive that was withheld because the recipient hotkey is owned by the subnet owner. Penalizes subnets that withhold miner emission, regardless of whether that emission is recycled or burned
TAO injected into subnet per block is then:
Fallback: if the combined weight is zero across all subnets (e.g. no root stake, or every subnet withholding all miner emission), get_shares falls back to unweighted price shares — — so block emission is never stranded.
Implementation: Share calculation: get_shares() → get_shares_price_ema() in subnet_emission.rs
Subnets with emission disabled receive zero share, and their portion of the block emission is redistributed proportionally to all emission-enabled subnets.
Alpha reserve injection
Alpha is injected in proportion to the price of the token, so that growth of a subnet's liquidity pools does not change the price of the alpha token.
See how it's calculated!
Recall that token price for a subnet is its TAO in reserve divided by its alpha reserve:
So in order to inject alpha without changing the price, it should follow:
When we fill in this equation with the previous formula for