Glossary

What each metric means, its exact formula, the API request behind it, and why it can differ from other explorers.

For AI agents: llms.txt

1H / 24H / 7D / 30D / 90D %

How much the price has moved over the trailing window: current spot against the closing price at the start of the window.

Formula((spot − baseline) / baseline) × 100. Baseline for 1H and 24H = the last minute close inside the one-hour slot that ends an hour (respectively a day) ago; for 7D / 30D / 90D = the last close of the UTC day N days ago

Anchored by clock time, not by block, and the two families anchor differently, so 7D is not a rolling 7 × 24 h. The baseline is never searched for outside its own slot: if no candle exists in that hour, or on that day, the figure shows 0% rather than reaching further back, so a data gap is indistinguishable from a flat price. It compares a noisy live spot against a candle close, which is why it can differ from explorers doing spot-to-spot. Root is served as 0 and hidden in the table.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].price_evolution_{h_1,h_24,d_7,d_30,d_90}

7D Trend (sparkline)

The inline 7-day price line drawn in the table.

Formulathe last hourly close of each 4-hour UTC bucket over the trailing 7 days (~42 points, oldest → newest, 6 significant digits)

null when the subnet has fewer than two points in the window, which is the exact "too little history to draw a line" condition. Buckets are aligned on the clock (00:00, 04:00, 08:00 UTC), not on "exactly 7 days ago", so the first and last are partial and you usually get 43 points rather than 42.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].sparkline_7d

ADR (Alpha Distribution Ratio)

How much alpha holders own compared with how much the pool holds. Above 1, holders own more than the pool can absorb, so a rush for the exit sells at a steep discount. Below 1, the pool cushions exits.

Formulamax(α held outside the pool − α this subnet burned, 0) / α in the pool (unitless, pivot at 1.0)

Burned alpha stays inside the outside-the-pool figure on-chain, so it is subtracted here through the same helper that backs market cap, and the two net burns identically; they can only disagree for a single sync cycle, if a burn-counter read fails. Only what this subnet burned itself is subtracted: the chain's burn counter is keyed to the subnet number and survives that number being handed to a new subnet, which until 2026-08-04 pinned three recently re-registered subnets at a hard 0.0 and pushed three others to the wrong side of the 1.0 pivot. The inherited part is now measured at each subnet's own registration block and removed. The clamp at zero stays, but nothing reaches it today. The numerator still includes the owner's own locked and self-staked alpha, plus alpha the protocol itself bought through chain buys, so it is not purely holder-owned. History rows before 2026-05-28 keep the raw un-netted ratio, because the chain had no burn counter before then, and on a re-registered number the rows before its registration describe the subnet that held it then. null for root or an empty pool.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].adr

APY (α / τ / $)

Your annualised return over a trailing window. α counts only the alpha you earned, τ adds what the alpha did against TAO, $ adds what TAO did against the dollar.

FormulaOrganic return = (end value rebuilt as if you had never deposited or withdrawn − starting value) / starting value, annualised over the days actually observed. A gain annualises linearly, × 365/days. A loss compounds, ((end / start)^(365/days) − 1), and reads exactly −100% only when the position is emptied. The alpha leg of your own flows is removed then repriced at the end of the window; the TAO leg is removed at the amount that actually moved.

The asymmetry is deliberate: a linear gain stays readable on a young position, while a compounded loss cannot print below −100%, which is the real floor. The starting point is not simply the first day you held something: it is the first day you held at least 1% of your peak alpha for that window, which is what stops a dust prefix from printing an astronomical return, and it is why "days observed" can be shorter than the window you picked. The three dimensions answer three different questions and diverge on purpose: a positive α with a negative τ means you earned tokens while their price fell. Empty cells have several causes, not one: an alpha return above 1000% blanks all three (the guard against emission-funded and faucet wallets, with the absolute change shown instead), a wallet holding only root or free TAO has no alpha dimension at all so that one alone stays empty, and a window with no qualifying starting day is empty throughout. On a 30-day window the app flags a sample shorter than 15 observed days.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldapy.alpha, apy.tao, apy.usd, apy.days_observed (each keyed 7d / 30d / all)

The confidence rules on top of it are ours.

APY / APR 7D (validator)

What staking TAO on root through this validator has returned over the last 7 days, annualised: APR without compounding, APY with. It is the root staker's yield, not a blend of the validator's alpha pools.

