Data as of (block 9307813)
Methodology
AlphaCheck publishes estimates, not financial advice. The formulas below are the ones the calculator, subnet pages, and history files use. They follow the 2026-10-14 math audit of Finney runtime spec 478.
Assumptions
- Every figure comes from one chain snapshot. It is an estimate of that block, not a quote, a fill, or a prediction.
- The headline APY is a nominal annualized rate, so it can be compared with one epoch of realized dividends. Holding-period figures treat that APY as an annual rate and compound it daily: daily rate = (1 + APY)^(1/365) − 1.
- The owner cut is 18% (SubnetOwnerCut = 11796/65535). The remainder splits in half between miners and validators, so 41% reaches validators and stakers. Root receives
rootPropof that validator half. The validator take is applied on each leg after the split. - Subnet APY divides by staked alpha (
totalAlphaStaked). A missing value falls back to alpha outstanding. - The default validator take is the stake-weighted average of
Delegatestakes (take ÷ 65535). Hotkeys with stake and no Delegates entry are counted at a take of 0. The calculator can switch to one of the twelve largest validators, or to a custom take. Static pages use each subnet's average. - The swap fee is that subnet's
FeeRate÷ 65535. Where the chain stores no override, the fallback is 33/65535 (about 0.05%) on the buy and on the sell. - Pool weights come from
SwapBalancer: quote weight = quote ÷ 1e18, base weight = 1 − quote weight. A missing weight uses 0.5. At 0.5/0.5 the buy, the sell, and the scenario reserves match a constant-product pool. - A price scenario rebuilds the reserves so the spot price moves by the chosen percent while the weighted invariant stays fixed. Emission injection that deepens the pool, and other people's trades, are left out of that path.
- Root APY sells one epoch of each subnet's root alpha into that subnet's current pool, then annualizes the TAO. It does not sell a full year in one trade. The root benchmark uses each subnet's own average take. Your root stake itself stays in TAO.
- Tempo is per subnet. Epochs per year are 7,200 × 365 ÷ (tempo + 1). A missing tempo uses 360, which is about 7,280 epochs per year. Nominal APY uses blocks per year, so tempo cancels there. Tempo still sets the compounding steps and the size of each root sale.
- Nothing on this site is a recommendation to stake, unstake, or prefer one subnet.
Data sources
Snapshots are read from the public Bittensor Finney RPC. subtensorModule supplies pool TAO, pool alpha, alpha outstanding, totalAlphaStaked, alpha emitted per block, root proportion, tempo, subnet names, Delegates, TotalHotkeyAlpha, and AlphaDividendsPerSubnet. swap supplies FeeRate and SwapBalancer. The site ships the latest pull as public/snapshot.json, including the block hash. The line at the top of each page is that pull's UTC timestamp and block. Each pull also stores one record per subnet in data/history/ (one file per UTC day, version 2). No private API key is used.
A same-block check of the nominal subnet APY against realized nominator dividends for fifteen subnets is kept in the repository at docs/apy-comparison.md. Reference APY = Σ AlphaDividendsPerSubnet (already net of take, last epoch) × epochs per year ÷ staked alpha. One epoch is indicative. It is not a 7-day average.
Formulas
Symbols: E alpha emitted per block, rp root proportion, take validator take, BPY = 7,200 × 365, T pool TAO, α pool alpha, w_q quote weight, w_b = 1 − w_q, f = FeeRate/65535, n = BPY ÷ (tempo + 1).
Alpha price
price = (w_b / w_q) · (T / α)
At equal weights this is T / α.
Estimated subnet APY
apy = E · 0.41 · (1 − rp) · (1 − take) · BPY / stakedAlpha
This is the nominal rate shown as "Est. APY". stakedAlpha is totalAlphaStaked for that netuid.
Estimated root APY
For each subnet with emission and a root proportion, one epoch pays
alphaEpoch = E · 0.41 · rp · (1 − take) · (tempo + 1)
taoEpoch = (1 − f) · T · (1 − (α / (α + alphaEpoch)) ^ (w_b / w_q))
Sum taoEpoch · (BPY / (tempo + 1)) over subnets and divide by root TAO (SubnetTAO[0]).
Entry and exit slippage
Buy, for ΔT TAO in:
Δα = α · (1 − (T / (T + ΔT · (1 − f))) ^ (w_q / w_b))
Sell, for Δα alpha in:
ΔT = (1 − f) · T · (1 − (α / (α + Δα)) ^ (w_b / w_q))
Entry slippage is 1 − Δα / (TAO in / price), so the fee is inside the slippage figure. At w_q = w_b = 0.5 and f = 0 both swaps equal the constant-product pool T · α = k.
A scenario move of c (−50%, −20%, 0, +20%) keeps T^w_b · α^w_q constant and sets the new spot price to price · (1 + c). The exit sells the compounded alpha into those reserves.
Break-even days
break-even days = ln(1 + entry cost ÷ stake value after entry) ÷ ln(1 + daily rate), with daily rate = (1 + APY)^(1/365) − 1, at 0% alpha price change. This is the day on which your compounding alpha, valued at today's price, has grown back to the TAO you put in. The low and high of the APY range are converted the same way.
- Entry cost is in TAO: the stake slippage plus the 0.05% swap fee,
X − Δα · Pfor a stake ofXτ. - Daily rewards (used in the daily rate) are your own stake's alpha rewards (
Δα × ((1 + APY)^(1/365) − 1), the compounded daily rate on the stake value after entry; on subnet pages and share images APY is the stake-weighted APY), valued at today's spot price. This is not the subnet's total emission. - Exit slippage (selling the same alpha into today's pool) is shown as its own figure and is not added to break-even. Adding it to entry slippage on the current pre-buy pool would count most of the slippage twice.
- Display caps: zero rewards, or a stake larger than the pool's TAO, shows Never. Anything over 365 days shows > 1 year. No raw day count above 365 is shown anywhere, including share images.
- Reward-sell slippage is not modelled. Break-even values rewards at today's spot price and ignores the slippage of later selling them. On thin pools that is a small extra cost: on SN58, about 45 days of rewards on 100 τ is roughly 6 τ of alpha, and selling it into an ~1,127 τ pool costs about 0.5%, against about 8% entry cost.
APY range across validators
Subnet pages and share images show APY as a range: the minimum to maximum modeled APY across validators holding at least 1% of the subnet's stake, each at its own take. It is still paid in alpha. The calculator also shows the figure for the take you select.
APY is modeled from nominal emissions. Realized APY, measured from what was actually paid out, can be higher for low-take validators: an independent Taostats check on Oct 14, 2026 showed up to +14pp on SN58 for a 0%-take validator.
TAO coverage
TAO coverage measures how much of the value a subnet pays out in new alpha is matched by TAO flowing into its pool.
TAO coverage = TAO inflow per day ÷ (alpha emitted per day × alpha spot price) × 100%
- TAO inflow is the subnet's full TAO emission: direct pool injection (
SubnetTaoInEmission) plus excess TAO used to buy alpha (SubnetExcessTao), × 7,200 blocks a day. This matches Taostats'emission_tao_per_day. - Alpha emitted is all alpha paid to miners, validators/stakers and the subnet owner (
SubnetAlphaOutEmission× 7,200).
Tiers:
- Below 10%: a yellow warning, "Low TAO coverage: most rewards are paid in newly issued alpha, not backed by TAO inflow.", with the coverage figure. Share images show this warning only in this tier.
- 10% to under 50%: a neutral line, "Moderate TAO coverage: X%".
- 50% and above: "TAO coverage: X%".
- No TAO inflow, no alpha emission, or no data: "No TAO emissions".
Coverage is a property of how the network currently distributes emissions to this subnet. It is not a judgment of the subnet, its team, or its work.
Each daily snapshot stores tao_injected_per_day, excess_tao_per_day, emission_tao_per_day (their sum), alpha_emission_per_day, alpha_emission_tao_value_per_day and tao_coverage_percent. emission_share_percent is kept for history only and is not displayed.
Holding period and price scenarios
aEnd = aGot · (1 + APY) ^ (days / 365), the same as compounding the daily rate (1 + APY)^(1/365) − 1 for days days.
The APY used for break-even and the 30-day net TAO (subnet pages, leaderboard, share images) is the stake-weighted APY: the subnet's APY at its stake-weighted average validator take. The calculator uses the take you select. Because the headline APY is a nominal rate, treating it as an annual compounded rate is conservative: at 100% APY, 90 days gives about 18.6%, against about 24.7% of simple interest. Root's holding-period TAO uses the same growth on the root APY.
What this leaves out
- Daily emission injection deepens pools and would lower real exit slippage on a long hold. The scenario pool does not add that TAO or alpha.
- Other people's buys and sells are not modeled.
- In epochs with no miner incentive, the miner half can go to validators. The 41% share does not include that case.
- Root dividends accrue while the root-sell flag is on. When it is off they are recycled, and this root APY would overstate the payout.
- Alpha halving applies at 10.5M issuance. A one-epoch APY does not forecast past that point.
- On-chain TAO weight is 0.18. The root APY also ignores the "sum of EMA prices > 1" condition.
- TAO-flow (subnet TAO share from an EMA price) has been unused since runtime v421. It changes TAO injection, not this staker alpha APY.
Sources
- Alpha conversion, concentrated liquidity (removed; the live pool is the weighted balancer), and swap. Runtime code:
pallets/swap/src/pallet/balancer.rsandmigrate_swapv3_to_balancer. - Bittensor emissions, subtensor emissions, and epoch processing.
- Chain reads on Finney, public RPC
wss://entrypoint-finney.opentensor.ai:443, around the snapshot block recorded inpublic/snapshot.json.
Estimates, not financial advice
Yields, prices, and liquidity change every block. AlphaCheck does not custody funds and does not submit stakes. Use the figures to understand the shape of a trade, then do your own research.
Not financial advice. Estimates only, for education. Yields, prices and liquidity change constantly. Do your own research.