Skip to content

Price-based subnet emission shares (with miner-burn scaling)

Each block, Subtensor computes the slice of TAO emission going to each emit-enabled subnet. The share is no longer a TAO-flow function. It is now:

share_i ∝ root_proportion_i × price_i × (1 − miner_burned_i)

renormalized across emit-enabled subnets. Three signals compose:

  1. price_i — the subnet’s exponential moving average price, SubnetMovingPrice, normalized across emit-enabled subnets. Market valuation of the subnet’s alpha drives its TAO slice.
  2. root_proportion_i — defined in Root Emissions as tao_on_root / (tao_on_root + alpha_issued). Shrinks as a subnet’s alpha issuance grows over time, so this term reallocates emission away from older subnets toward newer ones, easing entry for newly-registered subnets.
  3. (1 − miner_burned_i)MinerBurned is the proportion of the subnet’s last-tempo miner (incentive) emission that was withheld from miners by being directed to owner-owned or owner-immune hotkeys. Subnets that burn more of their miner emission receive proportionally less chain emission; the deficit reallocates to non-burning subnets.

If the combined weighted sum is zero (e.g. all subnets at full burn, or no root stake on any subnet), the chain falls back to root_proportion × price shares — i.e. the formula drops the (1 − miner_burned) term but keeps root_proportion. There is no path that resolves to raw unweighted price.

The live behavior is the composition of two PRs, both on chain:

  • get_shares replaces the TAO-flow basis with SubnetMovingPrice. Emission is proportional to normalized price over emit-enabled subnets.
  • Alpha-injection cap becomes root_proportion × alpha_emission. The gap between alpha_emission and this cap is no longer minted as pool liquidity; it is routed into chain buys of alpha instead.
  • Affected emission tests updated; obsolete TAO-flow share tests removed.

The mechanical consequence: older, low-root_proportion subnets transition from receiving alpha as liquidity injection to receiving it via on-chain buys. This is a structural shift in how alpha enters circulation and is the change that makes the previous TAO-flow framing obsolete.

  • New per-subnet storage MinerBurned: NetUid → U96F32 holding the proportion (0..1) of each tempo’s miner emission withheld via owner or owner-immune hotkeys. Set every tempo from the incentive-distribution path, where validator-set incentive weights determine which hotkeys receive emission.
  • get_shares reweighted by (1 − miner_burned) and renormalized.
  • Recycle bypass closed. Miner emission directed to an owner/immune hotkey counts toward the burn whether it is Burn or Recycle under the subnet’s RecycleOrBurn config. There is no toggle that escapes the penalty.
  • All-full-burn fallback added: if every emit-enabled subnet’s (1 − miner_burned) is zero (or the weighted sum is otherwise zero), the share formula falls back to root_proportion × price so emission still flows.
  • Dissolve cleanup. MinerBurned is cleared when a subnet is removed, so deregistered subnets leave no stale proportion in storage.
  • Test coverage added for no-burn, partial burn, full burn, all-full-burn fallback, and root_proportion-favoring-newer-subnets cases.
  • Owner-self-emission is now penalized at the chain level, not just socially. Subnets routing miner incentive to owner/immune hotkeys via validator-weight choices get proportionally less chain emission the next tempo. The penalty applies whether the withheld incentive is burned or recycled — no RecycleOrBurn toggle escapes it.
  • root_proportion works in your favor when you’re new. A newly registered subnet has a relatively high root_proportion (low alpha issuance), giving it a structurally larger share for a given price than an older subnet at the same price. Entry is materially eased.
  • Alpha supply for low-root_proportion subnets shifts to chain buys. Pool depth dynamics change: less fresh alpha minted as liquidity, more TAO going into on-chain buy-side pressure on alpha. Expect different slippage and order-flow profiles on older subnets.
  • Emission allocation is market-driven via the EMA, not validator-flow. A subnet’s TAO slice is now set by SubnetMovingPrice × the two scaling terms, not by aggregate validator TAO weight. Validator weights still determine within-subnet incentive distribution (and now feed back into MinerBurned), but no longer determine between-subnet TAO allocation directly.
  • MinerBurned is set by validator weights every tempo. If validators weight an owner/immune hotkey, that incentive is “withheld” from the miner pool and counts toward the subnet’s burn proportion next tempo.
  • TAO-flow framing is dead. Any explainer, dashboard label, or analysis that treats subnet emission as a function of validator TAO flow is now describing pre-2779 behavior. Mental model: emission share is a function of price, age (via root_proportion), and owner-extraction behavior (via MinerBurned).
  • PR #2779get_shares price-EMA basis + root_proportion × alpha_emission cap. Author: gztensor.
  • PR #2781MinerBurned storage, (1 − miner_burned) reweighting, recycle/burn equivalence, dissolve cleanup, all-full-burn fallback. Author: unconst.
  • Code anchors (subtensor main):
    • pallets/subtensor/src/coinbase/run_coinbase.rsget_subnet_terms (root_proportion-capped alpha injection), MinerBurned::insert(netuid, withheld_proportion) at the end of the incentive distribution loop.
    • root_proportion definition consumed via Self::root_proportion(netuid).
    • SubnetMovingPrice and the EMA update logic live alongside the swap interface; consult pallets/subtensor/src for the exact half-life parameter.

Cross-references that need follow-on edits

Section titled “Cross-references that need follow-on edits”

These pages still frame emission in pre-2779 terms and should be updated to point here:

  • 2026-06-22. PR #2779 detected (testnet merge), stub explainer drafted.
  • 2026-06-23. PR #2781 merged, system composed live on chain. This page rewritten as a current-state explainer. Doug fact-checked the parameter definitions. Rufus deep-dive on SubnetMovingPrice EMA params outstanding.