Skip to main content
SUBMIT A PRSUBMIT AN ISSUElast edit: May 26, 2026

Exponential Moving Averages (EMAs) in Bittensor

The exponential moving average (EMA) is a mathematical technique for tracking a dynamic quantity, such as a token price, over time. Specifically, EMA is a weighted moving average that exponentially decreases the weight of older data point. This extracts a signal reflecting where the value has spent most of its time most recently, stabilizing or 'smoothing' the constant noise of rapid, largely random fluctuations.

Bittensor uses EMAs to smooth two critical dynamical values during the emission process:

  • Emissions to each subnet are determined by an EMA-smoothed representation of net TAO flows (staking minus unstaking activity). This protects emissions from short-term fluctuations and manipulation attempts.

  • Emissions to participants of each subnet are determined by EMAs of instantaneous validator-miner bond-strengths. This plays an important role in ensuring that validators and miners are fairly rewarded for innovation, as measured by eventual consensus (rather than immediate consensus) about miner weights.

Mathematical definition

The EMA of a changing value at a given time is determined by weighted average of the current value and the EMA at the last time step. The parameter factor, or 'smoothing factor' is called α\alpha.

EMA(t)=α×current+(1α)×EMA(t1)\mathrm{EMA}^{(t)} = \alpha \times \mathrm{current} + (1 - \alpha) \times \mathrm{EMA}^{(t-1)}

The alpha parameter controls how quickly the EMA responds to changes:

  • Small α\alpha (e.g., 0.01): Very slow response, high stability, takes many periods for significant changes
  • Large α\alpha (e.g., 0.5): Fast response, lower stability, quickly incorporates new information
  • α\alpha = 1: No smoothing (immediate response to current value)
tip

Note that this alpha parameter is distinct from and unrelated to the usage of 'alpha' to refer to subnet-specific currencies.

Subnet Flow Emission Smoothing

This use of EMA smoothing protects the network's economic model from manipulation by making emissions extremely slow to respond to changes in staking activity.

How It Works: The flow-based model uses an EMA to track net TAO flows (staking minus unstaking) over time, with a 30-day half-life (~86.8 day effective window):

Si=(1α)Si1+αnet_flowiS_i = (1 - \alpha) \cdot S_{i-1} + \alpha \cdot \text{net\_flow}_i

Key Parameters:

  • Smoothing factor (α\alpha): ~0.000003209 (creates 30-day half-life)
  • EMA window: ~86.8 days (effective duration over which old values still affect the running EMA)
  • Response characteristic: Very slow - 99.9997% from previous EMA, only 0.0003% from current block

This extremely slow EMA prevents:

  • Short-term gaming through temporary staking spikes
  • Price manipulation through wash trading
  • Flash attacks on emissions

Subnets with negative net flows (more unstaking than staking) receive zero emissions after the EMA reflects sustained negative flow.

Protocol Cost EMA

A second EMA runs alongside the user flow EMA, tracking per-block protocol cost for each subnet:

Pi(t)=(1α)Pi(t1)+αprotocol_costiP_i^{(t)} = (1 - \alpha) \cdot P_i^{(t-1)} + \alpha \cdot \text{protocol\_cost}_i

using the same smoothing factor α\alpha as the user flow EMA. The protocol cost each block is:

protocol_costi=TAO injected into pool+chain buysroot staker claims\text{protocol\_cost}_i = \text{TAO injected into pool} + \text{chain buys} - \text{root staker claims}

When NetTaoFlowEnabled = true (the default), the final flow used for emission shares is net flow rather than gross user flow:

neti=Sifmax(Pi,0)\text{net}_i = S_i - f \cdot \max(P_i, 0)

The normalization factor f=min(1, Σjmax(Sj,0) / Σjmax(Pj,0))f = \min(1,\ \Sigma_j \max(S_j,0)\ /\ \Sigma_j \max(P_j,0)) scales the protocol EMA so that the total protocol cost subtracted across all subnets never exceeds total positive user demand. When Pi<0P_i < 0 (root claims exceed protocol injections for a subnet), the term adds to net flow rather than subtracting — a benefit to that subnet.

Both EMAs are updated every block regardless of whether NetTaoFlowEnabled is on, so toggling the flag does not cause an EMA shock.

Flow-Based Model Active

As of November 2025, emissions are based on EMA of TAO flows rather than token prices. See Emissions for complete details.

See:

Validator-Miner Bond Smoothing

This smoothing function ensures that relationships between validators and miners evolve gradually, preventing sudden manipulation while rewarding validators who discover promising miners early.

Basic Bond EMA (Liquid Alpha Disabled)

Default Mode: Single α\alpha for all validator-miner pairs

  • Default α\alpha: ~0.1 (10%)
  • Response Time: 7-22 blocks for significant changes (~1-4 minutes)
  • Formula The EMA of the bond (BondEMA)of a validator i for a miner j, at time t, is the α\alpha-weighted average of the instantaneous bond and the previous timestep's BondEMA: BondEMAij(t)=α×InstantBondij+(1α)BondEMAij(t1)BondEMA_{ij}^{(t)} = \alpha \times \, InstantBond_{ij} + (1-\alpha)\,BondEMA_{ij}^{(t-1)}

Advanced Bond EMA (Liquid Alpha Enabled)

Consensus-Based Mode: Dynamic α\alpha per validator-miner pair based on consensus alignment

  • α\alpha Range: Dynamic between α\alpha_low and α\alpha_high (default: 0.7 to 0.9)
  • Sigmoid Steepness: Controls transition rate between α\alpha_low and α\alpha_high (default: 1000)
  • Individual Alpha: Each validator-miner pair gets its own α\alpha value
  • Response Time: 1-13 blocks depending on consensus alignment (~12 seconds to 2.6 minutes)

See Liquid Alpha/Consensus-Based Weights