FormulaFor each subnet S the hotkey validates on: rate_S = Σ root dividends (valued in TAO at each day's close) / Σ root stake that earned them, over the last 7 complete UTC days. epochs per year(S) = 7200 × 365 / the subnet's tempo. APR = Σ_S rate_S × epochs per year(S) × 100; APY = (exp(Σ_S epochs per year(S) × ln(1 + rate_S)) − 1) × 100. Every term clamped to [0, 10000], and the total again.

The series is what the chain actually paid, already net of the validator take and of childkey redistribution, measured against the exact stake the chain used as the denominator. The per-subnet rates add up because they all share one denominator, the hotkey's root TAO, which earns across every subnet the hotkey validates on. The only difference between the two figures is the compounding assumption: APR is the number most explorers publish, often labelled APY, while APY is the more honest one, since dividends restake. Annualisation uses each subnet's own tempo rather than a flat epoch count. Exactly 10000 means the real figure was clamped, not that it is precisely 10000%. A hotkey with no root row in the window reads null, NOT 0: no root-staker data is not zero yield, and stale values are never carried forward. What an ALPHA staker earned on one subnet is a different number, served per row (see Nominators / Validator / Childkey 7D and the per-subnet rows on the validator's own page).

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].apy_7d / results[].apr_7d

Beta basket (fund)

Since runtime 441 a validator's root dividends are no longer sold: they are staked into a per-validator fund, and root stakers hold redeemable shares of it. Staking on root therefore stopped being a pure TAO position: part of the yield now sits as a basket of alpha across many subnets that the staker does not pick. The fund's VALUE is what all of those alpha positions are worth in TAO, added together. The API calls that number nav_tao, for net asset value, which is the standard name for a fund's total; the interface says "fund value" instead, because an acronym explains nothing to somebody meeting it for the first time.

Formulafund value = Σ (what each alpha leg would sell for, in TAO). share price = fund value / shares. A holder owns owed_shares / shares of the fund, and redeeming returns their pro-rata slice of every leg, sold to TAO and staked back on root (extrinsic claim_root, or claim_root_with_hotkey for one validator).

The number to read is nav_tao, not spot_nav_tao: spot marks every leg at its price and ignores depth, so it is the one figure a redemption cannot actually get. And growth belongs to the SHARE PRICE, never to the fund value. Dividends landing in the fund mint shares as they arrive, so the total can triple while a holder gains nothing (measured 169 → 548 τ in two days on the largest fund, share price +1%). That is why the chart on a validator page plots the share price and not the fund value.

API request
GET https://api.taoswap.org/v1/beta-baskets/{hotkey}/

Response fieldnav_tao

Burn

The share of the miner reward pool that never reaches independent miners, because it was directed at the owner's own neurons and then destroyed.

Formulathe share of the miner reward pool aimed at owner neurons: Σ (owner neurons' incentive) × 100, the incentive vector already being normalised by the chain, weighted by the emission split between mechanisms on multi-mechanism subnets

The owner does not pocket this emission. The chain withholds any incentive aimed at an owner or "immune" hotkey and then either burns or recycles it, depending on the subnet's setting, and the value is deliberately identical either way. That withheld share matters because the chain scales the subnet's TAO emission allocation by (1 − burn), so a high burn actively costs the subnet, though its alpha emission is untouched. An "owner neuron" is any neuron whose coldkey is the subnet owner, plus the subnet owner hotkey. Below 100% means at least one independent miner is earning. The figure is recomputed from the live metagraph rather than read from the chain's own per-tempo ratio; the two agree closely, and they can drift on subnets the chain has stopped emitting to, where its own ratio falls back to zero while ours still reflects the last distribution.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].emission_miner_burn

Burned

The best-known amount of alpha this subnet has destroyed for good, valued in TAO. Most of it is not somebody choosing to burn tokens: it is miner rewards the chain destroys automatically, block after block.

Formulathe larger of (α this subnet burned through every path since 2026-05-28) and (α it burned by explicit burn calls since genesis), × the EMA moving price, spot when the EMA is 0

Two overlapping sources, neither complete on its own: the chain-wide counter covers every burn path but only exists since 2026-05-28, while the explicit-burn total reaches back to genesis and is blind to the other paths. Taking the larger is a lower bound, not the real total: the two cover different periods AND different paths, so on a subnet with burns in both they under-count. Read the size before reading intent: most subnets carry a non-zero figure here, and on the large majority it is dominated by the miner incentive the chain destroys every block when a subnet directs its rewards at its own neurons (which is why several unrelated subnets show nearly identical totals). Deliberate burns, the ones somebody actually called, are rare. Burning is not recycling: a burn destroys the tokens while leaving both the alpha held outside the pool and the issuance counter untouched, whereas recycling reduces both, and recycled alpha is not counted here. Both sources are keyed to the subnet number rather than to the subnet, and the chain never clears them when a number is freed and handed to a new subnet, so a young subnet used to display the burns of whoever held its number before. Since 2026-08-04 that inherited part is measured at the exact block each subnet was registered and removed from both terms, so this figure is the current occupant's own burns. It was worth up to everything: two subnets were showing six-figure burns they had never made, and eight were showing an explicit-burn total that was entirely their predecessor's.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].alpha_burned_counter, results[].total_alpha_burned

The larger of the two, valued at the EMA moving price (spot when the EMA is 0).

Chain Buys (Excess TAO emission)

TAO the protocol spends buying alpha on the open pool, rather than injecting it as fresh liquidity. It is real buy pressure paid by the network.

Formulathe TAO the protocol actually spent buying alpha in the pool on the last block (the swap's executed amount, not the allocated one), in τ/block, shown ×7200 for τ/day. Equivalently: the subnet's allocated TAO emission minus the TAO it managed to inject as liquidity

Each block the chain wants to inject the subnet's TAO emission as matching TAO + alpha liquidity, but the alpha side is capped at the root proportion × the block's alpha emission, priced at spot. As a subnet ages its alpha issuance grows, that cap falls, and the TAO that can no longer be paired is spent buying alpha in the pool instead. That is the whole mechanism, and it is why older subnets drift from liquidity injection towards chain buys. Post-halving values are exactly what the chain wrote, with no rescaling applied. Replaces the old chain-buys estimate (a τ/day price proxy), so historical values diverge sharply. null for root, and 0 means no chain buy on that block (the chain stores it unsigned, so it is never negative). The field records what actually executed, so on a rare partial-injection block the two legs sum below the allocated emission. One stale-value trap: the chain only clears this counter for subnets it is currently emitting to, so a subnet that leaves that set keeps its last value instead of dropping to 0.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].excess_tao_emission

Chain Buys %

This subnet's share of all the chain buying happening across the network.

Formulathis subnet's chain buys / the total chain buys across every non-root subnet × 100

A normalised share, so it sums to 100 across non-root subnets. There is no smoothing whatsoever: the chain clears the underlying counter every block, so the value is whatever one block happened to do, which makes it very spiky. It is also a sample rather than a live reading, since the sync only lands on roughly one block in ten. Use the history series for a stable view.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].excess_tao_emission_percent

Challenger stake

What the leading challenger has actually put at risk: the realizable TAO value of the alpha they have locked. Bigger means a more committed challenger.

Formulathe leader's total locked alpha, perpetual and decaying, estimated in TAO as a single sale through the pool (constant product, flat 0.05% fee) rather than at spot

Shown at realizable value on purpose, because face value overstates the commitment on a thin pool. Only meaningful when the leader is an outsider, which is served alongside as a flag. Careful with the underlying field name, which says owner but carries the LEADER position, and the leader is not always the owner.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.owner_locked_value.tao_slippage

Conviction

How much of the subnet the current leader of the ownership race has locked up, as a share of supply. Locking alpha is how a key stakes its claim to owning the subnet.

Formulathe leader's conviction (an alpha mass weighted by maturation and decay) / the subnet's alpha supply × 100

Despite the field name this is the LEADER's position, and the leader ("king") is not always the owner, so check `king_is_owner`, and never infer it by comparing `king` (a hotkey) to `owner` (a coldkey). The companion fields are king_conviction (raw score, never display it), owner_conviction_pct (share of the conviction battle, 100% = unchallenged) and total_conviction. Conviction is an alpha mass, not an abstract score, which is what makes it comparable to supply at all. It decays over time, but the chain does not keep it up to date on its own: the stored value only moves when something touches the lock, so the figure served here is one we roll forward to a pinned block, refreshed every few minutes. Perpetually locked alpha never loses mass and its conviction converges upward to that mass instead. Two half-lives drive it, today about 90 days for the unlock schedule and about 30 for maturation. Both are governance parameters and the maturation one has already been moved off its default (to a third of it), so read the two half-life fields served alongside rather than trusting those numbers. Note this gauge is measured against total supply while the takeover gate below is measured against the alpha held outside the pool: two neighbouring bars, two different denominators.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.owner_conviction_pct_supply

Cost basis (WAC / FIFO) & USD method

Two ways of deciding what a token cost you. WAC averages every purchase into one blended price. FIFO matches each sale against your oldest purchases. Then two ways of putting that in dollars: "throughout" records the dollar value at every trade, "then" computes the result in TAO and converts it at today's rate.

FormulaWAC: one running (quantity, cost) pair per hotkey and subnet. A buy adds its cost, a sale drains the cost pro-rata, staking rewards enter at zero cost, and an internal swap carries its cost across to the destination subnet. FIFO: the same events against a queue of lots, oldest consumed first. usd_throughout books each leg at the TAO/USD rate of the day it happened; usd_then converts the finished TAO result at today's rate

