diff --git a/docs/btcli.md b/docs/btcli.md index ff0ed105..93a0ab7f 100644 --- a/docs/btcli.md +++ b/docs/btcli.md @@ -6,11 +6,11 @@ title: "Bittensor CLI" Command line interface (CLI) for Bittensor. Uses the values in the configuration file. These values can be overriden by passing them explicitly in the command line. -## Allowed networks +## Install -In any `btcli` command, the `--network` flag accepts the following values: `finney`, `test`, `local`, and `subvortex`. If no value is specified, the default network is `finney`. +See [Getting Started](./getting-started/install-btcli.md) to install `btcli`. -**Usage**: +## Usage ```console $ btcli [OPTIONS] COMMAND [ARGS] diff --git a/docs/dynamic-tao/dtao-btcli.md b/docs/dynamic-tao/dtao-btcli.md new file mode 100644 index 00000000..5fb0a694 --- /dev/null +++ b/docs/dynamic-tao/dtao-btcli.md @@ -0,0 +1,1956 @@ +--- +title: "BTCLI with Dynamic TAO" +--- + +# BTCLI with Dynamic TAO + +Command line interface (CLI) for Bittensor with dynamic TAO. Uses the values in the configuration file. These values can be overriden by passing them explicitly in the command line. + +:::tip Looking for legacy BTCLI doc? +This document includes dynamic TAO support with `btcli`. It does not include `btcli root` commands. Other commands that are disabled for dynamic TAO are marked in this document. + +For legacy `btcli` doc that supports the `btcli root` commands, see [Bittensor CLI](../btcli.md). +::: + +**Usage**: + +```bash +btcli [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--version` +* `--install-completion`: Install completion for the current shell. +* `--show-completion`: Show completion for the current shell, to copy it or customize the installation. +* `--help`: Show this message and exit. + + +**Commands**: + +* `config`: Config commands, aliases: `c`, `conf` +* `stake`: Stake commands, alias: `s`, `st` +* `subnet`: Subnet commands, alias: `s`, `subnets` +* `sudo`: Sudo commands, alias: `su` +* `utils`: Utility commands. +* `wallet`: Wallet commands, aliases: `wallets`, `w` +* `weights`: Weights commands, aliases: `wt`, `weight` + +## btcli config + +**Usage**: + +```bash +btcli config [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + +### btcli config clear + +Clears the fields in the config file and sets them to `None`. + +#### EXAMPLE + + - To clear the `chain` and `network` fields: + +```bash + btcli config clear --chain --network +``` + + - To clear your config entirely: + +```bash + btcli config clear --all +``` + +**Usage**: + +```bash +btcli config clear [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name` +* `-p, --wallet-path, --wallet_path, --wallet.path` +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey` +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint` +* `--cache` +* `--all` +* `--help`: Show this message and exit. + +### btcli config get + +Prints the current config file in a table. + +**Usage**: + +```bash +btcli config get [OPTIONS] +``` + +**Options**: + +* `--help`: Show this message and exit. + +### btcli config metagraph + +Command option to configure the display of the metagraph columns. + +**Usage**: + +```bash +btcli config metagraph [OPTIONS] +``` + +**Options**: + +* `--reset`: Restore the display of metagraph columns to show all columns. +* `--help`: Show this message and exit. + +### btcli config set + +Sets the values in the config file. To set the metagraph configuration, use the command `btcli config metagraph` + +**Usage**: + +```bash +btcli config set [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--cache, --cache / --no-cache, --no_cache`: Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. +* `--help`: Show this message and exit. + +## btcli stake + +**Usage**: + +```bash +btcli stake [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + +### btcli stake add + +Stake TAO to one or more hotkeys associated with the user's coldkey. + +This command is used by a subnet validator to stake to their own hotkey. Compare this command with `btcli root delegate` (supported in legacy `btcli` only) that is typically run by a TAO holder to delegate their TAO to a delegate's hotkey. + +This command is used by a subnet validator to allocate stake TAO to their different hotkeys, securing their position and influence on the network. + +#### EXAMPLE + +```bash +btcli stake add --amount 100 --wallet-name --wallet-hotkey +``` + +**Usage**: + +```bash +btcli stake add [OPTIONS] +``` + +**Options**: + +* `-a, --all-tokens, --all`: When set, the command stakes all the available TAO from the coldkey. +* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] +* `-m, --max-stake FLOAT`: Stake is sent to a hotkey only until the hotkey's total stake is less than or equal to this maximum staked TAO. If a hotkey already has stake greater than this amount, then stake is not added to this hotkey. [default: 0.0] +* `-in, --include-hotkeys, --hotkey-ss58-address TEXT`: Specifies hotkeys by name or ss58 address to stake to. For example, `-in hk1,hk2` +* `-ex, --exclude-hotkeys TEXT`: Specifies hotkeys by name or ss58 address to not to stake to (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` +* `--all-hotkeys / --`no-all-hotkeys``: When set, this command stakes to all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: `no-all-hotkeys`] +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli stake child + +**Usage**: + +```bash +btcli stake child [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + +#### btcli stake child get + +Get all the child hotkeys on a specified subnet. + +Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. + +#### EXAMPLE + +```bash +btcli stake child get --all-netuids +``` + +**Usage**: + +```bash +btcli stake child get [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) +* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake child revoke + +Remove all children hotkeys on a specified subnet. + +This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. + +#### EXAMPLE + +```bash +btcli stake child revoke --hotkey --netuid 1 +``` + +**Usage**: + +```bash +btcli stake child revoke [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) +* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake child set + +Set child hotkeys on specified subnets. + +Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. + +This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. + +#### EXAMPLE + +```bash +btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 +``` + +**Usage**: + +```bash +btcli stake child set [OPTIONS] +``` + +**Options**: + +* `-c, --children TEXT`: Enter child hotkeys (ss58) +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] +* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake child take + +Get and set your child hotkey take on a specified subnet. + +The child hotkey take must be between 0 - 18%. + +#### EXAMPLE + +To get the current take value, do not use the '--take' option: + +```bash + btcli stake child take --hotkey --netuid 1 +``` + +To set a new take value, use the '--take' option: + +```bash + btcli stake child take --hotkey --take 0.12 --netuid 1 +``` + +**Usage**: + +```bash +btcli stake child take [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--hotkey TEXT` +* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) +* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. +* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli stake children + +**Usage**: + +```bash +btcli stake children [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + +#### btcli stake children get + +Get all the child hotkeys on a specified subnet. + +Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. + +#### EXAMPLE + +```bash +btcli stake child get --all-netuids +``` + +**Usage**: + +```bash +btcli stake children get [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) +* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake children revoke + +Remove all children hotkeys on a specified subnet. + +This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. + +#### EXAMPLE + +```bash +btcli stake child revoke --hotkey --netuid 1 +``` + +**Usage**: + +```bash +btcli stake children revoke [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) +* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake children set + +Set child hotkeys on specified subnets. + +Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. + +This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. + +#### EXAMPLE + +```bash +btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 +``` + +**Usage**: + +```bash +btcli stake children set [OPTIONS] +``` + +**Options**: + +* `-c, --children TEXT`: Enter child hotkeys (ss58) +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] +* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +#### btcli stake children take + +Get and set your child hotkey take on a specified subnet. + +The child hotkey take must be between 0 - 18%. + +#### EXAMPLE + +To get the current take value, do not use the '--take' option: + +```bash + btcli stake child take --hotkey --netuid 1 +``` + +To set a new take value, use the '--take' option: + +```bash + btcli stake child take --hotkey --take 0.12 --netuid 1 +``` + +**Usage**: + +```bash +btcli stake children take [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--hotkey TEXT` +* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) +* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. +* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. +* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] +* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli stake list + +List all stake accounts for wallet. + +**Usage**: + +```bash +btcli stake list [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli stake move + +Move Staked TAO to a hotkey from one subnet to another. + +THe move commands converts the origin subnet's dTao to Tao, and then converts Tao to destination subnet's dTao. + +#### EXAMPLE + +```bash +btcli stake move +``` + +**Usage**: + +```bash +btcli stake move [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--origin-netuid INTEGER`: Origin netuid [required] +* `--destination-netuid INTEGER`: Destination netuid [required] +* `--destination-hotkey TEXT`: Destination hotkey +* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] +* `--stake-all, --all`: Stake all +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--help`: Show this message and exit. + +### btcli stake remove + +Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey. + +This command is used to withdraw TAO previously staked to different hotkeys. + +#### EXAMPLE + +```bash +btcli stake remove --amount 100 -in hk1,hk2 +``` + +:::tip +This command is for users who wish to reallocate their stake or withdraw them from the network. It allows for flexible management of TAO stake across different neurons (hotkeys) on the network. +::: + + +**Usage**: + +```bash +btcli stake remove [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] +* `--unstake-all, --all`: When set, this command unstakes all staked TAO from the specified hotkeys. +* `-a, --amount FLOAT`: The amount of TAO to unstake. [default: 0.0] +* `--hotkey-ss58-address TEXT`: The ss58 address of the hotkey to unstake from. +* `--keep-stake, --keep FLOAT`: Sets the maximum amount of TAO to remain staked in each hotkey. [default: 0.0] +* `-in, --include-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address to unstake from. For example, `-in hk1,hk2` +* `-ex, --exclude-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address not to unstake from (only use with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` +* `--all-hotkeys / --`no-all-hotkeys``: When set, this command unstakes from all the hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: `no-all-hotkeys`] +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +## btcli subnet + +**Usage**: + +```bash +btcli subnet [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + + +### btcli subnet create + +Registers a new subnet. + +#### EXAMPLE + +```bash +btcli subnets create +``` + +**Usage**: + +```bash +btcli subnet create [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli subnet hyperparameters + +Shows a list of the hyperparameters for the specified subnet. + +The output of this command is the same as that of `btcli subnets hyperparameters`. + +#### EXAMPLE + +```bash +btcli sudo get --netuid 1 +``` + +**Usage**: + +```bash +btcli subnet hyperparameters [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli subnet list + +List all subnets and their detailed information. + +This command displays a table with the below columns: + +- NETUID: The subnet's netuid. +- N: The number of neurons (subnet validators and subnet miners) in the subnet. +- MAX_N: The maximum allowed number of neurons in the subnet. +- EMISSION: The percentage of emissions to the subnet as of the last tempo. +- TEMPO: The subnet's tempo, expressed in number of blocks. +- RECYCLE: The recycle register cost for this subnet. +- POW: The proof of work (PoW) difficulty. +- SUDO: The subnet owner's name or the owner's ss58 address. + +#### EXAMPLE + +```bash +btcli subnets list +``` + +**Usage**: + +```bash +btcli subnet list [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli subnet lock-cost + +Shows the required amount of TAO to be locked for creating a new subnet, i.e., cost of registering a new subnet. + +The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. + +#### EXAMPLE + +```bash +btcli subnets lock_cost +``` + +**Usage**: + +```bash +btcli subnet lock-cost [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli subnet metagraph + +Disabled for dynamic TAO. + + + +### btcli subnet pow-register + +Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). + +This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. + +The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. + +The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. + +#### EXAMPLE + +```bash +btcli pow_register --netuid 1 --num_processes 4 --cuda +``` + +:::tip +This command is suitable for users with adequate computational resources to participate in POW registration. It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. +::: + + +This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. + +**Usage**: + +```bash +btcli subnet pow-register [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--processors INTEGER`: Number of processors to use for POW registration. +* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] +* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] +* `-v, --verbose`: Whether to output the registration statistics verbosely. +* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] +* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] +* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] +* `--help`: Show this message and exit. + +### btcli subnet register + +Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. + +Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. + +The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. + +#### EXAMPLE + +```bash +btcli subnets register --netuid 1 +``` + +**Usage**: + +```bash +btcli subnet register [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli subnet show + +Displays detailed information about a subnet including participants and their state. + +#### EXAMPLE + +```bash +btcli subnets list +``` + +**Usage**: + +```bash +btcli subnet show [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--help`: Show this message and exit. + +## btcli sudo + +**Usage**: + +```bash +btcli sudo [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + + +### btcli sudo get + +Shows a list of the hyperparameters for the specified subnet. + +The output of this command is the same as that of `btcli subnets hyperparameters`. + +#### EXAMPLE + +```bash +btcli sudo get --netuid 1 +``` + +**Usage**: + +```bash +btcli sudo get [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli sudo get-take + +Allows users to check their delegate take percentage. + +This command can be used to fetch the delegate take of your hotkey. + +#### EXAMPLE +```bash +btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey +``` + +**Usage**: + +```bash +btcli sudo get-take [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli sudo proposals + +View active proposals for the senate in the Bittensor's governance protocol. + +This command displays the details of ongoing proposals, including proposal hashes, votes, thresholds, and proposal data. + +#### EXAMPLE +```bash +btcli sudo proposals +``` + +**Usage**: + +```bash +btcli sudo proposals [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli sudo senate + +Shows the Senate members of the Bittensor's governance protocol. + +This command lists the delegates involved in the decision-making process of the Bittensor network, showing their names and wallet addresses. This information is crucial for understanding who holds governance roles within the network. + +#### EXAMPLE +```bash +btcli sudo senate +``` + +**Usage**: + +```bash +btcli sudo senate [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli sudo senate-vote + +Cast a vote on an active proposal in Bittensor's governance protocol. + +This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. + +USAGE +The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. + +#### EXAMPLE +```bash +btcli sudo senate_vote --proposal +``` + +**Usage**: + +```bash +btcli sudo senate-vote [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--vote-aye / --vote-nay`: The vote casted on the proposal +* `--help`: Show this message and exit. + +### btcli sudo set + +Used to set hyperparameters for a specific subnet. + +This command allows subnet owners to modify hyperparameters such as its tempo, emission rates, and other hyperparameters. + +#### EXAMPLE + +```bash +btcli sudo set --netuid 1 --param tempo --value 400 +``` + +**Usage**: + +```bash +btcli sudo set [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `--param, --parameter TEXT`: The subnet hyperparameter to set +* `--value TEXT`: Value to set the hyperparameter to. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli sudo set-take + +Allows users to change their delegate take percentage. + +This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. +The command makes sure the new take value is within 0-18% range. + +#### EXAMPLE +```bash +btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey +``` + +**Usage**: + +```bash +btcli sudo set-take [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--take FLOAT`: The new take value. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +## btcli utils + +**Usage**: + +```bash +btcli utils [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + +### btcli utils convert + +Allows for converting between tao and rao using the specified flags + +**Usage**: + +```bash +btcli utils convert [OPTIONS] +``` + +**Options**: + +* `--rao TEXT`: Convert amount from Rao +* `--tao FLOAT`: Convert amount from Tao +* `--help`: Show this message and exit. + +## btcli wallet + +**Usage**: + +```bash +btcli wallet [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + + +### btcli wallet balance + +Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. + +You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). + +EXAMPLES: + +- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: + +```bash + btcli w balance --wallet-name WALLET +``` + +- To use the default config values, use: + +```bash + btcli w balance +``` + +- To display the balances of all your wallets, use the `--all` argument: + +```bash + btcli w balance --all +``` + +- To display the balances of ss58 addresses, use the `--ss58` argument: + +```bash + btcli w balance --ss58 --ss58 +``` + +**Usage**: + +```bash +btcli wallet balance [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. +* `-a, --all`: Whether to display the balances for all the wallets. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet create + +Create a complete wallet by setting up both coldkey and hotkeys. + +USAGE + +The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. + +#### EXAMPLE + +```bash +btcli wallet create --n_words 21 +``` + +:::tip +This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. +::: + + +**Usage**: + +```bash +btcli wallet create [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--n-words INTEGER` +* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet faucet + +Obtain test TAO tokens by performing Proof of Work (PoW). + +This command is useful for users who need test tokens for operations on a local blockchain. + +**IMPORTANT**: THIS COMMAND IS DISABLED ON FINNEY AND TESTNET. + +USAGE + +The command uses the proof-of-work (POW) mechanism to validate the user's effort and rewards them with test TAO tokens. It is +typically used in local blockchain environments where transactions do not use real TAO tokens. + +#### EXAMPLE + +```bash +btcli wallet faucet --faucet.num_processes 4 --faucet.cuda.use_cuda +``` + +:::tip +This command is meant for used in local environments where users can experiment with the blockchain without using real TAO tokens. Users must have the necessary hardware setup, especially when opting for CUDA-based GPU calculations. It is currently disabled on testnet and mainnet (finney). You can only use this command on a local blockchain. +::: + + +**Usage**: + +```bash +btcli wallet faucet [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--processors INTEGER`: Number of processors to use for proof of work (POW) registration. +* `-u, --update-interval INTEGER`: The number of nonces to process before checking for next block during registration [default: 50000] +* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] +* `-v, --verbose`: Whether to output the registration statistics verbosely. +* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set flag to use CUDA for proof of work (POW) registration. [default: no-use-cuda] +* `-d, --dev-id INTEGER`: Set the CUDA device id(s) in the order of speed, where 0 is the fastest. [default: 0] +* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] +* `--max-successes INTEGER`: Set the maximum number of times to successfully run the faucet for this command. [default: 3] +* `--help`: Show this message and exit. + +### btcli wallet get-identity + +Shows the identity details of a user's coldkey or hotkey. + +The command displays the information in a table format showing: + +- **Address**: The ``ss58`` address of the queried key. + +- **Item**: Various attributes of the identity such as stake, rank, and trust. + +- **Value**: The corresponding values of the attributes. + +#### EXAMPLE + +```bash +btcli wallet get_identity --key +``` + +:::tip +This command is primarily used for informational purposes and has no side effects on the blockchain network state. +::: + + +**Usage**: + +```bash +btcli wallet get-identity [OPTIONS] +``` + +**Options**: + +* `-k, --key, --ss58 TEXT`: The coldkey or hotkey ss58 address to query. +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet history + +Show the history of the transfers carried out with the provided wallet on the Bittensor network. + +USAGE + +The output shows the latest transfers of the provided wallet, showing the columns 'From', 'To', 'Amount', 'Extrinsic ID' and 'Block Number'. + +#### EXAMPLE + +```bash +btcli wallet history +``` + +**Usage**: + +```bash +btcli wallet history [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet inspect + +Disabled for dynamic TAO. + + + +### btcli wallet list + +Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. + +The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. + +Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the +public keys are available (`?` denotes unavailable or encrypted keys). + +#### EXAMPLE + +```bash +btcli wallet list --path ~/.bittensor +``` + +**NOTE**: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. + +**Usage**: + +```bash +btcli wallet list [OPTIONS] +``` + +**Options**: + +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet new-coldkey + +Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. + +USAGE + +The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. + +#### EXAMPLE + +```bash +btcli wallet new_coldkey --n_words 15 +``` + +:::tip +This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. +::: + + +**Usage**: + +```bash +btcli wallet new-coldkey [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] +* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet new-hotkey + +Create a new hotkey for a wallet. + +USAGE + +This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the +existing hotkey. + +#### EXAMPLE + +```bash +btcli wallet new-hotkey --n_words 24 +``` + +:::tip +This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. +::: + + +**Usage**: + +```bash +btcli wallet new-hotkey [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] +* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet overview + +Disabled for dynamic TAO. + + + +### btcli wallet regen-coldkey + +Regenerate a coldkey for a wallet on the Bittensor blockchain network. + +This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. + +USAGE + +Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. + +#### EXAMPLE + +```bash +btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" +``` + + +:::tip +This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. +::: + + +**Usage**: + +```bash +btcli wallet regen-coldkey [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... +* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... +* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. +* `--json-password TEXT`: Password to decrypt the JSON file. +* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet regen-coldkeypub + +Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. + +Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. + +USAGE + +The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. + +#### EXAMPLE + +```bash +btcli wallet regen_coldkeypub --ss58_address 5DkQ4... +``` + +:::tip +This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. +::: + + +**Usage**: + +```bash +btcli wallet regen-coldkeypub [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--public-key-hex TEXT`: The public key in hex format. +* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet regen-hotkey + +Regenerates a hotkey for a wallet. + +Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. + +USAGE + +Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. + +#### Example usage + +```bash +btcli wallet regen_hotkey --seed 0x1234... +``` + +:::tip +This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. It should be used with caution to avoid accidental overwriting of existing keys. +::: + + +**Usage**: + +```bash +btcli wallet regen-hotkey [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... +* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... +* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. +* `--json-password TEXT`: Password to decrypt the JSON file. +* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet set-identity + +Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. **Incurs a 1 TAO transaction fee.** + +The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. + +The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. + +Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. + +If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. + +#### EXAMPLE + +```bash +btcli wallet set_identity +``` + +:::tip +This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. +::: + + +**Usage**: + +```bash +btcli wallet set-identity [OPTIONS] +``` + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--display-name, --display TEXT`: The display name for the identity. +* `--legal-name, --legal TEXT`: The legal name for the identity. +* `--web-url, --web TEXT`: The web URL for the identity. +* `--riot-handle, --riot TEXT`: The Riot handle for the identity. +* `--email TEXT`: The email address for the identity. +* `--pgp-fingerprint, --pgp TEXT`: The PGP fingerprint for the identity. +* `--image-url, --image TEXT`: The image URL for the identity. +* `-i, --info TEXT`: The info for the identity. +* `-x, -𝕏, --twitter-url, --twitter TEXT`: The 𝕏 (Twitter) URL for the identity. +* `--validator / --not-validator`: Are you updating a validator hotkey identity? +* `--netuid INTEGER`: Netuid if you are updating identity of a subnet owner +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--help`: Show this message and exit. + +### btcli wallet sign + +Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. + +USAGE + +Using the provided wallet (coldkey), the command generates a signature for a given message. + +EXAMPLES + +```bash +btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' +``` + +```bash +btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' +``` + +**Usage**: + +```bash +btcli wallet sign [OPTIONS] +``` + +**Options**: + +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--use-hotkey / --no-use-hotkey`: If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. +* `--message TEXT`: The message to encode and sign +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli wallet swap-hotkey + +Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. + +USAGE + +The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. + +IMPORTANT + +- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. +- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. +- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). + +#### EXAMPLE + +```bash +btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey +``` + +**Usage**: + +```bash +btcli wallet swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] +``` + +**Arguments**: + +* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. + +**Options**: + +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] +* `--help`: Show this message and exit. + +### btcli wallet transfer + +Disabled for dynamic TAO. + + + +## btcli weights + +**Usage**: + +```bash +btcli weights [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +* `--help`: Show this message and exit. + + +### btcli weights commit + +Commit weights for specific subnet. + +Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. + +#### EXAMPLE + +```bash +btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 +``` + +:::tip +This command is used to commit weights for a specific subnet and requires the user to have the necessary permissions. +::: + + +**Usage**: + +```bash +btcli weights commit [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `-u, --uids TEXT`: UIDs of interest for the specified netuid, e.g. -u 1,2,3 ... +* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. +* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163 -s 241 -s 217 ... +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. + +### btcli weights reveal + +Reveal weights for a specific subnet. + +You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. + +#### EXAMPLE + +```bash +btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 +``` + +**Usage**: + +```bash +btcli weights reveal [OPTIONS] +``` + +**Options**: + +* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. +* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. +* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. +* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet +* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). +* `-u, --uids TEXT`: Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 ... +* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. +* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163,241,217 ... +* `--quiet`: Display only critical information on the console. +* `--verbose`: Enable verbose output. +* `--help`: Show this message and exit. diff --git a/docs/dynamic-tao/dtao-guide.md b/docs/dynamic-tao/dtao-guide.md new file mode 100644 index 00000000..d9da58a6 --- /dev/null +++ b/docs/dynamic-tao/dtao-guide.md @@ -0,0 +1,553 @@ +--- +title: "Guide to Dynamic TAO" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# 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. + +:::tip looking for quick intuitions? +Skip to [Intuitions of dynamic TAO](#intuitions-of-dynamic-tao). +::: + +## 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. + +
+ +
+ +
+ +## 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 relative price of the dTAO token. This is calculated as a ratio of the subnet's pool reserves, i.e., TAO reserve(τ_in) / alpha reserves (α_in). This is commonly referred as the **exchange rate** between the subnet dTAO token and the TAO token. + +### 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 relative price of the dTAO $ε$ token is: + +$$ +R = \frac{\tau_{in}}{\alpha_{in}} = \frac{1000}{16000} = 0.0625 +$$ + +Hence, +$$ +\text{1 dTAO ε} = 0.0625 \text{ TAO} +$$ + +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. + +
+ +
+ +
+ +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 (α)**. + +:::tip Stake is always expressed in alpha units +In dynamic TAO, except for the stake held in [subnet zero](#subnet-zero), the stake held by a hotkey in a subnet is always expressed in the subnet-specific dTAO α units and not TAO units. +::: + +### Constant product k + +The subnet pool algorithm is set up to always maintain a **constant product** $k$ of the two reserves. That is, + +$$ +k = \text{(TAO reserves)}\times\text{(dTAO α reserves)} +$$ + +Anytime either of the reserves **increases**, for example as a result of a random external action such as some stake TAO entering the pool, the subnet pool algorithm automatically recalculates, using the new reserves, how much the other reserve should **decrease** in order to maintain the same constant product $$k$$. + +As described in the [Staking](#staking) section, a staking event results in the staked TAO being added to the τ_in reserves of the subnet pool. The subnet pool algorithm calculates the number of units by which the α_in reserves should decrease. These units are then taken out of the α_in reserves and sent to the validator’s hotkey in the subnet. See an example below. + +### Example + +:::caution slippage not considered in this example +In order to convey the key idea of staking in a simple way, slippage is not considered in this example. +::: + +The below example shows how staking 5 TAO works. + +Let us assume the following initial state of TAO and dTAO α reserves in a subnet: +- TAO reserves: 10 TAO tokens +- dTAO α reserves: 100 dTAO α tokens + +Hence, the constant product 𝑘 = 10 × 100 =1000. + +- **Initial relative price** of dTAO α is = reserve ratio of subnet pool α = (TAO token reserves of pool α)/(dTAOα token reserves) = 10/100 = 0.1 TAO. +- Stake 5 TAO: This adds 5 TAO into the TAO reserves of the pool. Hence, the new TAO reserve = 10 + 5 = 15 TAO tokens. +- Using the new TAO reserve of 15, the subnet pool algorithm calculates what should be the new dTAO α reserves, in order to maintain k at 1000. +- Calculating: +$$ +\begin{split} +& 15 \times\text{new dTAO α reserves} = 1000\\ +\implies & \text{new dTAO α reserves} = 1000/15 = 66.667 \text{ dTAO α}. +\end{split} +$$ + +- Hence, the dTAO α that should be **taken out of** the $α_{in}$ reserve and sent to the validator’s hotkey is: +$$ +100 − 66.67 = 33.33 \text{ dTAO α} +$$ + +**New state of the reserves in the subnet pool after 5 TAO is staked** + - TAO reserves: 15 tokens + - dTAO α reserves: 66.67 dTAO α tokens + - Constant product 𝑘 = 15 × 66.67 = 1000 (unchanged) +- **New relative price** of dTAO α after the staking event = reserve ratio of subnet pool α = (TAO token reserves of pool α)/(dTAO α token reserves) = 15/66.67 = 0.225 TAO. + +### Effect of staking + +Note that as a result of staking 5 TAO into subnet α, the relative price of dTAO α **increased** from 0.1 TAO to 0.225 TAO. All else being equal, staking into a subnet leads to an increase in its dTAO token relative price. This can be understood in two ways: +- By staking your TAO into this subnet, you are expressing an increase in demand for this dTAO α, thereby increasing the price of the dTAO α. +- When your TAO stake is added to the pool, the TAO reserves in the pool have increased, with a net effect that the dTAO reserves have become scarcer relative to the new TAO reserves. The dTAO price is calculated as (TAO reserves / dTAO reserves), hence the denominator decreased, leading to increase in dTAO price. + + +--- + +## STAKE (α_out) or alpha out (α_out) + +Total stake in the subnet is referred as $α_{out}$. This is the sum of all the [Stake (α)](#staking) present in all the validator hotkeys in this subnet. This is often referred as **α outstanding**. Compare this with [**α reserve**](#tao-reserve-τ_in-and-alpha-reserve-α_in), which is the amount of $α_{in}$ in the subnet pool. The **α outstanding** can change every block. See a conceptual diagram below: + + +
+ +
+ +
+ +## Hotkey's stake share (α / α_out) + +A hotkey's share of the total outstanding alpha tokens in the subnet is calculated as: + +$$ +\text{A hotkey's stake share} = \frac{\text{hotkey's stake}(\alpha)}{\text{Total stake}(\alpha_{out})\text{ in the subnet}} +$$ + +:::tip 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. + +
+ +
+ +
+ +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. + +### Example + +:::caution slippage not considered in this example +In order to convey the key idea of unstaking in a simple way, slippage is not considered in this example. +::: + +The below example shows how unstaking 20 dTAO α works. Let’s continue with the state of the TAO and dTAO α reserves after the [above staking operation](#example-1): + +- TAO reserves: 15 tokens +- dTAO α reserves: 66.67 dTAO α tokens +- Constant product 𝑘 = 15 × 66.67 = 1000 +- Relative price dTAO α is = reserve ratio of subnet pool α = (TAO token reserves of pool α)/(dTAOα token reserves) = 15/66.67 = 0.225 TAO (same as the relative price after the above staking operation) +- Unstake 20 dTAO α: This adds 20 dTAO α to the dTAO side of the pool. New dTAO α reserves = 66.67 + 20 = 86.67 dTAO α tokens. +- Using the new dTAO α reserve of 86.67, the subnet pool algorithm calculates what should be the new TAO reserve in order to maintain $k$ at 1000. +- Calculating: + +$$ +\begin{split} +& 86.67 \times\text{new TAO reserves} = 1000\\ +\implies & \text{new TAO reserves} = 1000/86.67 = 11.54 \text{ TAO}. +\end{split} +$$ + +- Hence, the TAO that should be taken out of the TAO reserves of the pool and sent to the TAO holder’s coldkey is: 15 − 11.54 = 3.46 TAO. + +**New state of the reserves in the subnet pool after 20 dTAO α is unstaked** +- TAO reserves: 11.54 TAO tokens +- dTAO α reserves: 86.67 dTAO α tokens +- Constant product 𝑘 = 11.54 × 66.67 = 1000 (unchanged) +- New relative price of dTAO α after the unstaking event = reserve ratio of subnet pool α = (TAO token reserves of pool α)/(dTAOα token reserves) = 11.54/86.67 = 0.133 TAO. + +### Effect of unstaking + +Note that as a result of unstaking 20 dTAO α from subnet α, the dTAO α price **decreased** from 0.225 TAO to 0.113 TAO. All else being equal, unstaking from a subnet leads to a decrease in its dTAO token's relative price. This can be understood in two ways: +- By unstaking your TAO from this subnet, you are expressing a decrease in demand for this dTAO, thereby decreasing the price of the dTAO. +- When your stake TAO is removed from the subnet pool, the TAO reserves in the pool have decreased, with a net effect that the dTAO reserves have become more abundant relative to the new TAO reserves. The dTAO price is calculated as (TAO reserves / dTAO reserves), hence the denominator increased, leading to decrease in the dTAO price. + +--- + +## Local weight or TAO Equiv (τ_in x α/α_out) + +A hotkey's stake, i.e., [stake(α)](#staking), represents subnet-specific stake. As a result, a [hotkey's stake share (α / α_out)](#hotkeys-stake-share-α--α_out) can only represent the validator's staking power **within the subnet**. Moreover, a dTAO token of a subnet is not fungible with a dTAO token of another subnet. For this very reason, when a hotkey is validating in multiple subnets, 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](#staking) section, any TAO staked into a subnet is added to the TAO reserves of the subnet pool, i.e., added to τ_in. Similarly any TAO unstaked from a subnet is removed from the TAO reserves of the subnet pool. As a consequence, τ_in reserve represents the total voting power of the subnet as a whole. Hence, + +$$ +\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: + +$$ +\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. + +:::caution Local voting power is also referred as local weight +This local voting power or local weight represents the hotkey's influence in the subnet. +::: + +### Example + +For example, for a validator's hotkey in a given subnet: + +- Total outstanding alpha (α_out) = 30,000 alpha tokens. +- The hotkey's alpha stake (α) = 6,000 alpha tokens. +- TAO reserve in the subnet's pool (τ_in) = 5,000 TAO. + +- Then, this validator's hotkey stake share = (6,000/30,000) = 0.2 or 20%. +- Hence, this validator hotkey's local voting power, i.e., **local weight** = τ_in x hotkey's stake share = 5000 x 0.2 = 1000 TAO. + +:::tip Stake share → TAO-denominated voting power +Hence, while the hotkey's stake share in this subnet is 20%, its actual local weight (local voting power) in the subnet is 1,000 TAO units. This is the power of dynamic TAO mechanism. It converts a hotkey's alpha stake share into an equivalent TAO-denominated voting power in the subnet. This makes alpha stakes comparable across different subnets, even though these subnets might have very different amounts of alpha tokens outstanding. +::: + +--- + +## Local weights vs τ_in + +In any subnet, if you add up the local weights of all alpha holders, you will always get exactly the TAO reserve (τ_in) of that subnet. + +This means: + +- The total voting power in a subnet is fixed by its TAO reserve (τ_in). +- For a given τ_in, if a validator's hotkey in a subnet increases their local weight, it must come at the expense of others. That is, you cannot create "extra" voting power, it's a zero-sum game within each subnet. + +--- + +## Subnet zero + +In dynamic TAO, subnet zero is a special subnet. It is designed to provide the following benefits: + +- The subnet zero is the only subnet that does not have any subnet pool associated with it. TAO holders can only stake into subnet zero in TAO token denominations. Hence, TAO holders and validators who prefer not to think about either subnet-specific staking or about dTAO tokens can stake in subnet zero. Their stake will remain in TAO denomination in the validator hotkeys as there is no notion of alpha in subnet zero. +- The subnet zero is also the only subnet that does not have any validating or mining defined on it. Incentive mechanisms cannot be run in subnet zero. Nevertheless, a validator's hotkey registered in subnet zero will accept stake TAO. +- Because there is no subnet pool attached to the subnet zero, a validator hotkey's local weight in subnet zero is simply the raw TAO units that exist as stake in this hotkey. + +:::caution Staking in subnet zero +As a rule, you can only stake in TAO denomination in subnet zero, and only in alpha (dTAO) denomination in all other subnets. Hence, stake in subnet zero is always expressed in TAO units. +::: + +--- + +## Global weight + +Global weight of a validator hotkey is the sum of the [local weights](#local-weight-or-tao-equiv-τ_in-x-αα_out) for all the subnets, including subnet zero, where this hotkey is validating. + +### Example + +Let's say that a validator's hotkey has the following positions in four different subnets, including in subnet zero. + +- Subnet zero: + - validator's stake: 1000 TAO + - validator's stake share: 10% (i.e., out of all TAO stake in subnet zero, this validator holds 10% of it) +- Gaming subnet: + - validator's [stake share](#hotkeys-stake-share-α--α_out) = (α / α_out) = 30% + - τ_in in this subnet pool = 10,000 TAO + +- AI subnet: + - validator's [stake share](#hotkeys-stake-share-α--α_out) = (α / α_out) = 40% + - τ_in in this subnet pool = 15,000 TAO + +- Storage subnet: + - validator's [stake share](#hotkeys-stake-share-α--α_out) = (α / α_out) = 20% + - τ_in in this subnet pool = 5,000 TAO + +Hence, the [local weights, or local voting power](#local-weight-or-tao-equiv-τ_in-x-αα_out) of this hotkey in each subnet are as below: + +- For subnet zero: 1000 TAO (TAO number used as is, without any multiplier, see [subnet zero](#subnet-zero)) +- Gaming subnet: $$\tau_{in}\times\text{hotkey's stake share}$$ = 0.30 × 10,000 = 3,000 TAO +- Similarly, for AI subnet: 0.40 × 15,000 = 6,000 TAO +- For Storage subnet: 0.20 × 5,000 = 1,000 TAO + +Hence the global weight of this hotkey is: 1000 + 3000 + 6000 + 1000 = 11,000 TAO. + +### Root weight + +Notice that in the above calculation, we used the hotkey's subnet zero stake of 1000 TAO as it is while calculating the global weight of the hotkey. However, in dynamic TAO it is normal to multiply the subnet zero stake TAO number by a factor called `root_weight` that varies from 0 to 1. + +Hence, for `root_weight` of 0.5, the subnet zero stake of the hotkey will now be `root_weight` x 1000 = 0.5 x 1000 = 500 TAO. Hence, under this condition, the updated global weight of this hotkey is: 500 + 3000 + 6000 + 1000 = 10,500 TAO. + +### Global weight vs. local weight + +The two quantities defined above for a validator hotkey, i.e., the hotkey's global weight (across all subnets where it is validating) and its local weight (per subnet), are critically important. +:::caution global weight appears in every subnet +In addition to the local weight of a hotkey in a subnet, this hotkey's global weight also appears in this subnet. This is why global weight of a validator's hotkey is critical. +::: + +Note that in the above, **both local weight and global weight of a hotkey are expressed in TAO units.** However, to represent a validator hotkey's overall stake weight in a subnet, instead of using the two individual TAO units (one for global weight and second for local weight), a new quantity called [**validator's stake weight in a subnet**](#validator-stake-weight), is defined as follows: +- The local weight of a hotkey is normalized with respect to the sum of all the local weights of all other hotkeys in this subnet, so that they all sum to 1.0. This normalized local weight represents the hotkey's relative proportion of its **influence in the subnet**. +- Similarly the global weight of the hotkey is normalized with respect to the sum of all the global weights of all other hotkeys for the subnets in question, to sum to 1.0. This normalized global weight represents the hotkey's relative proportion of its **influence in the subnets in question**. + +--- + +## Validator stake weight + +A validator hotkey's stake weight is defined for a subnet. It varies from 0 to 1. It is defined as the sum of the hotkey's normalized global and local weights, as follows: + +For any subnet $i$, the validator hotkey's stake weight is: + +$$ +\begin{split} +& = \text{(global\_split}\times\text{normalized global weight)} + \text{(1-global\_split}\times\text{normalized local weight)}\\\\ +& = \text{global\_split}\times\frac{\text{hotkey's global weight}}{\text{sum of all global weights of all hotkeys in the subnets in question}}\\ \\ +& + \text{ (1-global\_split)}\times\frac{\text{hotkey's local weight}}{\text{sum of all local weights in the subnet}} +\end{split} +$$ + +### Global split + +A parameter called `global_split`, which varies between 0 and 1, controls the balance between the normalized global and local weights. In effect, the `global_split` parameter controls the balance between the validator hotkeys local and global influence. + +:::tip Why global stake matters +Also see [Why global stake matters](#why-global-stake-matters). +::: + +### Example + +We will use the example from [Global weight](#global-weight) section and extend it to show the validator stake weight. + +#### Assumptions + +- Assume `root_weight` is 0.5. + +- Subnet zero: + - Total TAO outstanding = 10,000 TAO (this is the total TAO stake held by all the hotkeys in subnet zero) + - Hence, sum of all global weights in subnet zero = 10,000 TAO + - Validator's stake share = 10% × 10,000 = 1,000 TAO (also calculated in the above example) + +- Gaming Subnet: + - Assume total α_out = 50,000 α + - Validator's stake share = 30% × 50,000 = 15,000 α + - TAO reserve = 10,000 τ + - TAO reserve is also the sum of all global weights in this gaming subnet = 10,000 TAO + - Local weight = (15,000/50,000) × 10,000 = 3,000 τ (also calculated in the above example) + +- AI Subnet: + - Assume total α_out = 80,000 α + - Validator's stake share = 40% × 80,000 = 32,000 α + - TAO reserve = 15,000 τ + - TAO reserve is also the sum of all global weights in this AI subnet = 15,000 TAO + - Local weight = (32,000/80,000) × 15,000 = 6,000 τ (also calculated in the above example) + +- Storage Subnet: + - Assume total α_out = 30,000 α + - Validator's stake share = 20% × 30,000 = 6,000 α + - TAO reserve = 5,000 τ + - TAO reserve is also the sum of all global weights in this storage subnet = 5,000 TAO + - Local weight = (6,000/30,000) × 5,000 = 1,000 τ (also calculated in the above example) + +Hence, sum of all global weights in the all the above subnets is = (`root_weight` x subnet zero's total global weight) + sum of all global weights in gaming subnet + sum of all global weights in AI subnet + sum of all global weights in storage subnet + += (0.5 x 10,000) + 10,000 + 15,000 + 5,000 += 35,000 TAO. This is the global weights in all the subnets where this validator's hotkey is validating. + +#### Validator stake weight for each subnet + +- Hotkey's global weight = 10,500 TAO (from the above [Root weight](#root-weight) section). +- Total global subnet weights = 35,000 TAO (from above). +- Assume `global_split` is 0.3. + + +1. Gaming Subnet: + + - Local weight of the hotkey: 3000 TAO (from the above example) + - Sum of all local weights in this subnet = TAO reserve = 10,000 TAO + - Hence, the validator's stake weight in this gaming subnet = 0.3 × (10,500/35,000) + 0.7 × (3,000/10,000) + = 0.3 × 0.30 + 0.7 × 0.30 + = 0.09 + 0.21 + = 0.30 (30% influence in the gaming subnet) + +2. AI Subnet: + - Local weight of the hotkey: 6000 TAO (from the above example) + - Sum of all local weights in this subnet = TAO reserve = 15,000 TAO + - Hence, the validator's stake weight in this AI subnet = 0.3 × (10,500/35,000) + 0.7 × (6,000/15,000) + = 0.3 × 0.30 + 0.7 × 0.40 + = 0.09 + 0.28 + = 0.37 (37% influence in the AI subnet) + +3. Storage Subnet: + - Local weight of the hotkey: 1000 TAO (from the above example) + - Sum of all local weights in this subnet = TAO reserve = 5,000 TAO + - Hence, the validator's stake weight in this storage subnet = 0.3 × (10,500/35,000) + 0.7 × (1,000/5,000) + = 0.3 × 0.30 + 0.7 × 0.20 + = 0.09 + 0.14 + = 0.23 (23% influence in the storage subnet) + +4. Subnet zero: (special case - only local weight matters) + - Validator's stake weight = 1,000/10,000 = 0.10 (10% influence in the subnet zero) + +--- + +## Exchange Value (α x τ/α) + +This is the potential instantaneous TAO you will receive, without considering slippage, if you [unstake](#unstaking) at this instant from this hotkey on this subnet. See [Swap(α → τ)](#swap-α--τ) description. This can change every block. + +:::tip Compare with TAO Equiv +Whereas the [TAO Equiv(τ_in x α/α_out)](#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. + +--- + +## Intuitions of dynamic TAO + +This section presents a summary of intuitions about dynamic TAO. It is intended to help in conceptually grasping the dynamic TAO mechanism. + + +### TAO and dTAO + +- The entire TAO token emitted from the coinbase in the lifetime of Bittensor network exists: + - In coldkeys: In a TAO holder’s own coldkeys, for example, as subnet zero emissions into a subnet owner’s coldkey, and in exchange-owned coldkeys. + - In subnet zero hotkeys: In the validator hotkeys of subnet zero as staked TAO and dividends. + - In TAO reserves of subnet pools. + - TAO exists nowhere else. + - Furthermore, for the Bittensor network operations, only staked TAO matters, i.e., only the staked TAO in the validator hotkeys and in TAO reserves act as fuel in the Bittensor network operations. This means that for any discussions on consensus power, only the sum total of the entire staked TAO is considered—the TAO that is in the coldkeys or in exchanges does not contribute directly to Bittensor network operations. +- Similarly, the entire dTAO token emitted from the coinbase in the lifetime of Bittensor network exists: + - **A dTAO token does not exist in a coldkey**. It only exists in the hotkeys of subnet validators, subnet miners and subnet owners. + - In the subnet pool reserves. + - A dTAO token of one subnet is not fungible with a dTAO token of another subnet. + +### Staking and unstaking + +- Staking and unstaking operations do not change the constant product $k$. On the contrary, emissions into a subnet pool do change the constant product $k$. +- Staking and unstaking operations are always local to a subnet and its subnet pool. +- Stake is always held in dTAO token denominations. Furthermore, this dTAO stake exists only in the subnet validator hotkeys. + +### Pool reserves + +- No one directly owns the subnet pool reserves. These reserves exist to provide liquidity to the subnet pools. +- However, as we saw in [Local weights vs τ_in](#local-weights-vs-τ_in) , a validator who holds X% of the dTAO stake in a subnet is said to own the same X% of the TAO reserve pool of that subnet. +- In dynamic TAO the sum of α_in (also called alpha reserve) and α_out (all the alpha stake in the subnet) is treated as the the sum total of all alpha. **This is not not strictly true.** This sum total only represents the alpha associated with staking and unstaking. There is the another source of alpha, which is the emissions alpha. This emissions alpha is awarded to validators, subnet owners and miners. +- More important, these emissions alpha bypasses the subnet pool and gets into the subnet directly from the coinbase. Furthermore, the only way for this emissions alpha to come out of the subnet is via unstaking, even though they did not participate in staking. + +### Subnet zero + +- Even though subnet zero does not run any incentive mechanism, a hotkey can be registered in subnet zero and can accept stake TAO. This stake TAO can be either from a TAO holder or from another hotkey. + +### Why global stake matters + +When a validator’s stake is global it protects the Bittensor network much better. It does so by making it hard for a rogue validator (or for a cabal of rogue validators) to acquire 51% of the consensus voting power. Here is a simple example showing how it works: + +Let's say we have 52 subnets and hypothetically a total 52,000 staked TAO tokens distributed amongst all the validators across these 52 subnets. + + +
+ +
+ +
+ +- When the stake is global, every validator’s stake is 100% global, hence every validator’s stake will appear in every subnet. A rogue validator would have to hold at least 51% of the total staked TAO, i.e., at least 26,500 TAO (51% of 52,000 TAO), to take control of the consensus power. This consensus power would appear in every subnet, giving the rogue validator a control over all the subnets. + +- Let’s now make stake 100% local. This means that only the stake the validator has in a subnet is applicable for that subnet. This validator's stake in other subnets is not taken into account in this subnet. For simplicity, assume that all the validators’ stake is evenly spread among these 52 subnets. Then each subnet will have 1000 TAO tokens (52,000/52) as a combined stake of its validators. + +- **But notice this**: In this case, when the stake is 100% local, a validator in a subnet only needs 500 TAO tokens + 1 to take over that subnet. Hence shifting stake from 100% global to 100% local has resulted in severely degrading the security of subnets. + +As we saw in [Validator stake weight](#validator-stake-weight), the dynamic TAO scheme makes use of both global and local characteristics of the stake to strengthen the overall consensus security of the Bittensor network. \ No newline at end of file diff --git a/docs/dynamic-tao/index.md b/docs/dynamic-tao/index.md new file mode 100644 index 00000000..f750970c --- /dev/null +++ b/docs/dynamic-tao/index.md @@ -0,0 +1,28 @@ +--- +title: "Dynamic TAO" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +import { HiAcademicCap } from "react-icons/hi2"; +import { MdInstallDesktop } from "react-icons/md"; +import { FaNetworkWired } from "react-icons/fa"; +import { GiMining } from "react-icons/gi"; +import { GrValidate } from "react-icons/gr"; +import { GiHiveMind } from "react-icons/gi"; +import { GiOvermind } from "react-icons/gi"; +import { GiBrainTentacle } from "react-icons/gi"; +import { PiBrainFill } from "react-icons/pi"; +import { GiBrainStem } from "react-icons/gi"; +import { CiWallet } from "react-icons/ci"; +import { SiTrpc } from "react-icons/si"; +import { GoKey } from "react-icons/go"; +import { GiCardExchange } from "react-icons/gi"; +import { BiSolidNetworkChart } from "react-icons/bi"; +import { FaMoneyBillTransfer } from "react-icons/fa6"; +import { GrStakeholder } from "react-icons/gr"; + +# Dynamic TAO + +TBD \ No newline at end of file diff --git a/docs/evm-tutorials/index.md b/docs/evm-tutorials/index.md index 7128b02e..dc79d601 100644 --- a/docs/evm-tutorials/index.md +++ b/docs/evm-tutorials/index.md @@ -47,10 +47,10 @@ Run the below tutorials to learn how to use the EVM feature on the Bittensor blo link='/evm-tutorials/evm-on-subtensor' body='A beginner-friendly introduction to EVM on Bittensor.' /> + body='Get started with tutorials by installing dependencies first.' /> + body='Learn how to transfer TAO from Metamask to a SS58 address.' /> \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/dark-alpha-and-alpha-out.svg b/static/img/docs/dynamic-tao/dark-alpha-and-alpha-out.svg new file mode 100644 index 00000000..66c6cbf2 --- /dev/null +++ b/static/img/docs/dynamic-tao/dark-alpha-and-alpha-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/dark-fifty-one-percent-example.svg b/static/img/docs/dynamic-tao/dark-fifty-one-percent-example.svg new file mode 100644 index 00000000..43277abf --- /dev/null +++ b/static/img/docs/dynamic-tao/dark-fifty-one-percent-example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/dark-staking-subnet-pools.svg b/static/img/docs/dynamic-tao/dark-staking-subnet-pools.svg new file mode 100644 index 00000000..8c10660d --- /dev/null +++ b/static/img/docs/dynamic-tao/dark-staking-subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/dark-subnet-pools.svg b/static/img/docs/dynamic-tao/dark-subnet-pools.svg new file mode 100644 index 00000000..e49d8845 --- /dev/null +++ b/static/img/docs/dynamic-tao/dark-subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/dark-unstaking-subnet-pools.svg b/static/img/docs/dynamic-tao/dark-unstaking-subnet-pools.svg new file mode 100644 index 00000000..28ede50f --- /dev/null +++ b/static/img/docs/dynamic-tao/dark-unstaking-subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/fifty-one-percent-example.svg b/static/img/docs/dynamic-tao/fifty-one-percent-example.svg new file mode 100644 index 00000000..35f5c74d --- /dev/null +++ b/static/img/docs/dynamic-tao/fifty-one-percent-example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/staking-subnet-pools.svg b/static/img/docs/dynamic-tao/staking-subnet-pools.svg new file mode 100644 index 00000000..22c357f8 --- /dev/null +++ b/static/img/docs/dynamic-tao/staking-subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/subnet-pools.svg b/static/img/docs/dynamic-tao/subnet-pools.svg new file mode 100644 index 00000000..66344a27 --- /dev/null +++ b/static/img/docs/dynamic-tao/subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docs/dynamic-tao/unstaking-subnet-pools.svg b/static/img/docs/dynamic-tao/unstaking-subnet-pools.svg new file mode 100644 index 00000000..dbb23e8d --- /dev/null +++ b/static/img/docs/dynamic-tao/unstaking-subnet-pools.svg @@ -0,0 +1 @@ + \ No newline at end of file