You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nobody publishes a subnet revenue number you can re-derive. This epic makes metagraphed the place that does.
Why this exists
The question "how much does this subnet actually earn, versus what it emits" is the most-asked unanswered question in the ecosystem, and the existing answers are all closed:
Source
What it is
Why it is not enough
TAO Institute
The dataset everyone resells. Tags entries TI Verified / Self-reported / Public.
Human-curated, login-walled, no published method, no API.
SubnetRadar
Resells the TAO Institute set every few hours.
Downstream. No independent observation.
taorevenue.com
"Revenue, emissions & profitability in real time."
Closed methodology.
Pine Analytics
Produced the quoted "$52M emissions vs $2.4M revenue" and 22–40:1 for Chutes.
A March 2026 essay, not a live feed.
Every one is human-curated and self-reported. Nobody derives revenue from live public endpoints on a schedule, cross-checks it against the chain, or publishes provenance per number. That is the gap, and it is the discipline this repo already runs on everywhere else.
Why it is cheap here specifically
The denominator is already exact.get_emission_pipeline returns per-subnet tao_total measured from SubnetTaoInEmission + SubnetExcessTao, with four identity checks that must pass. No competitor is close.
The ecosystem is still quoting Pine's 22–40:1 from March. A live, re-runnable 8:1 is the launch story.
Definitions (the contract)
Denominatoremission_value_usd, default basis tao_total — TAO the network directs into the subnet. Fully measured. Alternates published, never silently substituted: alpha_out_emission × alpha_price, and owner_take (18%).
Numeratorexternal_revenue_usd — money from outside Bittensor paid for a service. Explicitly not emissions, alpha appreciation, miner payouts, or validator yield.
Windows: daily / 7d / 30d / 90d over a common block range.
The provenance ladder
Tier
Value
Counts toward headline?
A
chain-verified — payments observed in our transfer index against an attributed address
yes
B
probe-derived — public endpoint polled on schedule, hashed + timestamped
yes
C
operator-attested — citable URL, or endpoint exists but auth-gated
no — shown beside
D
third-party-reported — Pine / TAO Institute / press, cited
no — shown beside
E
proxy-only — usage figures, no money
no
F
none — searched, absent, dated
no
Tier A is a spot-check, not a substitute. Measured on SN64 for 2026-08-08, the on-chain TAO channel is $1,036.50 against $9,776.06 total revenue — 10.6%. The other ~89% is card/pay-as-you-go, off-chain and unverifiable by construction. chain-verified corroborates an operator's honesty on the slice it can see; the headline still rests on probe-derived.
Two hard rules, mirroring probe-derived-only for health:
The headline ratio uses A + B only. No estimation, no modelling, no gap-filling.
Absent revenue is null, never 0; coverage_ratio is null whenever revenue is null. A subnet with no data must not render as a 0% subnet.
What the completed sweep actually found
Updated 2026-08-10. Phases 1–3 are done: all 129 subnets classified, every OpenAPI fetched and path-scanned, every website and docs page fetched and scanned for pricing signals. The original tiering below was a keyword sweep of the registry; this is the result of actually looking.
Two subnets out of 129 publish a revenue figure anyone can read. SN64 Chutes and SN51 Lium. That is the headline, and it is much sharper than the "73% dark" estimate this epic opened with.
state
count
what it means
publishes a readable figure
2
SN64, SN51 — the only inputs a coverage ratio can be computed from today
declared but unreadable
3
SN75, SN93, SN110 — revenue endpoints in their own schemas, all 401/403
commerce visible, no figure
33+
pricing/billing on their own site or docs; they sell things and do not publish what they earn
usage counts only
21
requests, tokens, jobs, proofs — no money anywhere
no commerce signal found
~60
searched and dated; nothing observable
"No observable external revenue" is not "no revenue", and the 33 are the proof. Any wording in the API, the UI or the docs that lets those two be confused is a bug — that population is a quarter of the network and it visibly sells things.
Money that points the wrong way
The sweep's most consistent finding is that a money figure is not a revenue figure. Recorded explicitly as miner-payout or not-revenue so each is retired rather than re-investigated:
SN4 Targonpayout — emission to miners. The most-quoted number on that subnet, and it is the denominator.
SN11 TrajectoryRLtotalCostUsd — what the subnet spends. An expense.
SN46 ZipcodedailyPrizePoolUsd, SN60 Bitsecdaily_prize_pool — money paid out to competitors.
SN18 Zeus, SN43 Graphite: real POST-only checkout/webhook plumbing. Evidence of paying customers, no readable amount.
The seven traps## The seven traps (found by probing, not theorising)
Miner payout ≠ revenue. Targon's stats.targon.com/api/miners exposes payout — that is emission payout. Counting it puts the denominator in the numerator. Same class: SN43 returns total_alpha_stake, SN96 returns miner health. A "stats" endpoint is guilty until proven revenue.
Unit ambiguity.api.chutes.ai/payments/summary/tao reads {today: 1072, this_month: 15052, total: 2321800} — path says TAO, values reconcile as USD.
Channel double-count. Chutes exposes /payments (TAO channel, ~$1k/day) anddaily_revenue_summary (all channels, ~$11k/day). The first is a subset. Summing inflates ~10%.
Gross ≠ external.sponsored_inference is subnet-funded. pending_instance_revenue is unrecognised. Both excluded from headline, shown separately.
Attribution is evidence, not inference. A high-volume collector is consistent with a payment address; it is not ownership proof.
Surfaces rot. SN103 djinn.gg/api/genius/earnings is already a 301.
Circular revenue. Paid in the subnet's own alpha, or funded by the team selling emissions, is not external. Explicit circularity flag, default unknown.
Architecture
Split along the existing seam:
Declaration → registry/subnets/<slug>.json, annotating existing surfaces with a revenue block. One file per subnet (house rule 2).
Observation → probe worker → store → generated artifact. Never hand-edited, exactly as health/uptime/latency.
Sibling
Epic B is the other half of the same question — A asks whether money comes in, B asks where the emitted money goes. They share the fiat leg, the provenance ladder, and the claim-vs-chain pattern.
Sequencing
Critical path:#10441 → #10442 → #10443 → #10444/#10445 → #10446 → #10447, with #10448 run early — if the Chutes feed and the chain disagree, the Tier-A/Tier-B split needs rethinking before the 12 subnet issues are worked. Phase 2 parallelises fully once #10441/#10442 land; Phase 3 can start after #10441.
Nobody publishes a subnet revenue number you can re-derive. This epic makes metagraphed the place that does.
Why this exists
The question "how much does this subnet actually earn, versus what it emits" is the most-asked unanswered question in the ecosystem, and the existing answers are all closed:
TI Verified/Self-reported/Public.Every one is human-curated and self-reported. Nobody derives revenue from live public endpoints on a schedule, cross-checks it against the chain, or publishes provenance per number. That is the gap, and it is the discipline this repo already runs on everywhere else.
Why it is cheap here specifically
get_emission_pipelinereturns per-subnettao_totalmeasured fromSubnetTaoInEmission+SubnetExcessTao, with four identity checks that must pass. No competitor is close.usd_at_tx/price_at_tx//network/tao-usdstaleness (feat(api): usd_at_tx — the fiat companion, resolved at each event's own instant #10431–feat(ui): render the fiat leg beside price_at_tx, and say it is the less precise one #10433). Revenue-in-USD vs emissions-in-USD needs exactly per-instant fiat resolution.Balances.Transferevents, delta 0.000000000 TAO. (An earlier draft of this epic claimed the trail ran to a Chutes "collector wallet" — that address is SN64's protocol TAO pool, and the claim was withdrawn. See spike(revenue): reconcile the Chutes payment feed against the chain #10448.)The metric is already computable — worked live, 2026-08-10
SN64 (Chutes), entirely from public sources:
The ecosystem is still quoting Pine's 22–40:1 from March. A live, re-runnable 8:1 is the launch story.
Definitions (the contract)
Denominator
emission_value_usd, default basistao_total— TAO the network directs into the subnet. Fullymeasured. Alternates published, never silently substituted:alpha_out_emission × alpha_price, andowner_take(18%).Numerator
external_revenue_usd— money from outside Bittensor paid for a service. Explicitly not emissions, alpha appreciation, miner payouts, or validator yield.coverage_ratio = revenue / emissions("12.5% covered")subsidy_multiple = emissions / revenue("8:1")Windows:
daily/7d/30d/90dover a common block range.The provenance ladder
chain-verified— payments observed in our transfer index against an attributed addressprobe-derived— public endpoint polled on schedule, hashed + timestampedoperator-attested— citable URL, or endpoint exists but auth-gatedthird-party-reported— Pine / TAO Institute / press, citedproxy-only— usage figures, no moneynone— searched, absent, datedTier A is a spot-check, not a substitute. Measured on SN64 for 2026-08-08, the on-chain TAO channel is $1,036.50 against $9,776.06 total revenue — 10.6%. The other ~89% is card/pay-as-you-go, off-chain and unverifiable by construction.
chain-verifiedcorroborates an operator's honesty on the slice it can see; the headline still rests onprobe-derived.Two hard rules, mirroring probe-derived-only for health:
null, never0;coverage_ratioisnullwhenever revenue isnull. A subnet with no data must not render as a 0% subnet.What the completed sweep actually found
Two subnets out of 129 publish a revenue figure anyone can read. SN64 Chutes and SN51 Lium. That is the headline, and it is much sharper than the "73% dark" estimate this epic opened with.
"No observable external revenue" is not "no revenue", and the 33 are the proof. Any wording in the API, the UI or the docs that lets those two be confused is a bug — that population is a quarter of the network and it visibly sells things.
Money that points the wrong way
The sweep's most consistent finding is that a money figure is not a revenue figure. Recorded explicitly as
miner-payoutornot-revenueso each is retired rather than re-investigated:payout— emission to miners. The most-quoted number on that subnet, and it is the denominator.totalCostUsd— what the subnet spends. An expense.dailyPrizePoolUsd, SN60 Bitsecdaily_prize_pool— money paid out to competitors.totalPayouts— contributor rewards flowing out.top-miner-payout, SN93/SN110*-earnings/revenue-by-miner— payout, not platform revenue./pricing,/latest-tao-price/— exchange-rate feeds under money-shaped paths.apy_tiers— advertised yield config, not an amount earned.Also found
Application not found— the host is gone. Filed as registry(sn37): nine surfaces on a Railway host that no longer exists, invisible because probe.enabled is false #10548, becauseprobe.enabled: falsemade an entire dead origin invisible to health.The seven traps## The seven traps (found by probing, not theorising)
stats.targon.com/api/minersexposespayout— that is emission payout. Counting it puts the denominator in the numerator. Same class: SN43 returnstotal_alpha_stake, SN96 returns miner health. A "stats" endpoint is guilty until proven revenue.api.chutes.ai/payments/summary/taoreads{today: 1072, this_month: 15052, total: 2321800}— path says TAO, values reconcile as USD./payments(TAO channel, ~$1k/day) anddaily_revenue_summary(all channels, ~$11k/day). The first is a subset. Summing inflates ~10%.sponsored_inferenceis subnet-funded.pending_instance_revenueis unrecognised. Both excluded from headline, shown separately.djinn.gg/api/genius/earningsis already a 301.circularityflag, defaultunknown.Architecture
Split along the existing seam:
registry/subnets/<slug>.json, annotating existing surfaces with arevenueblock. One file per subnet (house rule 2).Sibling
Epic B is the other half of the same question — A asks whether money comes in, B asks where the emitted money goes. They share the fiat leg, the provenance ladder, and the claim-vs-chain pattern.
Sequencing
Critical path: #10441 → #10442 → #10443 → #10444/#10445 → #10446 → #10447, with #10448 run early — if the Chutes feed and the chain disagree, the Tier-A/Tier-B split needs rethinking before the 12 subnet issues are worked. Phase 2 parallelises fully once #10441/#10442 land; Phase 3 can start after #10441.
Children
Phase 0 · foundation (blocks everything)
revenueblock on subnet surfaces #10441 — schema(revenue): arevenueblock on subnet surfacesPhase 1 · proof on the two working subnets
Phase 2 · candidate subnets, one each
Phase 3 · sweeps
Phase 4 · surfacing