Curated Beta · August 2026
Largest funds by NAV since launch. Gold is the index (average basket). Height above it is cumulative outperformance versus the average basket.
The same system in dollars: every fund's NAV marked hourly in τ, times the TAO/USD price of the same hour. Three weeks in, outstanding β across all validator baskets is worth about $4.5M.
Spec 450 turns on set_root_weights. From the upgrade block a root validator can choose how its dividend stream (the yield from root stake) is re-deployed across subnet alpha.
A new RootWeightsCap of 1/16 is added which limits concentration of the validator's dividend stream. Validators must spread across at least 16 destinations. btcli root is the working surface: list, allocate, claim, and weights.
The scoreboard itself also moves on chain: the runtime now computes the basket index and every fund's index-spliced display price, staker yield, and positions, so btcli, explorers, and contracts all read the same canonical numbers instead of each interpreting raw state. This release supersedes the unshipped 449 tag; everything proposed there ships here.
As with the Root Reborn update, root principal stays as root stake in TAO, yield accrues as beta (a share in a basket of alpha tokens). These can be 'claimed' into TAO which folds the yield back into stake.
1 · List
btcli root list shows each root validator's basket, sorted by NAV.
btcli root list
2 · Allocate
Deploys τ from free balance into the chosen validator's basket and credits β immediately.
btcli root allocate
3 · Claim
Sells your accrued β back to the fund and folds the TAO into your root stake on that validator (claim_root_with_hotkey). Principal is never touched.
btcli root claim
btcli root weights writes an equal-weight vector. A 16-way split sits on the cap; add a 17th and it renormalizes to 1/17. Netuid 0 is a valid destination — that slice is held as TAO.
1 · Register
Burn-based seat. This upgrade writes ``MinBurn`` and ``ImmunityPeriod`` on root. A full senate evicts the lowest-staked non-immune member.
btcli subnets burn-cost 0 btcli root register
2 · Stake
Root principal on your hotkey. Needed to keep the seat and to set weights.
btcli stake add --netuid 0 --amount 1000 --hotkey <your hotkey>
3 · Set
Replace the allocation. Hotkey signs. 16 destinations, 1/16 each (set_root_weights).
btcli root weights set --netuids 0,1,3,4,5,8,9,11,13,19,21,23,34,51,64,77
4 · Add
17 destinations, 1/17 each.
btcli root weights add --netuid 88
5 · Remove
Drop one, renormalize.
btcli root weights remove --netuid 8
Raw fund prices (NAV / β supply) carry arbitrary historical baselines, so they are not comparable across funds of different ages. Until now the fix — splicing every fund onto a common index at its birth — lived in a frozen table inside the SDK: an interpretation only btcli shared. V450 makes that convention chain state.
Every fund gets a frozen BetaBaseline, stamped once at its first share mint. The stamp marks both the fund's own price and the index level at realizablequotes — what selling would actually fetch, bounded by pool depth — so a baseline cannot be poisoned by briefly pumping a thin pool's spot price. A migration seeds the baselines the SDK has been displaying, so every number is continuous through the upgrade. Baselines live exactly as long as their fund: fully claimed out means retired, and a revival stamps fresh.
The runtime also keeps BasketTwr, a per-fund total-return accumulator that compounds with every dividend mint. Staker return over any window is a pure ratio of two samples — the canonical answer to "if I staked τ1 here, what did I earn?"
Five new betaBasket runtime APIs serve the whole surface: get_all_beta_pricing (the leaderboard in one call, every fund marked against one index sweep), get_beta_pricing, get_beta_index (the live bag and stake index levels), and get_beta_position / get_beta_portfolio(a staker's holdings in display units, where display_beta × display_priceis the position's value). On v450 nodes, btcli root list is a pass-through of these numbers; its local math remains only as a fallback for older nodes and pre-upgrade history.
The migration sets RootWeightSettingEnabled to true and writes RootWeightsCap at 4096/65535. The cap is checked on the submitted values; stored vectors from before the upgrade are left alone until the next write. Governance can move the cap (AdminUtils::sudo_set_root_weights_cap) or switch curation back off. After that, RootWeightSettingDisabled means the switch is off, not that the launch gate is still closed. On a chain with fewer destinations than the cap demands, the check is skipped.
The upgrade also adds the standardized pricing layer above: BetaBaseline and BasketTwrstorage, baseline stamping at first mint, a migration seeding the SDK's historical baselines, and the five betaBasket pricing APIs (runtime API v3).
SDK 11.3.0 ships with the runtime. That is the version that has btcli root list, allocate, claim, and weights, plus the index-spliced β rate — read straight from the chain's pricing APIs on upgraded nodes. Upgrade:
pip install -U bittensor
SetRootWeights preflights the cap on the quantized values it will submit. Fund reads: root-baskets, validator-basket-summary, basket-position, root-basket-portfolio. Guide: Root Reborn.