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 November 2025: Bittensor has transitioned to a flow-based model ("Taoflow") for determining how TAO emissions are distributed across subnets. Emissions are now based on net TAO inflows due to staking activity, rather than token prices as previously.
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 (waiting period of ~360 blocks, ~72 minutes), 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.
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. Liquidity is injected to each subnet based on either price (legacy model) or net TAO flows (new model), or a weighted combination during the transition period.
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 now determined by a flow-based model:
Flow-Based Model (Active as of November 2025)
- Emissions based on net TAO inflows, i.e. TAO that has flowed into the subnet minus TAO that has flowed out, from staking/unstaking activity
- Rewards subnets that attract genuine user engagement
- Subnets with negative net flows (more unstaking than staking) receive zero emissions
- More dynamic and responsive than the previous price-based approach
Previous Price-Based Model (No Longer Active)
- Emissions were proportional to smoothed subnet token prices
- Created "price inertia" effects where established subnets maintained high emissions even during mass unstaking
- Was vulnerable to "TAO treasury" gaming strategies
TAO reserve injection
A subnet's TAO reserve injection is determined by its emission share, calculated based on net flow of TAO in and out of the subnet's TAO liquidity pool due to staking/unstaking.
How it's calculated
The flow-based model uses an Exponential Moving Average (EMA) of net TAO flows (staking minus unstaking):
-
Track net flows: Each block, record TAO inflows from staking and outflows from unstaking:
-
Calculate EMA: Update the 86.8-day EMA of net flows (smoothing factor ):
The EMA smooths out short-term fluctuations. With a very small α (~0.000003209), the EMA changes slowly 99.9999968% comes from the previous EMA value and only 0.0000032% from the current block's flow. This creates a 30-day half-life, meaning it takes about 30 days for the EMA to move halfway toward a new sustained flow level. This results in an EMA window of approximately ~86.8 days.
-
Apply offset and clipping: Calculate offset flows by subtracting the lower limit : where
This step ensures subnets with negative net flows get zero emissions. The lower limit is set to the most negative EMA across all subnets (or FlowCutoff if higher). By subtracting this from each subnet's EMA, we "lift" all values so the worst-performing subnet gets 0.
-
Power normalization: Apply power to adjust distribution characteristics:
This converts the offset flows into proportions that sum to 1 (100%). With (default), this is just dividing each subnet's offset flow by the total across all subnets, creating a linear relationship. Higher values favor subnets with stronger flows.
-
Final TAO injection: Multiply the share by total block emission to get actual TAO amount:
This converts the proportions into actual TAO amounts. The total block emission is 1 TAO per block.
With the default (source), this creates linear/proportional distribution: a subnet with 2× the flow receives exactly 2× the emissions. The parameter can be adjusted to create winner-takes-more dynamics if desired (e.g., with , a subnet with 2× flow would get 2.83× emissions).
Key Parameters:
- EMA smoothing factor: 30-day half-life (results in ~86.8 day EMA window) (source)
- Power exponent: (linear/proportional) (source)
- Flow cutoff: 0 (only negative flows clipped) (source)
- EMA Initialization: New subnets start with EMA = min(moving_price, current_price) (code)
Implementation:
- Flow tracking:
record_tao_inflow()andrecord_tao_outflow(), called during stake/unstake - Share calculation:
get_shares()→get_shares_flow()
Flow tracking does not include root proportion.
While stake/unstake operations are recorded as inflows or outflows, swaps like the burned_register (UID registration) and the root claim are excluded.
Alpha reserve injection
Alpha is then injected in proportion to the price of the token, so that growth of a subnet's liquidity pools does not 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 , the price is cancelled out of the equation, yielding: