Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 27 additions & 13 deletions docs/concepts/halving.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,48 @@
---
title: "TAO Halving"
title: "Halving Mechanisms in Bittensor"
---

# TAO Halving
# Halving Mechanisms in Bittensor

This page explains the TAO halving mechanism and describes how it affects the creation and distribution of new tokens across the network.
This page explains the TAO and ALPHA halving mechanisms and describes how it affects the creation and distribution of new tokens across the network.

## What is TAO Halving?
---

**TAO halving** is a scheduled event in the Bittensor network where the block reward is reduced by 50%. This happens automatically at regular intervals based on the amount of TAO in circulation.
A halving is a mechanism that automatically reduces the rate at which new tokens are created and distributed by 50%. The Bittensor network implements two distinct and independent halving mechanisms:

Follow the approach of the halving at TAO.app's tokenomics dashboard: [tao.app/tokenomics](https://www.tao.app/tokenomics)
- **TAO Halving**: Reduces TAO emission rate by 50% at supply-based thresholds
- **Alpha Halving**: Reduces emission rate of a subnet's Alpha tokens by 50%

Both mechanisms work together to control token supply and maintain network economics.

## TAO Halvings

:::info
A TAO Halving occurs when the total TAO issuance reaches predetermined thresholds. This happens automatically at regular intervals based on the amount of TAO in circulation.

Before a halving event, the network emits TAO at its current block reward, with the full amount flowing into subnet pools. Once a halving occurs, the block reward is reduced by 50%, which lowers the daily TAO emission and cuts subnet pool injections in half.

Follow the approach of the halving at TAO.app's tokenomics dashboard: [tao.app/tokenomics](https://www.tao.app/tokenomics)

:::info Impact of TAO Recycling
_Recycling_ of TAO from subnet registration fees can delay halving events. When tokens are recycled, they are returned to the emission pool and removed from circulation. This process continuously extends the time until the next halving threshold is reached.
:::

## TAO halving Mechanism
### Effect on Alpha Emissions

Halving occurs when the total TAO issuance reaches predetermined thresholds. Before a halving event, the network emits TAO at its current block reward, with the full amount flowing into subnet pools. Once a halving occurs, the block reward is reduced by 50%, which lowers the daily TAO emission and cuts subnet pool injections in half.
Alpha emissions are split into two distinct components that respond differently to the halving. During a TAO halving, the portion of Alpha tokens that is injected into subnet pools alongside TAO will halve, since it is directly proportional to the subnet's TAO injections to maintain the current price ratio. In contrast, Alpha rewards distributed to miners, validators, and subnet owners do not halve and will remain constant.

### Effect on Alpha Emissions
In simple terms, [Alpha pool injections](../learn/emissions.md#alpha-reserve-injection) decrease with TAO halvings, but participant [Alpha rewards](../learn/emissions.md#alpha-outstanding-injection) remain unchanged during a TAO halving.

## Alpha Halvings

Alpha halving refers to the halving of Alpha emissions when a subnet's total Alpha issuance reaches predetermined threshold. Unlike TAO halvings which affects the entire network, Alpha halvings operate at the subnet level and affect Alpha token emissions within each subnet.

Alpha emissions are split into two distinct components that respond differently to the halving. The portion of Alpha tokens that is injected into subnet pools alongside TAO will halve, since it directly tracks TAO emissions at the current price ratio. In contrast, Alpha rewards distributed to miners, validators, and subnet owners do not halve and will remain constant. In simple terms, Alpha pool injections decrease with TAO, but participant Alpha rewards stay unchanged.
During an Alpha halving, the amount of Alpha distributed to miners, validators, and subnet owners each block is reduced by half, and this adjustment applies uniformly to all participants within that subnet.

## Summary

- TAO halving reduces emission rate by 50% at supply-based thresholds
- TAO and Alpha halvings reduce emission rate by 50% at supply-based thresholds
- Timing depends on total issuance, not block numbers
- Recycling can delay halving events
- TAO emissions and Alpha pool injections halve; Alpha participant rewards remain constant
- TAO emissions and Alpha pool injections halve while Alpha participant rewards remain constant during a TAO halving
- Current daily emission: ~7,200 TAO → ~3,600 TAO after first halving
37 changes: 19 additions & 18 deletions docs/learn/emissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ import useBaseUrl from '@docusaurus/useBaseUrl';

Emission is the economic heartbeat of Bittensor—the process that continuously distributes newly created [TAO](../resources/glossary.md#tao-τ) and subnet-specific alpha tokens to network participants who contribute value through [mining](../resources/glossary.md#subnet-miner), [validation](../resources/glossary.md#validator), [staking](../resources/glossary.md#staking), and [subnet creation](../resources/glossary.md#subnet-creator).


:::tip Flow-Based Emissions ("Taoflow") Now Active
**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:

- [How flow-based injection works](#tao-reserve-injection)
- [Rationale for the flow-based model](#rationale-for-flow-based-emissions)
:::
:::

## Injection and Distribution: Two-Stages of the Emissions Process

Bittensor's emission system operates through two stages, reflecting the system's hierarchical, competitive nature:
Bittensor's emission system operates through two stages, reflecting the system's hierarchical, competitive nature:

- **Injection**: Every [block](../resources/glossary.md#block), new liquidity flows into each subnet's liquidity pools, based on subnet performance.

Expand All @@ -47,12 +47,14 @@ Each block:
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

- 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
Expand All @@ -71,51 +73,51 @@ The flow-based model uses an Exponential Moving Average (EMA) of net TAO flows (

2. **Calculate EMA**: Update the 86.8-day EMA of net flows (smoothing factor $\alpha \approx 0.000003209$):
$$S_i = (1 - \alpha) \cdot S_{i-1} + \alpha \cdot \text{net\_flow}_i$$

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.

3. **Apply offset and clipping**: Calculate offset flows by subtracting the lower limit $L$:
$$z_i = \max(S_i - L, 0)$$
where $L = \max(\text{FlowCutoff}, \min_{j} \min(S_j, 0))$

This step ensures subnets with negative net flows get zero emissions. The lower limit $L$ 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.

4. **Power normalization**: Apply power $p$ to adjust distribution characteristics:
$$\text{share}_{\text{flow}}(i) = \frac{z_i^p}{\sum_{j \in \mathbb{S}} z_j^p}$$
This converts the offset flows into proportions that sum to 1 (100%). With $p = 1$ (default), this is just dividing each subnet's offset flow by the total across all subnets, creating a linear relationship. Higher $p$ values favor subnets with stronger flows.

This converts the offset flows into proportions that sum to 1 (100%). With $p = 1$ (default), this is just dividing each subnet's offset flow by the total across all subnets, creating a linear relationship. Higher $p$ values favor subnets with stronger flows.

5. **Final TAO injection**: Multiply the share by total block emission to get actual TAO amount:
$$\Delta\tau_i = \Delta\bar{\tau} \times \text{share}(i)$$

This converts the proportions into actual TAO amounts. The total block emission $\Delta\bar{\tau}$ is 1 TAO per block.


With the default $p = 1$ ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1293-L1295)), 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 $p = 1.5$, 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](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1302-L1308))
- **Power exponent**: $p = 1$ (linear/proportional) ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1293-L1295))
- **Flow cutoff**: 0 (only negative flows clipped) ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1285-L1288))
- **EMA Initialization**: New subnets start with EMA = min(moving_price, current_price) ([code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L77-L84))

**Implementation**:
**Implementation**:

- Flow tracking: [`record_tao_inflow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L36-L40) and [`record_tao_outflow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L42-L46), called during stake/unstake
- Share calculation: [`get_shares()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L214-L216) → [`get_shares_flow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L181-L211)

