Staking in Bittensor
TAO holders can stake any amount of the liquidity they hold to a validator. Also known as delegation, staking supports validators, because their total stake in the subnet, including stake delegated to them by others, determines their consensus power and their share of emissions. After the validator/delegate extracts their take the remaining emissions are credited back to the stakers/delegators in proportion to their stake with that validator.
See also:
Validators/delegates can configure their take. The default value is 18%. See Setting your delegate take.
Minimum required stake for nominators is 0.1 TAO.
Example
Suppose a validator holds 800 TAO of their own.
Then three nominators stake to the validator as follows:
- Nominator 1: 100 TAO.
- Nominator 2: 70 TAO.
- Nominator 3: 30 TAO.
The validator's effective stake is the total sum of their own and all delegated stake.
Emissions to stakers are proportional to their contribution to delegated stake:
-
Nominator 1 represents 50% of total delegated TAO:
-
Nominator 2 contributes 35% of the total delegated TAO.
-
Nominator 3 contributes 15% of the total delegated TAO.
The delegate validator would keep 80% of the emissions, based on their 80% proportion of the total stake (0.8). In addition, the validator would keep their 18% take of the emissions earned on the delegated stake.
As a result:
- Total emissions to the delegate are: of the received emissions.
- Each nominator receives the following portions of the validator's total emissions, based on their contribution percentages:
- Nominator 1 emissions:
- Nominator 2 emissions:
- Nominator 3 emissions:
A nominator is the same as a delegating authority. Typically, a nominator is an owner of TAO funds who wants to invest in the Bittensor network without performing any validating tasks.
Staking operations
Viewing available delegates
If you are looking for trusted delegate(s) to whom you can delegate your funds, start by seeing a list of already active delegates on the Bittensor network. Run the below command on your terminal:
btcli root list_delegates
You will get an output like this (click on the image to zoom):
See below for an explanation of the column headings in the above terminal output:
Column | Meaning |
---|---|
INDEX | Delegates with a larger total stake are higher on the list. |
DELEGATE | The name of the delegate. Click on the name to visit the delegate website. It only shows if the delegate has registered. |
SS58 | The SS58 hotkey of the delegate. |
NOMINATORS | The number of nominators, i.e., delegators, who have delegated to this delegate. This is also the number of unique cold keys (i.e., number of nominators) nominated to this hotkey (i.e., to this delegate). |
DELEGATE STAKE(τ) | The amount of the delegate's own stake (not the TAO delegated from any nominators). This is the amount of stake that the delegate-owned coldkey has delegated to this delegate's hotkey (distinct from TAO delegated from others). |
TOTAL STAKE(τ) | The total amount of stake delegated to this delegator's hotkey. |
CHANGE/(4h) | The percent change in the total stake delegated to this delegate within the past 4 hours. |
VPERMIT | Shows the subnets for which the delegate holds the validator permits. |
TAKE | Shows the delegate take percentage. |
NOMINATOR/(24h)/kτ | Stake allocated to this delegate's nominators within the past 24-hour period (per 1000 TAO). |
DELEGATE/(24h) | Stake cut taken by this delegate within the past 24 hours. |
Desc | A description of the delegate. |
Delegating tao
The below command will show a list of delegates sorted by their total stake. Select a delegate from this list to whom you can send your stake.
btcli root delegate
Output:
INDEX DELEGATE SS58 NOMINATORS DELEGATE STAKE(τ) TOTAL STAKE(τ) CHANGE/(4h) VPERMIT TAKE NOMINATOR/(24h)/kτ DELEGATE/(24h) Desc
0 5GTMADbd... 0 τ0.000000000 τ0.000000000 NA [0, 1] 18.0% τ0.000 τ0.000
Enter delegate index: 0
Enter wallet name (default):
Stake all Tao from account: 'default'? [y/n]: y
Enter password to unlock key:
Do you want to delegate:
amount: τ120,999.999999000
to: 5GTMADb *** 39Gp
default: 5CzJxoM8 *** oRD [y/n]: y
✅ Finalized
Balance:
τ121,000.000000000 ➡ τ0.000001000
Stake:
τ0.000000000 ➡ τ120,999.999999000
Show your delegations
To show all your previously made delegations:
Use --all
option to show delegations across all your wallets.
btcli root my_delegates
Output:
Wallet OWNER SS58 Delegation τ/24h NOMS OWNER STAKE(τ) TOTAL STAKE(τ) SUBNETS VPERMIT 24h/kτ Desc
owner 5GTMADbd... τ120,999.9999 τ0.000 1 τ0.000000000 τ120,999.9999 [0, 1] ['', '*'] 0.0
Total delegated Tao: τ120,999.999999000
Delegate operations
Becoming a delegate
If you are a registered subnet validator, you can become a delegate. To become a delegate:
- You must make your hotkey available for the nominators.
- You must provide and sign your delegate information.
The nominators will then delegate their TAO to this hotkey, i.e., the nominators will use your delegate hotkey as a wallet destination for their delegated TAO transfers.
Step 1: Nominate yourself as a delegate
Run the below command (for self-nominating as a delegate):
btcli root nominate --wallet.name <my_coldkey> --wallet.hotkey <my_hotkey>
Example:
btcli root nominate --wallet.name test-coldkey --wallet.hotkey test-hotkey
Step 2: Provide your delegate information
Next, provide your delegate information, such as your delegate name, URL, and description. This information will then be available in the list of active delegates, for example, when a nominator runs btcli root list_delegates
to see available delegates.
To provide and sign this information, follow the instructions on this Bittensor Delegates repo.
Setting your delegate take
As a delegate, you can set your delegate percentage by running the below command:
btcli root set_delegate_take --wallet.name <my_coldkey> --wallet.hotkey <my_hotkey> --take <floating point number between 0 and 1>
Example:
btcli root set_delegate_take --wallet.name test-coldkey --wallet.hotkey test-hotkey --take 0.1
where the value for the --take
option is a floating point number between 0 and 1. In the above example, --take 0.1
sets the delegate take to 10%.