Skip to main content
SUBMIT A PRSUBMIT AN ISSUElast edit: Nov 06, 2024

Guide to Dynamic TAO

Dynamic TAO is a sophisticated mechanism for both a TAO holder and a validator to manage their stake, influence, and governance across multiple subnets in the Bittensor network. More important, the dynamic TAO:

  • Eliminates the role of the centralized root network.
  • Enables a TAO holder to participate in a subnet of their choice.
  • Creates a new measure of a subnet's performance via the subnet-specific dynamic TAO token (dTAO). A dTAO token is exchangeable with TAO.
  • Incorporates the consensus power of a validator into their dTAO token stake holdings.
  • Uses a subnet's dTAO to determine emissions to the subnet.

The dynamic TAO elegantly solves the problem of managing influence across different subnet economies while maintaining mathematical consistency and economic incentives.

Subnet pool

The heart of the dynamic TAO mechanism is a subnet pool, with the following properties:

  • Associated with each subnet is a subnet pool.
  • A subnet pool consists of two token reserves, a TAO token reserve and a subnet-specific dTAO token reserve.
  • Each subnet has its own dTAO token. For example, dTAO α is the token for subnet α, dTAO β is the token for subnet β, and so on.
  • All token exchanges between TAO and dTAO occur through the subnet pool. The subnet pool's reserve ratio determines the exchange rate.
Subnet PoolSubnet Pool

TAO reserve (τ_in) and alpha reserve (α_in)

The TAO side of a subnet pool's reserves are denoted by τ_in, or TAO reserve, and are expressed in units of TAO. Similarly, the dTAO side of the pool reserves are denoted by α_in, or alpha reserves. The terms α_in and alpha reserves are general terms and refer to the pool reserves of all subnets, including that of subnet α.


Rate (τ_in/α_in)

We use the term rate to refer to the exchange rate between TAO and a subnet dTAO token. This is calculated as a ratio of the subnet's pool reserves, i.e., TAO reserve(τ_in) / alpha reserves (α_in).

Example

For example, if for subnet ε, its subnet pool contains TAO reserves of 1000 TAO units and its alpha reserves of 16000 dTAO ε units, then the exchange rate between TAO and dTAO ε is:

R=τinαin=100016000=0.0625R = \frac{\tau_{in}}{\alpha_{in}} = \frac{1000}{16000} = 0.0625

Hence,

1 TAO=0.0625ε\text{1 TAO} = 0.0625ε

This exchange rate can change every block when staking or unstaking or emissions occur on this subnet.


Staking

With dynamic TAO, staking would work like this. See the below diagram.

StakingStaking

  1. Under the dynamic TAO, as a TAO holder you would still stake to a validator’s hotkey, but now you can also select a subnet (netuid) of your choice. When you run btcli stake add command, the TAO you want to stake first goes into the subnet pool.
  2. The TAO to be staked is added to the TAO reserves side of the subnet pool.
  3. The subnet pool algorithm uses the exchange rate and calculates the equivalent units of dTAO α, for the TAO that was just added to the TAO reserve side. This amount of dTAO α is taken out of the alpha reserve of the pool and is sent to the validator’s hotkey.
  4. The validator’s hotkey holds the dTAO α. This is referred as Stake (α).
Stake is always expressed in alpha units

In dynamic TAO, the stake held by a hotkey in a subnet is always expressed in the subnet-specific dTAO α units and not TAO units.


STAKE (α_out) or alpha out (α_out)

Total stake in the subnet. This is the sum of all the Stake (α) present in all the hotkeys in this subnet, including those of validators, miners and of the subnet owner. This is often referred as α outstanding. Compare this with α reserve, which is the amount of α in the subnet pool. The α outstanding can change every block.

Hotkey's stake share (α / α_out)

A hotkey's share of the total outstanding alpha tokens in the subnet is calculated as:

A hotkey’s stake share=hotkey’s stake(α)Total stake(αout) in the subnet\text{A hotkey's stake share} = \frac{\text{hotkey's stake}(\alpha)}{\text{Total stake}(\alpha_{out})\text{ in the subnet}}
Local staking power within the subnet

The hotkey's stake share represents the local stake power of the hotkey within the subnet.


Unstaking

Unstaking works, not surprisingly, as a reverse of the staking operation. See the below diagram.

UnstakingUnstaking

  1. When you issue an unstake command, btcli stake remove, and specify the units of α token you want to unstake, this dTAO α is first taken out of the validator’s hotkey and added to the α reserves of the subnet pool.
  2. The subnet pool algorithm then applies the latest exchange rate and calculates the equivalent TAO units for the α token units that were just added to the α reserves of the pool.
  3. These equivalent TAO units are then taken out of the TAO reserves of the subnet pool and are sent to the TAO holder’s coldkey.

TAO Equiv (τ_in x α/α_out)

A hotkey's stake, i.e., stake(α), represents subnet-specific stake. Moreover, a dTAO token of a subnet is not fungible with a dTAO token of another subnet. As a result, a hotkey's stake share (α / α_out) can only represent the validator's staking power within the subnet. For this very reason, the hotkey's stake share in one subnet cannot be simply added to the same hotkey's stake share in a different subnet.

This is where the TAO-equivalent value of the hotkeys stake share (α / α_out) comes into play. As we saw in the Staking section, any TAO staked into a subnet is added to the TAO reserves of the subnet pool, i.e., added to τ_in. As a consequence, τ_in reserve represents the total voting power of the subnet. Hence,

a subnet’s total voting power×hotkey’s stake share in the subnet\text{a subnet's total voting power}\times\text{hotkey's stake share in the subnet}

represents the hotkey's local voting power proportional to its stake share in the subnet. It is calculated as:

τin×hotkey’s stake share=τin×ααout\tau_{in}\times\text{hotkey's stake share} = \tau_{in}\times\frac{\alpha}{\alpha_{out}}

and is expressed in TAO units. This can change every block.

Exchange Value (α x τ/α)

This is the potential instantaneous TAO you will receive, without considering slippage, if you unstake at this instant from this hotkey on this subnet. See Swap(α → τ) column description. This can change every block.

Compare with TAO Equiv

Whereas the TAO Equiv(τ_in x α/α_out) indicates a validator's local stake weight, this Exchange Value shows TAO you will receive if you unstake now.

Swap (α → τ)

This is the actual τ you will receive, after factoring in the slippage charge, if you unstake from this hotkey now on this subnet. The slippage is calculated as 1 - (Swap(α → τ)/Exchange Value(α x τ/α)), and is displayed in brackets. This can change every block.

Emission (α/block)

Shows the portion of the one α per block emission into this subnet that is received by this hotkey, according to YC2 in this subnet. This can change every block.

Emission (τ)

Shows how the one τ per block emission is distributed among all the subnet pools. For each subnet, this fraction is first calculated by dividing the subnet's TAO Pool (τ_in) by the sum of all TAO Pool (τ_in) across all the subnets. This fraction is then added to the TAO Pool (τ_in) of the subnet. This can change every block.

Tempo (k/n)

The tempo status of the subnet. Represented as (k/n) where "k" is the number of blocks elapsed since the last tempo and "n" is the total number of blocks in the tempo. The number "n" is a subnet hyperparameter and does not change every block.

Local weight coeff (γ)

A multiplication factor between 0 and 1, applied to the relative proportion of a validator's stake in this subnet. Applied as (γ) × (a validator's α stake in this subnet) / (Total α stake in this subnet, i.e., Stake (α_out)). This γ-weighted relative proportion is used, in addition to other factors, in determining the overall stake weight of a validator in this subnet. This is a subnet parameter.