:::info Exceptions to Inflows/Outflows
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.
While stake/unstake operations are recorded as inflows or outflows, swaps like the `burned_register` (UID registration) and the root claim are excluded.

See [Calculating root proportion](../navigating-subtensor/emissions-coinbase#6-calculating-root-proportion).
:::


</details>

#### 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.
Alpha is then 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.

<details>
<summary><strong>See how it's calculated!</strong></summary>
Expand Down Expand Up @@ -173,9 +175,10 @@ Under the new flow-based model, subnets that have negative net TAO flows (more u
- Difficulty attracting new participants

To maintain positive emissions, subnet owners should focus on:

- Building genuine utility that attracts long-term stakers
- Creating sustainable value that encourages TAO inflows
:::
:::

### Distribution

Expand Down Expand Up @@ -214,7 +217,6 @@ At the end of each tempo (~360 blocks), the quantity of alpha accumulated over e

See [Core Dynamic TAO Concepts: Validator stake weight](../subnets/understanding-subnets#validator-stake-weight)


## Rationale for Flow-Based Emissions

The shift from price-based to flow-based emissions addressed several fundamental issues with the original model, as explained by Bittensor co-founder Jacob Steeves (a.k.a., Const) in the [October 30, 2025 episode of Novelty Search](https://www.youtube.com/live/40ug9nbYW9U?si=H6mTnO2pwqwtE25U):
Expand All @@ -224,7 +226,7 @@ The shift from price-based to flow-based emissions addressed several fundamental
The new model measures emissions contribution "per unit liquidity" to eliminate structural advantages:

- **Old model problem**: Small subnets with low liquidity are devastated by minor sell pressure, while large subnets with high liquidity can absorb massive selling with minimal emission impact
- **New model solution**: All subnets are evaluated by their net TAO flow. Because this is the difference between in-flow and out-flow of TAO, it is scale-invariant and does *not* favor subnets with larger total liquidity pools, leveling the playing field.
- **New model solution**: All subnets are evaluated by their net TAO flow. Because this is the difference between in-flow and out-flow of TAO, it is scale-invariant and does _not_ favor subnets with larger total liquidity pools, leveling the playing field.

### Preventing "TAO Treasury" Gaming

Expand Down Expand Up @@ -272,4 +274,3 @@ style={{width: 650}}
</center>

<br />

12 changes: 11 additions & 1 deletion docs/resources/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ A unit of data in the Bittensor blockchain, containing a collection of transacti

**See also:** [Subtensor API](../sdk/subtensor-api.md)

### Blockchain validator

A node that participates in the Subtensor blockchain’s consensus mechanism to produce and validate blocks. Blockchain validators operate at the blockchain level, not within individual subnets.

#### Blockchain validator vs subnet validator

A blockchain validator participates in the network-wide consensus by validating transactions, producing blocks, and participating in network-wide consensus. In contrast, a subnet validator operates only within a specific subnet's consensus mechanism, where it evaluates miners' tasks and performances.

Blockchain validators function at the core consensus layer and affect the entire network, while subnet validators belong to the application layer and influence only local subnet incentives and rewards.

### Burn cost

This refers to the required amount of TAO to be recycled when creating a new subnet, i.e., cost of registering a new subnet.
Expand Down Expand Up @@ -904,7 +914,7 @@ A list of subnet IDs (netuids) indicating which subnets a delegate is authorized

**See also:** [Validator Permits](#validator-permit), [Delegation](../staking-and-delegation/delegation.md), [Validator Requirements](../validators/index.md#requirements-for-validation)

### Validator
### Validator (or subnet validator)

A type of node in a subnet that creates tasks, evaluates the performance of subnet miners and sets weights based on their output. A subnet validator is connected only to subnet miners and to the external world. Subnet validators receive inputs from the external world and communicate bidirectionally with subnet miners.

Expand Down