WAC is smoother and easier to read; FIFO is what most tax regimes expect. Likewise "throughout" is the rigorous accounting answer and the only one that adds up over time, while "then" reprices your whole history at today's rate. Never read a difference between two dates in "then" mode: a week in which you did not trade at all can show a dollar gain or loss purely from the TAO/USD move, sometimes with the opposite sign to your TAO result. Where the toggles apply is narrower than it looks: the four flavours are all served, but only the PnL dialog lets you switch between them. The holdings table is fixed on WAC in TAO, and the CSV export always writes FIFO with the throughout dollars, whatever you had selected.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.*.tao.{wac,fifo}, pnl.*.{usd_throughout,usd_then}

Delegator / Validator Earnings per Day

What the validator paid out over the last full day, in TAO: the first figure is what its delegators shared, the second what it kept as commission.

FormulaOver the most recent day with data: delegators = Σ (alpha + root dividends) × that day's closing price; validator = Σ of those dividends × take/(1 − take), the take being read from the chain at every epoch

A single day, not a rate, so it moves with the stake behind the hotkey and with what its subnets emitted that day: a large validator out-earns a small one at the same APY. It is the latest day that HAS data, which is not always yesterday: if ingestion is behind, the figure is that many days old. The childkey-take slice is counted inside these figures, not on top of them. A validator running a 0% take reads 0 on its own line while still paying its delegators in full. Until a hotkey has ledger data at all, an emission-model estimate stands in. Only the validator's own page carries them, so a list of validators compares yields instead.

API request
GET https://api.taoswap.org/validators/<hotkey>/

Response fielddelegator_daily_earning / validator_daily_earning

Delegators

How many delegators are staking to the validator.

Formulathe number of distinct wallets holding a non-zero position on any hotkey the validator owns, across every subnet

Wallets, not positions: the delegator table on the validator's page lists one line per wallet, hotkey and subnet, so it is always longer than this count. The validator's own wallet is counted too, since its self-stake is a position like any other. There is no dust floor. An explorer counting wallet-and-hotkey pairs, or applying a minimum stake, will differ.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].count_delegators

Depth ±2% / ±5%

How much TAO it takes to push the price up (+, buying) or down (−, selling) by 2% or 5%. Bigger numbers mean a deeper, harder-to-move pool.

Formulaup = TAO reserve × (√(1+δ) − 1) / (1 − fee), a gross input with the fee on top; down = TAO reserve × (1 − √(1−δ)), the net TAO leaving the pool. δ = 2% or 5%, fee = 33/65535 ≈ 0.0504%

The down side reads slightly larger than the up side, and that is arithmetic rather than a bug: since √ is concave, the same percentage move needs marginally more TAO on the way down. Because the up leg carries the fee and the down leg does not, the fee narrows that gap instead of widening it: as served, the down side is 0.95% larger at ±2% and 2.5% larger at ±5%. Computed on the plain constant-product curve, which matches the chain while the pool weights are equal, as they are today. Two caveats: the fee is applied as one global constant, whereas the chain stores it per subnet and governance can move it on any single subnet, so a subnet whose fee has been changed would be priced with the wrong one here; and there is no concentrated liquidity to model, because user-provided liquidity is disabled on-chain. Root (SN0) is null, having no pool, and an empty pool reads 0.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].depth_{up,down}_{2,5}pct (+ *_usd)

Deregistration risk

How exposed a subnet is to being removed from the network. The routine way a subnet dies is a new registration landing while the network is at its cap: the victim is then the non-immune subnet with the lowest price EMA.

Formulaprune_rank orders the non-immune subnets by price EMA, lowest first and oldest first on a tie; rank 1 is the one the next registration would remove. risk_level = immune, then critical (price EMA of 0, or rank ≤ 5), high (≤ 15), medium (≤ 40), low beyond that.

Immune subnets cannot be removed at all and carry no rank. A subnet whose owner never called start_call has a price EMA frozen at 0, which puts it at the very front of the queue the moment its immunity ends. The bands are a presentation choice, not a chain concept: on-chain only rank 1 means anything, and since registrations have historically arrived about weekly (median 7.7 days over the last two dozen) the rank reads roughly as weeks of headroom. THE NETWORK IS AT CAPACITY TODAY, so this is live rather than theoretical; the envelope served alongside carries the current count, the cap and the exact subnet the next registration would take. Two things stop rank 1 from being a promise: governance can also dissolve a subnet outright, with no registration involved, and when the chain does prune, the incoming subnet is queued rather than created on the spot.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].dereg.risk_level, .prune_rank; envelope dereg_context

Dominance

What proportion of all validator stake on the network this one validator controls.

Formulatotal_stake / the summed stake of the validators shown in the list (those at or above 1000 τ) × 100

Same exit-value pricing as Total Stake. The denominator is the visible set, not the whole chain, which is exactly why the column adds up to 100%. A validator's own page can read slightly lower, because when it cannot reuse the list's cached total it falls back to the sum over every delegation on record, a larger number. Validators under 1000 τ are absent from the list but DO have a page of their own, and it serves them a dominance computed the same way.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].dominance

EMA %

The subnet's share of realized per-block emission. It is the same number as Emission %: the name is legacy, and no EMA is involved any more.

Formulaidentical to Emission %

Two names for one metric: the same number, to within rounding. The "EMA" is pure back-compat: there is no 30-day half-life and no net stake/unstake flow involved since emission switched from flow-based to price-based in June 2026. What it tracks now is the chain emission share, which the chain builds from the moving price × (1 − miner burn), renormalised over the emission-enabled non-root subnets. That weighting used to carry a root-proportion factor too; it was removed in the runtime released as v430. Root (SN0) is null. The old flow EMA now only survives in the Inflow / Outflow fields. One genuine difference to know: this figure is recomputed on every request over the subnets we have on record, Emission % is frozen at the last chain sync over the subnets alive at that moment, so a destroyed subnet can still weigh on this one.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].emission_ema_percent

EMA Inflow / Outflow

The two halves of one signed average of net TAO flow (stake minus unstake) into the pool. A subnet shows one or the other, never both.

Formulathe last known value of the chain EMA of net TAO flow (stake minus unstake), frozen: inflow = max(EMA, 0), outflow = |min(EMA, 0)|, in τ

IMPORTANT: these values are FROZEN and no longer mean anything current. Since emission switched to price-based weighting in June 2026 the chain code that advanced this EMA is never called, so the storage is still readable but never updated; what you see is whatever it held the day it stopped. It used to be a ~30-day half-life EMA counting only direct user stake and unstake, with emission-driven swaps excluded. Any explorer showing a live 24h/7d net flow is computing something else. Do not try to rebuild it from the chain's raw flow counter either: that one is still fed on every stake and is never reset, so it only grows.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].inflow / results[].outflow

Emission %

The share of the network's per-block TAO emission that goes to this subnet. Across emission-enabled subnets it adds up to ~100%.

Formula(TAO injected as liquidity + TAO spent on chain buys) / the same sum over every non-root subnet × 100, per block

It is a share, not an absolute amount, so the halving cancels out of it entirely. EMA % is the same number under an older name. A subnet reads 0 when emission is switched off for it (its share is redistributed on-chain), and a freshly registered subnet starts switched off until it is enabled. A subnet is also skipped entirely while registration is closed on it or its subtoken is disabled. Switching emission off only stops the TAO side: the subnet keeps emitting alpha to its miners and validators, so a subnet at 0% here is not a dead subnet. Root (SN0) is null. Since the chain records what was actually injected, rare partial-injection blocks read slightly low.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].emission_percent

