The emission gate (spec 440)
Live on mainnet (spec 440)This change is live on mainnet — spec version 440, confirmed on Finney
viastate_getRuntimeVersion. The figures below are a point-in-time snapshot
(block 8,714,269, 2026-07-27) and will drift as demand and the bar θ move.
The short version
Every block, the chain hands out TAO emission and each subnet competes for a
slice. Until spec 440, a subnet's slice was simply proportional to how much
the market wanted it — twice the demand earned twice the emission. Spec 440
adds a gate: it draws a line, lets the sought-after subnets keep their full
slice, chokes the barely-wanted ones toward zero, and hands the freed-up
emission back up to the top.
How "wanted" a subnet is — its demand — is measured exactly as before. Only
how that demand turns into emission changed.
What was the answer is now an inputThe quantity
price × (1 − miner_burned), renormalized — which our
price-based emission shares
page described as the emission share — is now the demands: the identical
math, but used as the input to the gate instead of being the final answer.
1 · Building demand (s) — same math as before
s) — same math as beforeDemand is built in three steps, unchanged from the price-based-shares design:
- Step A — price. Each subnet's raw demand is its moving alpha price —
the EMA of its alpha token's price against TAO from the AMM pool
(get_moving_alpha_price). Staking TAO into a subnet's pool bids its price up:
higher price = more demand. Because it's an EMA, a one-block spike can't game it. - Step B — normalize into a share. Divide each subnet's price by the sum of
all prices → shares that sum to 1:sᵢ^price = movingPriceᵢ / Σⱼ movingPriceⱼ. - Step C — discount for miner burn, renormalize. Scale each share by
(1 − miner_burned)and renormalize:
sᵢ = sᵢ^price·(1 − minerBurnedᵢ) / Σⱼ sⱼ^price·(1 − minerBurnedⱼ). A
full burner → 0. The result is the demand sharesthat feeds the gate.
Miner burn is a heavy first-stage filter, not a footnote: in the 2026-07-27
snapshot, 35 of 128 subnets burned 100% of their miner emission (zeroed out
before the gate even sees them), 32 burned partially, and mean burn network-wide
was ~43%.
2 · The bar (θ) — where the line sits
θ ("theta") is a q-mass quantile on demand, recomputed every 360
blocks:
- Sort all subnets' demand shares largest → smallest.
- Walk down, accumulating the shares.
- The moment the running total crosses q = 0.61 (61% of all demand), stop.
The share you're standing on is θ, the bar.
Because shares sum to 1, "cumulative ≥ 0.61" means the top subnets together own
61% of demand. θ is a property of the demand distribution, not the subnet
count — spinning up empty subnets adds no demand, so it can't move the bar.
3 · The gate — a Hill function

The two forms are identical; the chain computes the right-hand one because s^h
underflows fixed-point precision for deep-tail shares, while the ratio θ/s
stays well-conditioned. h (default 3, sudo-settable 1–8) sets how sharp the
cliff is. The gate returns a number in [0, 1]:
Your demand s vs bar θ | gate(s) | Result |
|---|---|---|
| well above θ | → 1.0 | keep ~all your emission |
| exactly at θ | 0.50 | keep exactly half |
| well below θ | → 0.0 | emission choked toward zero |
Then: renormalize (the redistribution)

Gating shrinks every share, but the block still emits a fixed total. Dividing by
the new (smaller) sum scales the survivors back up — this is how the tail's lost
emission flows to the winners. A top subnet ends up emitting more than its raw
demand share.
Then one more redistribution — emission-enabled subnets only
After the gate, the chain checks SubnetEmissionEnabled for each subnet. Any
subnet with it set to false has its gated share zeroed and redistributed to
the enabled subnets (a second renormalize over the enabled set only). This is a
separate switch from miner burn — a subnet can clear every filter, survive
the gate, and still be zeroed here. It's the final stage, and it's why the live
emission a subnet actually receives is slightly higher than the gate alone would
give.
4 · What it means
- Emission is no longer proportional to demand. Any APY or emission figure
that assumes a pro-rata split is now wrong for every subnet — winners are
understated, the tail overstated. - The tail gets crushed. In the snapshot, ~38% of demand (below-bar subnets)
collectively earned ~10% of emission. A low-demand subnet's emission — and its
miners'/validators' yield — drops sharply. - Miner burn is a first-stage filter. Before the gate runs,
(1 − miner_burned)
zeroes or shrinks a subnet's share. Any model that ignores burn will misplace
which subnets earn. - The bar moves. θ recomputes every 360 blocks from live prices, so which
subnets are "above the line" shifts as demand shifts. A static calculation
will drift. - Two sudo knobs.
q(default 0.61, bar height) andh(default 3, cliff
sharpness) are both root-settable — a governance change to either reshapes
every subnet's emission at once. - A separate emission-enabled switch runs last. After the gate, any subnet
withSubnetEmissionEnabled = falseis zeroed and its share redistributed to
the enabled subnets. It's independent of demand, burn, and the gate — a subnet
can survive everything else and still earn nothing.
Source provenance
- Code:
pallets/subtensor/src/coinbase/subnet_emissions.rs(v440 tag):
get_subnets_to_emit_to/get_shares/maybe_update_emission_gate_bar/
apply_emission_gate/get_subnet_block_emissions. - Spec: runtime version confirmed 440 on Finney (mainnet) via
state_getRuntimeVersion. - Snapshot: demand = moving alpha price × (1 − miner burn), read off-chain at
block 8,714,269 (2026-07-27 15:51 UTC), q = 0.61, h = 3, 126 emit-set
subnets. θ landed at rank 18 (SN83), 1.339%. Reconciles to the live per-subnet
emission Taostats displays (e.g. SN64 = 16.63% vs 16.67%).
See also: Price-based emission shares ·
Tao Emission ·
Subnet Emissions
Updated about 15 hours ago
