Table of Contents
Bittensor's Subtensor runtime v484 keeps stake visible while a subnet is being dissolved, opens liquid alpha consensus controls to EVM smart contracts, and fixes a root-dividend claim error affecting validators with full subnet baskets.
The Rao Foundation published Runtime 484 on October 23. The release also incorporates runtime 483's changes to EVM input metering and proxy and utility transaction validation. Its main changes address reporting, administrative access, and transaction admission rather than introducing a new reward-allocation model.
The upgrade follows v482's coldkey-swap merges, restricted validator proxies, and miner payout correction. The v482-to-v484 changelog also includes Python SDK and command-line fixes alongside the onchain changes.
Stake Reporting Follows Subnets Through Dissolution
When a subnet is deregistered, its outstanding alpha stake must be settled back into TAO. Previously, a staker could encounter an interval in which the alpha position had disappeared from reporting but the corresponding TAO payment had not yet arrived.
The lifecycle reporting change makes the displayed position follow the settlement process. Unpaid alpha remains visible until the payout cursor reaches it. The position disappears from reporting in the same finalized block that its TAO payout appears, avoiding both a missing-balance interval and a double count of the same value.
A new SubnetState storage entry records four lifecycle states: Registered, Started, PendingDissolution, and Dissolving. The runtime maintains those states during registration, startup, dissolution, cleanup selection, and completion. An idempotent migration initializes the state of existing subnets, meaning it can be applied again without repeating its effect.
Stake on pending or dissolving subnets is displayed as unavailable for manual unstaking because it is awaiting automatic settlement. That gives wallets and explorers a way to distinguish an active position from one already moving through the payout process.
The reporting changes extend across stake, delegate, neuron, metagraph and mechagraph, subnet-state, dynamic-info, and price APIs. The Python SDK adds typed lifecycle states, reads pinned to a specific block, and fallback support for pre-upgrade data. Relevant btcli commands expose lifecycle and automatic-payout status in their normal displays and JSON output.
Dissolution, settlement, and cleanup retain their existing behavior. Operational subnet status still depends on NetworksAdded, and the existing runtime API signatures are unchanged. The new lifecycle field supplies reporting information rather than replacing the rules that govern whether a subnet operates.
Developers reported 1,438 passing Rust pallet tests and 1,110 passing Python tests. A local-chain dissolution test verified that alpha disappeared in the same finalized block as its TAO payout. A mainnet-clone replay was blocked by a Finney peer rejecting warp proofs, and the PR lists regeneration of measured benchmark weights on canonical hardware or an approved pipeline as a follow-up.
Smart Contracts Gain Liquid Alpha Mode Controls
Liquid alpha adjusts how validator bonds evolve within Yuma, Bittensor's consensus and reward-allocation system. Those bonds track validator relationships with miners over time and feed into validator dividends. The consensus-mode setting chooses which epoch's consensus informs the liquid alpha calculation.
Runtime 484 adds typed access through the Subnet precompile at 0x0803. A precompile is an EVM-accessible interface to native chain functionality, allowing a Solidity contract to call runtime operations without reimplementing them.
Contracts can read the setting with getLiquidAlphaConsensusMode(uint16 netuid), which returns a uint8, and change it with the payable function setLiquidAlphaConsensusMode(uint16 netuid, uint8 mode).
The interface uses the existing consensus-mode definitions:
| Value | Mode | Consensus Source |
|---|---|---|
0 | Current | Consensus calculated in the current epoch |
1 | Previous | Consensus persisted from the previous epoch, with fallback if absent |
2 | Auto | Previous consensus at the maximum bonds penalty; current consensus otherwise |
Auto remains the default, and values outside the three supported encodings revert. The upgrade exposes an existing setting to contracts rather than introducing the modes themselves.
The setter dispatches AdminUtils.sudo_set_liquid_alpha_consensus_mode as the mapped EVM caller. Subnet-owner authorization, the administration window, and per-hyperparameter rate limits still apply. Contract access therefore gives eligible owners another route to manage the setting, including through contract-based administration, without bypassing native permissions.
The getter charges one database read. The Solidity interface, canonical ABI, Python SDK ABI, and EVM documentation have been updated, while existing precompile addresses, selectors, and behavior remain unchanged.
Full Subnet Baskets Can Claim Root Dividends
The root-claim correction addresses a one-unit mismatch in the work budget for validators whose baskets contain all 128 non-root subnets plus the root/TAO row.
Admission counts one unit for each basket row and another for the validator. A full basket therefore needs 130 units: 128 subnet rows, one root row, and one validator. The previous limit of 129 could reject that otherwise valid claim with RootClaimTooHeavy.
MAX_ROOT_CLAIM_HOTKEY_WORK rises to 130 for both admission and declared execution weight. A regression test requires the bound to remain at least SubnetLimit + 2, keeping the allowance aligned with the full-basket case if the subnet limit changes.
The incorporated runtime 483 changes charge EVM precompile input processing before decoding and add transaction validation for fee-free calls wrapped through proxy and utility operations. These changes concern how work is admitted and metered, separately from the root-claim budget correction.
On the client side, btcli's claim-root fix prevents a crash when --subnets is omitted. Omitted factory-backed arguments now reach the intent constructor correctly, allowing it to supply the default [0] subnet list. A separate metagraph display fix uses symbols from the queried snapshot rather than stale cached labels, including for historical reads. These are Python client changes, not behavior activated solely by an onchain runtime upgrade.
The release also skips redundant balancer storage writes during swaps while preserving liquidity calculations, reservoir accounting, and the existing worst-case weight bound.
Finally, fee regression snapshots and signed EVM transaction tests check transfers, staking, and proxy operations, including actual gas charges and unused-gas refunds. Fee deviations beyond 20% of a snapshot require a reviewed baseline update; that threshold is a test tolerance, not a new onchain fee cap.