Estimated received

What you would still receive if your slippage tolerance were used up in full. It is an estimate of the low end, not a guarantee.

Formulaexpected output × (1 − slippage tolerance / 100)

Called "estimated" rather than "minimum" on purpose: the chain is never given an amount, only a price limit, so nothing enforces this figure directly. With partial fill off (the default) the trade is all-or-nothing at a price no worse than your limit, so you land at or above it. With partial fill ON the chain fills only what fits under the price limit and refunds the rest, which can settle well below this number, with no error and no warning. A normal trade lands on the expected output, not on this.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool, results[].alpha_in_pool

Derived from the simulated output. Simulated against the pool reserves, weights and fee read live from the chain; this endpoint is only the fallback when the chain connection is down, and it carries neither the weights nor the fee.

FDV

Fully Diluted Valuation: what the subnet would be worth if every alpha token that can ever exist had already been emitted.

Formula21,000,000 α × the EMA moving price, spot when the EMA is 0

Every subnet has the same 21M alpha hard cap as TAO itself, so FDV is always ≥ market cap. The cap is compiled into the runtime rather than stored as a parameter, so unlike most chain numbers it cannot be changed by governance, and the chain really does stop emitting a subnet's alpha when its issuance reaches it. Same EMA-vs-spot gap as market cap; root falls back to spot, and FDV 21,000,000 τ is the right reading for it since root's "alpha" is TAO. Burned alpha still counts against the cap, since a burn does not reduce what the chain considers issued.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].fdv (fdv_usd for the USD value)

Fees (take)

The commission the validator keeps out of its delegators' rewards.

Formulathe chain commission of the validator's largest hotkey, as a percentage (the raw value is a 16-bit fraction, divided by 65535 and ×100)

A percentage, not a fraction: 18 reads as 18%. The chain applies it to the hotkey's dividend before the remainder reaches its delegators, so every yield on this page is already net of it. It is read per hotkey and a validator can run several with different commissions; the figure shown is the one of the hotkey holding the most stake. A 0% take is real and not unusual.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].take

Free

TAO sitting in the wallet, not staked anywhere.

Formulathe free balance at the snapshot block, as the chain reports it

Free means not staked, which is not quite the same as spendable: it still includes the small existential deposit and any locked portion. It also excludes TAO the chain holds as a deposit, for a proxy or an on-chain identity, and that TAO appears nowhere on this row, so Total under-counts a wallet that has one.

API request
GET https://api.taoswap.org/accounts/

Response fieldresults[].free

Global rank

Where the wallet sits in the network-wide wealth ranking, 1 being the largest.

Formulawallets sorted by total (free + root stake + alpha stake) descending, equal totals broken by the raw byte order of the address. The alpha ranking is the same sort on the alpha stake alone

Not a ranking of the whole chain. The population is every wallet that has ever staked, plus pure holders above a free-balance floor (1 τ today), so a small wallet that never staked is absent entirely rather than ranked last. Ranks and the balances shown next to them come from the same daily snapshot, which is what stops a partial sync from reshuffling the top of the table; a wallet missing from that snapshot can still vanish from a page it used to occupy. Alpha carries the same exit-value pricing as everywhere else, which can reorder large alpha-heavy wallets compared with a flat-price ranking.

API request
GET https://api.taoswap.org/accounts/

Response fieldresults[].rank (results[].rank_alpha for the alpha-only ranking)

HHI (concentration)

How concentrated the holders are, on a 0 to 100% scale. 0% means the stake is spread perfectly evenly, 100% means one holder owns everything. Lower is healthier.

FormulaHHI = Σ(each holder wallet's share of the staked alpha)², owner self-stake removed; then normalised (HHI − 1/N) / (1 − 1/N), clamped 0..1, ×100 for display. N = the holder wallets left

Shares are per wallet, summed across every validator that wallet delegates to. The owner exclusion is per position, not per wallet: a position drops out only when the holder, the validator it is staked to and the subnet owner are the same coldkey, so the owner's delegations to outside validators are still counted. Most explorers publish the raw HHI rather than this min-normalised form, so the numbers are not comparable. Returns 0 below 2 holders. Recomputed on a 2-hourly cycle, so it can lag the live table, and if that read fails it holds its last good value rather than dropping to zero.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].hhi_normalized

Holders

How many distinct wallets (coldkeys) hold any alpha of this subnet.

Formulathe number of distinct wallets holding a non-zero alpha position on this subnet, counted across every validator they stake to

There is no minimum or dust floor (any non-zero position counts), and unlike the concentration metrics this one does NOT exclude the owner. Nor does it require delegating to somebody else: a wallet staking to its own hotkey counts. The asymmetry with the concentration metrics is deliberate: this answers "how many wallets hold this alpha", while HHI, Nakamoto and Top 10% answer "how is the tradable float distributed". An explorer with a min-stake floor, or one counting per wallet-and-validator pair, will differ. Each day's history point snapshots this same live figure. Days rebuilt from chain history are the exception: they come from the delegate registry, which cannot see wallets staked to non-delegate hotkeys and sits a few percent lower (about 4% measured on-chain), so do not read that small step in old points as a real move.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].holders_count

Immunity

A grace period after registration during which a subnet cannot be deregistered, whatever its price.

Formulaimmune while the current block is strictly below the registration block + the immunity period, which is 864,000 blocks today, about 120 days

The comparison is strict, so the subnet becomes prunable exactly on its end block, the same test the chain runs. Only the human-readable end date is dropped once immunity has lapsed; the end block keeps being served afterwards, as a past date, so its presence does not mean the subnet is still immune. The window length is a chain parameter and is served alongside.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].dereg.is_immune, .immunity_end_block, .immunity_ends_at

In Pool (τ) / (α)

The two sides of the subnet pool: how much TAO and how much alpha it currently holds.

Formulathe two pool reserves, straight from the chain. Their ratio IS the spot price

These reserves hold protocol liquidity only. User-provided liquidity is not thin here, it is impossible: the chain rejects every add/remove-liquidity call outright. Both are null for root, which has no pool.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool / results[].alpha_in_pool

Locked (conviction)

The alpha locked across every participant in the ownership race, shown both at face value and at what it would actually fetch if sold.

Formulalocked alpha = perpetual mass + decaying mass. Face value = α × spot price; realizable = an estimate of selling that α in one go through the pool, constant product on the reserves, with a flat 0.05% fee.

Perpetual locks never release their alpha; decaying locks give it back gradually. Realizable values are single AMM exits, so per-holder figures do NOT add up to the subnet total: use the subnet-level value for "everything sold at once". The fee used is a flat 0.05% rather than the subnet's own, which the chain stores per subnet and governance can change, so on a subnet whose fee has been moved the realizable figure is slightly off.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.total_locked, .total_locked_value

Market Cap

Value of the alpha actually in circulation: what sits in the pool plus what is staked, minus what has been burned, priced at the smoothed (EMA) price.

Formula(α in the pool + max(α held outside the pool − α this subnet burned, 0)) × the EMA moving price, spot when the EMA is 0

Three things make it differ from other explorers: the price is the EMA moving price (spot only as a fallback, which is what happens on root, whose EMA is 0); the base is circulating alpha, not the 21M cap (that is FDV); and burned alpha is subtracted. Burning destroys the tokens on-chain but leaves them inside the staked figure, so without that subtraction the destroyed alpha would still be valued. Recycled alpha is not subtracted again, because the chain already removed it. Supply, below, deliberately keeps burns, so on burn-heavy subnets supply × price sits above market cap. Only what this subnet burned itself is subtracted: the chain keys its burn counter to the subnet number and never clears it when that number is handed to a new subnet, which until 2026-08-04 valued six subnets below the truth, the worst by 55 per cent. The inherited part is now measured at each subnet's own registration block and removed. The subtraction is still clamped at zero, and the base still leaves out the protocol alpha reserve that the chain counts in its own issuance, which is zero on every subnet today.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].market_cap

Mechs

How many mechanisms (sub-mechanisms) the subnet runs.

Formulathe chain's mechanism count for this subnet, 1 when it was never set

Each mechanism has its own metagraph, with its own UIDs, incentives and weights, and its own slice of the emission; when no split is recorded the alpha is divided equally between them. Almost every subnet runs one. It also explains the Miners count, which is per mechanism.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].mechanism_count

MEV Shield

Submits your swap encrypted, so nobody can read it while it waits in the queue and trade in front of it. It is only decrypted once its place in a block is fixed.

Formulayour swap is signed, then sealed with post-quantum encryption for the key of the validator due to build a block about two blocks ahead. Only that validator can open it, and it does so inside the block it is building. Either the relay carries and pays for the sealed envelope (you sign once) or you send it yourself (you sign twice)

It costs a couple of blocks of latency, and in self-custody mode roughly twice the network fee, since two transactions are signed. The relay never sees the contents of your order, though it does receive your wallet address in the clear, so it knows that you traded and when, not what. The two blocks are the wait for a block whose builder holds the key: the envelope and the revealed swap then land together, in that same block. Each mode can be turned off on the server side, so the toggle is not always available.

Miners

How many independent miners are currently earning something, excluding the owner's own neurons.

Formulathe number of distinct miner hotkeys earning something, excluding the owner's own

"Active" here means incentive strictly above 0, with no validator-permit, vtrust or stake threshold applied, so explorers using a permit or axon heuristic will report different numbers. It counts distinct miners, so one hotkey registered in several mechanisms counts once. An owner neuron is one whose wallet is the subnet's registration wallet OR whose hotkey is the official owner hotkey, not just the former. A Burn below 100% implies at least one of these miners is earning.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].active_miners

Moving Price

A slow-moving average of the price, used as the basis for market cap and FDV so a single trade cannot move a valuation.

Formulachain EMA, once per block: new = a × min(spot, 1 τ) + (1 − a) × previous, where a = the smoothing factor × blocks since the subnet's first emission / (those blocks + the subnet's ramp length)

Computed on-chain, not by Taoswap. The chain feeds the EMA min(spot, 1 τ), so the moving price can never exceed 1 τ even if spot does. Both knobs are chain parameters a governance call can move, so treat the usual figures (a smoothing factor of 0.000003 per block, roughly 30 days to close half the gap to spot) as today's values and not as constants; the ramp in particular is set per subnet. Until a young subnet finishes ramping, its effective smoothing is a fraction of that factor, so its EMA moves slower than the headline number suggests. It freezes entirely while a subnet is outside the emission set: never started, subtoken disabled, or registration closed. Careful with root: the field is served as 0 for it, which is why market cap and FDV fall back to spot there, while the chain itself treats root as 1 τ. It should match any explorer reading the same chain value; small gaps come from the ~2-min snapshot block.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].moving_price

Nakamoto coefficient

The smallest number of top holders who together own more than half of the stake. Lower means more concentrated.

Formulathe smallest k whose k largest holder wallets together hold more than 50% of the staked alpha, owner self-stake removed (integer)

Same owner exclusion as HHI. Returns 0 (not 1) for an empty or single-holder subnet.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].nakamoto_coefficient

Network fee

What the blockchain charges to include your transaction. Taoswap takes no fee of its own.

Formulathe chain's own estimate for the transaction itself. In MEV Shield self-custody it is doubled, a flat stand-in for the second transaction the wallet signs rather than a second estimate

Not to be confused with the pool fee, which is about 0.05% taken out of the token you put in and is already inside every quote on the page. That pool fee does not go to the subnet: it goes to whoever builds the block. It is a per-subnet chain parameter that only governance can change, up to a hard ceiling well above the current value, so it is not necessarily the same everywhere. The doubling shown for self-custody is a rough stand-in for a transaction that is never actually priced, so read it as an order of magnitude. Smart Actions does not offer the shield, so its estimate carries no doubling and is exact. The network fee is paid even when the trade is rejected for exceeding your slippage tolerance, and on a sale or an alpha-to-alpha swap a wallet with no free TAO still pays, out of the position itself.

Nominators / Validator / Childkey 7D (τ)

The TAO a validator earned on one subnet over the last 7 days, split three ways: what went to its nominators, what it kept as commission, and the part that came from childkey take.

FormulaOver the last 7 complete UTC days, in TAO at each day's close. Nominators = the alpha dividends that subnet paid, net of the take. Validator = the take, on both the alpha AND the root dividends earned there. Childkey = the childkey-take slice of the pre-take dividend.

Amounts, not rates: they scale with the stake behind the hotkey, which is why the APY sitting beside them can be high on a small line and modest on a large one. The two columns are not symmetric: the nominator side counts alpha dividends only, since what root stakers earned is reported on the root line, while the validator side counts the take on both. Root lines are not shown in this table at all. Blank until the subnet has synced, which is not the same as zero. The childkey figure is a slice of the other two, so adding all three double-counts it.

API request
GET https://api.taoswap.org/validators/<hotkey>/

Response fieldmonitoring[].nominator_return_7d_tao / validator_return_7d_tao / childkey_return_7d_tao

PnL (Realized / Unrealized)

Realized is the profit or loss you have actually booked by closing positions. Unrealized is what you are up or down on what you still hold.

FormulaRealized: for every real sale, and every burn, the proceeds minus the cost basis consumed. Unrealized: what you hold on-chain × the latest hourly close of its subnet (root 1:1), minus the cost basis left against it

Unrealized marks your alpha at the hourly closing price, with no fee and no slippage, so it reads higher than the exit-value pricing used for validator and account totals: it answers "what is it worth", not "what would I get". Moving alpha between subnets or hotkeys realizes nothing, it carries its cost across; a burn, on the other hand, realizes the full loss. Sending stake to another wallet books a real disposal at the market price inside Realized, and receiving it opens a fresh position at the price on arrival rather than inheriting the sender's basis. Both figures come in a WAC and a FIFO flavour (see Cost basis) and in two USD flavours. Realized 24h is the change since the previous daily snapshot rather than a rolling 24 hours, so it steps once a day; the baseline is anchored to the snapshot date, so a late sync shifts the window instead of breaking it, and the payload names the date it started from. Unrealized 24h is a different animal: a live trailing window, what you hold right now × (price now − price 24 hours ago), recomputed on every request with no cost basis involved, so it moves with the market all day and exists from the first day you hold something.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.realized, pnl.unrealized (each: tao.wac, tao.fifo, usd_throughout, usd_then); rolling_24h.unrealized_tao (live 24h, global and per subnet)

Computed over your whole trade history.

Price ($)

The same spot price, converted to dollars.

Formulaprice × the live TAO/USD rate the app streams

Two different dollar rates exist on this site and they are not interchangeable: figures converted in-app (this one) use a live streaming rate, while figures the API already returns in dollars (FDV, 24h volume, depth) were converted server-side against a rate refreshed every 15 minutes. On a fast move the two disagree for a few minutes, and the gap is the rate, not the metric.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].price

USD = price × the live TAO/USD rate.

Price (τ)

What one alpha token is worth in TAO right now, quoted by the subnet's own liquidity pool.

Formulathe chain's own spot price for the pool: (α weight / τ weight) × TAO reserve / α reserve. Root (SN0) is pegged to 1 τ instead

Served straight from the chain rather than divided in-app, and the weights matter: the pool is a weighted (Balancer) automated market maker, an AMM: the contract that holds both sides and takes the other end of every trade, with no order book and no counterparty to find. So the plain ratio of the two reserves is only exact while the weights are equal. They are today, to within 4.5e-7 across every subnet, but the chain only guarantees each side stays above 1%, and it rewrites the weights whenever an emission injection would push the pool out of balance. Root is the exception: it has no AMM, so the chain quotes it at 1 τ and the two In Pool figures are empty for it. This is the spot price, not the EMA moving price behind market cap and FDV, so explorers that display the EMA read differently.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].price

Price EMA (deregistration)

The value the chain compares when it has to pick which subnet to remove: the same smoothed moving price shown elsewhere, not the spot price.

Formulathe chain moving price (see Moving Price); the lowest non-immune subnet is the one removed, the older registration losing ties

Using the EMA rather than spot is deliberate: it makes the choice unforgeable by a single trade. A subnet that never started emission sits at 0 and is therefore always the first candidate, which is why the subnet detail also tells you whether a subnet has started. The freeze is not limited to those: any subnet the chain has stopped emitting to keeps its last EMA while the others keep moving, so it drifts down the ranking without anything happening to it.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].moving_price

Price impact

How much worse your effective price is than the quoted pool price, because your own trade moves the pool. It grows with your size and shrinks with pool depth.

Formula(what your input is worth at the pool spot price − what the curve actually returns, fee included) / what the curve actually returns × 100

The number shown covers the subnet fee as well as the curve movement, so it is the whole cost of the trade. Do NOT read it as a floor for your slippage setting: the tolerance is applied on top of the execution price and the chain checks it against the pool price AFTER your trade, so the impact eats into the tolerance a second time (see Slippage tolerance). Only the curve part stays in the pool, which is why splitting a large order genuinely costs less; the fee itself leaves the pool and goes to whoever builds the block. The 1% and 5% marks colour the figure rather than warn you: the actual warning fires on the dollar cost, above roughly $100. Free TAO and root trade 1:1, so their impact is 0.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool, results[].alpha_in_pool

Simulated against the pool reserves, weights and fee read live from the chain; this endpoint is only the fallback when the chain connection is down, and it carries neither the weights nor the fee.

Root curation vector

The weight vector a root validator publishes to say which subnets its fund buys. None of the 64 has one today, and that is the regime rather than missing data: publishing is switched off network-wide, so every fund accumulates on whichever subnet earned each dividend. Vectors did exist until recently. Root held 47 of them up to block 8765683, and the storage has been empty from 8765684 onward (2026-08-03 19:18:36 UTC).

Formulaentries[] = [netuid, weight_u16]. u16 is a RELATIVE scale, not a percentage: the largest entry is always 65535 and the share of the fund is weight_u16 / Σ weight_u16.

Two chain locks hold it shut, and both must open before any of this fills in: RootWeightSettingEnabled is false, so the chain rejects every vector, and WeightsSetRateLimit on root is u64::MAX, which blocks all 64 uids without exception. set_root_weights still exists as a callable, which is why its presence proves nothing. Do NOT read last_update_block as the date of a publication: it comes from LastUpdate[0], which the clearing did not touch, so it both predates that event and keeps moving after it, one uid reading minutes old while no vector exists anywhere on chain.

API request
GET https://api.taoswap.org/v1/root-weights/

Response fieldresults[].entries

Root Proportion

The share of this subnet's validator emission that flows to root (SN0) stakers instead of to its own alpha stakers.

Formulaγ·R / (γ·R + the subnet's alpha issuance), a fraction in [0, 1], ×100 for display. R = TAO staked on root, γ = the chain tao weight (~0.18, read from the chain at each sync), alpha issuance = α in the pool + α held outside it + the protocol alpha reserve

The denominator is the subnet's whole alpha issuance, the pool side included; netting it against the staked side alone overstates the proportion by several points. The third term is protocol liquidity the AMM could not inject without pushing the pool weights out of range: it is zero on every subnet today and drains as soon as an injection fits, so in practice the value is set by the two alpha stocks. The proportion falls as a subnet ages and its own alpha issuance grows, which is also what shifts the subnet from liquidity injection to chain buys (see Chain Buys). Whether that root share actually reaches root stakers is conditional: when the network-wide moving prices sum below 1 the chain recycles it instead of paying it out. It is a fraction, not a percentage. null for root only; with no data it reads 0, not null. On a brand-new or emptied subnet, where alpha issuance is 0, the served value is a floor rather than the chain's own answer. Do not confuse γ with the owner cut shown under Conviction, which also sits near 0.18 and is unrelated.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_proportion

Root stake / Alpha stake (validator)

The two halves of a validator's total stake: TAO staked on root, and alpha staked across subnets (valued in TAO).

Formularoot = Σ of the positions on root, TAO for alpha at 1:1 since root has no pool; alpha = Σ of every other position, each valued through its own subnet pool. The two add up to Total Stake by construction

The alpha half carries the same slippage-aware valuation as Total Stake, so it moves with pool depth as well as with price.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].total_stake_root / results[].total_stake_alpha

Root weight (validator)

The validator's root stake counted the way the chain counts it for emission, where TAO on root does not weigh 1:1 against alpha.

Formularoot stake × γ, γ being the chain tao weight (about 0.18), re-read from the chain at every subnet sync

A scaled TAO amount, not a ratio and not a second stake bucket, so never add it to the stake columns yourself. Same γ as the subnet Root Proportion. The list does combine it with the alpha stake in its own Total Weight column, which is the figure to use when comparing against explorers that discount root the way the chain does. Do not confuse γ with the owner cut shown under Conviction, which also sits near 0.18 and is a different parameter entirely.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].root_weight

Share (Free / Root / Alpha)

How a wallet splits its own holdings between free TAO, root stake and alpha: the three-segment bar in the Accounts table. It is the composition of that wallet, NOT its share of the network.

Formulaeach segment = its own amount / the sum of the three × 100. Same denominator throughout, so they add to 100 by construction, except on a zero-balance row where all three read 0

Easy to misread: a wallet showing "80% Alpha" holds 80% of ITS OWN balance in alpha. For the wallet's standing across the network, read the rank instead.

Data source
GET https://api.taoswap.org/accounts/

Response fieldresults[].free, results[].staked_tao, results[].staked_alpha_in_tao

The three percentages come from the row itself.

Slippage tolerance

How far the price may move against you between signing and inclusion before the chain refuses the trade. Default 0.5%, minimum 0.1%.

Formulaprice limit = expected average execution price × (1 ± tolerance/100), sent with the transaction as a price in TAO per alpha, or as an origin/destination price ratio when swapping alpha for alpha

It is applied on top of the expected execution price, but that does NOT mean it only has to absorb market movement. The app anchors the limit on your average execution price while the chain tests it against the pool price once your trade is done, so your own impact is charged against the tolerance a second time: at 0.5% on a trade showing 0.3% impact, roughly 0.3% of headroom is left for the market to move. Set it too low and ordinary movement makes the transaction fail. A rejected swap costs the network fee and nothing else. With partial fill enabled the chain executes what fits under the limit and refunds the rest instead of rejecting everything, though it still rejects outright if the price is already past your limit when the transaction lands. Two gaps to know: swapping alpha for alpha is only approximately bounded, and a plain move between validators carries no limit at all. Defaults are 0.5% with a 0.1% minimum on this page and in the cart; Smart Actions runs its own, much wider default.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool, results[].alpha_in_pool

The price limit is derived from the live chain reserves and sent with the transaction.

Spot vs Realizable

Spot prices your tokens at the pool price, as if size did not matter. Realizable estimates what you would actually receive selling them through the pool, fee and slippage included.

Formulaspot = alpha held × the pool price; realizable = the alpha, less the subnet fee taken off the input, pushed through the weighted pool curve

The gap between the two is the honest cost of your own size: it widens with the position and with how thin the pool is. Note the fee comes off before the curve, not after. The simulation runs once per subnet on your whole alpha there, then splits the result pro-rata, so per-position figures DO add up to the subnet total and the subnets add up to the portfolio; what is true is that any one position sold on its own would fetch more per alpha than its share of the joint sale. For reference the chain refuses any single swap larger than 1000× the input-side reserve, but that guard is far beyond any real position and the simulation here does not model it.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool, results[].alpha_in_pool

Realizable is simulated against the pool reserves, read live from the chain.

Stake (root) / Stake (alpha)

TAO staked on root, and all alpha across subnets valued in TAO.

Formularoot: Σ of the wallet's root positions, TAO for alpha at 1:1. Alpha: for each position, the TAO its own subnet pool would pay out for that alpha alone, summed

The root figure is root stake only and excludes free TAO, which the Total column adds back. Alpha is valued at roughly what it would fetch on exit, so it reads lower than flat-price or EMA-based figures, though it is still a little optimistic because the swap fee is not deducted. A position on a subnet with no pool is skipped rather than valued at zero.

API request
GET https://api.taoswap.org/accounts/

Response fieldresults[].staked_tao / results[].staked_alpha_in_tao

Stake (α)

All the alpha staked on the subnet, i.e. everything held outside the pool.

Formulaall the alpha the subnet has issued that is not sitting in its pool (α)

Careful with the word reserve: the pool's alpha reserve is the OTHER figure (see In Pool). This one is everything outside the pool, and it is broader than "what holders own": it INCLUDES the owner's locked and self-staked alpha, the alpha orphaned by past burns (a burn does not shrink it), and alpha the protocol itself bought through chain buys. Locking changes nothing here either, since a lock only blocks withdrawal and moves no tokens. The owner-excluded distribution behind HHI / Nakamoto / Top 10% is a separate calculation.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].alpha_stake

Stake share (validator)

The split of a validator's own stake between root and alpha, drawn as a bar. It says nothing about the validator's size relative to others, which is Dominance.

Formularoot % = root stake / total stake × 100; alpha % = the remainder
Data source
GET https://api.taoswap.org/validators/

Response fieldresults[].total_stake_root, results[].total_stake

The bar splits the same total into its root and alpha halves.

Stake transfers (in / out)

Alpha or TAO you moved to or received from another wallet, valued at the price when it moved. Shown for context, never added on top of your totals.

FormulaStake transfers: alpha that entered or left this wallet through a wallet-to-wallet transfer, counted at the TAO value the chain recorded for the move, plus its dollar value at that date. TAO transfers: plain TAO in and out of the free balance, whole-wallet only. Both are all-time cumulative

A transfer out is already counted inside Realized as a disposal at market price, which is why adding these on top would double-count. On the receiving side the alpha arrives with a fresh cost basis at the market price of the day rather than the sender's basis, so moving stake between two wallets you both own resets your entry price. Moving alpha between your own hotkeys or subnets is a different operation and is not counted here at all.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.transfer_stake_in / _out, pnl.transfer_tao_in / _out

Cumulative, all-time, valued at the market price when the transfer happened.

Supply

All the alpha in circulation for this subnet: what sits in the pool plus what is held outside it.

Formulaα in the pool + α held outside the pool

Burned alpha is deliberately NOT removed here: on-chain a burn destroys the tokens but leaves the outside-the-pool figure untouched, and it is tracked separately (see Burned). Market cap, by contrast, does remove it, which is why supply × price sits above market cap on burn-heavy subnets. Recycled alpha IS already excluded, because recycling does reduce that figure, and the issuance counter with it. Supply and market cap both stop at those two stocks, leaving out the protocol alpha reserve that the chain folds into its own issuance figure (see Root Proportion): liquidity waiting to be injected, owned by nobody, and zero on every subnet today. Note that "held outside the pool" is not the same as "staked by holders": it also contains the orphaned alpha of past burns and alpha the protocol bought through chain buys. Root is a special case, since its alpha IS TAO, so the figure is served while its two components are not. Explorers that also net burns, or that show the 21M cap (which is the FDV base), will differ.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].total_supply

Takeover gate (Threshold met)

Two conditions must both hold before the chain will hand a subnet to the conviction leader: the subnet must be over a year old, and the TOTAL conviction locked on it (every holder combined, owner included) must reach 10% of its staked alpha. Threshold met is how full that second condition is.

FormulaBoth locks checked together once per epoch: age ≥ 2,629,800 blocks (7200 × 365 + 1800 ≈ 365.25 d) AND total conviction (α) ≥ 10% of the alpha held outside the pool. Threshold met = total conviction (α) / that 10% bar × 100.

Both gates are evaluated together, once per epoch rather than every block. The 10% divisor is fixed in the runtime, not a governance parameter, but the quantity it applies to is not fixed at all, so the bar moves under your feet: the chain mints alpha into the outstanding supply on every block of every subnet, emission-disabled ones included, which adds about 720 alpha a day to the bar on its own. Staking and unstaking move it too, in both directions, and measured over 11 days of mainnet the net drift came out at a median of +304 alpha a day across 123 subnets, rising on 82 of them and falling on 41. So a gauge that slips backwards while nobody unlocks is the normal case, not a bug. The age gate is a plain countdown and is usually already cleared. The bar can read above 100% for a while when a decaying lock is near its peak, without the gate being durably reachable; see the ceiling described under Time to takeover. Whether the chain actually executes the flip is a runtime question, so read `takeover_enforced`, which tracks the live runtime version rather than a hardcoded flag: while it is false the gates are computed but nothing happens, which makes this an armed race rather than an executed takeover. Mainnet passed the enabling runtime version, so it reads true today. Even then the flip is not automatic: the chain also requires the leader to resolve to a real wallet, different from the current owner, and eligible to hold a slot on the subnet.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.threshold_used_pct

Takeover status

A one-word verdict on the ownership race: whether the gate can ever be reached with the locks as they stand, whether both gates are already satisfied, and whether the chain would act on it.

FormulaEligible = the age lock AND the conviction lock both satisfied. Stalled = no ETA found within 3 years, which happens for either of two reasons on its own: the current locks plateau below the gate, or the gate climbs past a plateau that sits above it today. Building = an ETA exists. Enforcement = whether the runtime actually executes the flip.

Stalled is not the same as "far away": it means waiting cannot get there, only a new lock can, whether because the perpetual mass tops out under the bar or because the bar outruns it. A subnet can sit above 100% on the Threshold-met bar without being eligible, and today that is ALWAYS the age lock holding it back. Even when eligible, the flip only happens at the next epoch, only if enforcement is on, and only if the leader is a different wallet from the current owner.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.gate_reachable, .takeover_eligible, .takeover_enforced

Time to takeover (ETA)

How long the current locks would need to fill the 10% conviction gate, projected day by day. Deliberately NOT proportional to the Threshold-met bar: a subnet that looks fuller today can still show a longer ETA.

FormulaSmallest Δ, scanned in 1-day steps out to 3 years, where the projected total conviction reaches the bar AS IT WILL STAND ON THAT DAY, i.e. the 10% gate plus the alpha issued into it since today; 0 means already there, none means never with the locks as they stand. The projection replays the chain maturation/decay math: existing conviction fades by exp(−Δ/maturity rate), perpetual mass matures into conviction by (1 − exp(−Δ/maturity rate)), decaying mass follows the chain's γ term, and owner masses are pinned to their locked mass.

It covers the conviction gate ONLY and ignores the age gate, so a subnet less than a year old can show an ETA of 0 while still being years from eligible; read it next to the age. It is also the same information as the reachable flag, by construction: an ETA exists exactly when the gate is reachable. Conviction converges towards the perpetually locked mass, because the decaying part matures and then melts away. That gives the gauge a ceiling (gate_ceiling_pct = perpetual locked / threshold × 100), but the ceiling is measured against TODAY's bar while the bar itself climbs, so above 100% is necessary and not sufficient: 39 subnets currently sit above it and 22 of them get overtaken inside the 3-year scan at the drift measured over the last 11 days. Below 100% the gate is never durably reachable and the status reads Stalled, even if a transient bump crosses it. The approach is concave, so the closer the ceiling sits to the threshold the slower the final stretch, and a subnet with high conviction today but a ceiling barely above the gate reads slower than a less-filled one with room to grow. The 3-year horizon is about 36 maturity half-lives at the current setting, far enough out that the projection has settled, so "no crossing" really does mean "never, with the locks as they stand"; move that half-life back to its default and the margin shrinks fourfold. It assumes locks stay frozen, and it models the bar as rising at the issuance rate alone, which is the only mechanical term: real stake flows add to it or subtract from it, so the projection is deliberately on the pessimistic side. Every sync recomputes it and the value drifts.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].conviction.gate_eta_days

Top 10 %

How much of the stake the ten largest holders own between them.

Formulacombined share of the 10 largest holder wallets in the staked alpha, owner self-stake removed. A fraction 0..1, ×100 for display

It is a fraction in 0..1, not a percentage, and it reads exactly 1 whenever the subnet has 10 holders or fewer. The denominator excludes the owner self-stake, so it measures the tradable distribution; the owner can still show up through its external delegations.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].top10_share

Total (account)

Everything the wallet is worth in TAO: free plus root stake plus alpha stake.

Formulafree balance + root stake (1:1) + alpha stake valued through the pools, all three from the same snapshot block
API request
GET https://api.taoswap.org/accounts/

Response fieldresults[].total_tao

Total Stake (validator)

Everything a validator has behind it, root stake plus alpha across every subnet, expressed in TAO.

FormulaΣ over every position the validator holds, position by position: root at 1:1, alpha valued by draining that position alone into its subnet pool (constant product on the live reserves, before the swap fee)

Alpha is valued at roughly what it would fetch on exit, position by position, not at flat spot and not at the moving price. So it reads lower than a naive Σ(alpha × price) for large positions, and lower still than EMA-based explorers; it is still slightly optimistic, since the swap fee is not deducted. The Accounts table values alpha through the same function, so the two are directly comparable, though each pipeline reads the pools at its own sync. A position on a subnet with no pool is left out of the total rather than valued at zero. It is a snapshot from the last sync.

API request
GET https://api.taoswap.org/validators/

Response fieldresults[].total_stake

Value (τ) / Share

What a position is worth in TAO, and how much of the portfolio it represents.

FormulaSpot: value = alpha held × the pool price, free TAO and root at 1:1. Realizable: the subnet's whole alpha goes through the pool once and each position takes its pro-rata share. share = position value / portfolio total, both in the same mode

Live balances and pool reserves come straight from the chain, so the portfolio never lags behind your wallet. Switching to Realizable changes the value, and therefore every share, at once. If the chain connection drops, the app falls back to the API for the subnet list, which carries neither the pool weights nor the per-subnet fee, and Realizable quietly becomes a rougher estimate.

Data source
GET https://api.taoswap.org/portfolio-balance/?account=<coldkey>

Live positions are read from the chain, the balance chart is the historical record.

Volume 24H

TAO traded through the subnet's pool over the last 24 hours.

FormulaΣ of the TAO leg of every pool-touching stake and unstake on the subnet over the trailing 24 h (τ), recomputed at most once an hour; the USD figure is server-converted

Counted on one side only, in TAO, so it reads far below what an exchange would print for the same activity, since exchanges count both legs of a trade. Protocol chain buys are excluded: the coinbase moves the reserves directly without ever emitting a trade. Swaps and cross-subnet moves contribute each of their legs to the pool it touches, while same-subnet hotkey or validator rebalances are excluded, because they never touch the pool, and so are the refunds paid out when a subnet is dissolved. Burns and recycles never count. The window rolls from now, but the hourly recompute makes it step rather than glide. null for root (no pool); a 0 is a real zero. Note the chain has its own volume counter, but it only sees direct calls to the swap pallet, a small fraction of real activity, so this is built from the stake events instead.

API request
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].volume_24h (volume_24h_usd for the USD value)