# Extrinsics: proxy

Proxies are wallets that are authorized by other wallets to perform tasks. Each Bittensor proxy type permits a fixed set of calls.

_Source: https://beta.taostats.io/docs/understanding-taostats/extrinsics/proxy-extrinsics_

_Last reviewed: 2026-11-05_

Proxies are wallets that are authorized by other wallets to perform tasks. When you add a proxy, you choose a proxy type, and the type fixes which calls the proxy can make on your behalf. A call that the type does not list is rejected.

Bittensor has 23 proxy types. Four of them are deprecated and permit nothing.

> [!NOTE]
> **Securing your wallet**
>
> For how proxies fit into an overall wallet-security setup alongside ledgers and multisig, see [Securing a wallet: ledgers, multisig & proxies](https://beta.taostats.io/docs/concepts/security/securing-a-wallet).

> [!TIP]
> **Sign proxy transactions on Taostats**
>
> [Taostats Actions](https://beta.taostats.io/docs/understanding-taostats/taostats-actions) can sign proxy transactions from your browser wallet. Turn on **Complete as proxy wallet** on any action to sign it on behalf of a wallet that made yours its proxy; Actions checks your proxy type can do the call before you sign. You can also add, remove and create proxies there. See [Actions: proxies](https://beta.taostats.io/docs/understanding-taostats/taostats-actions/proxies). Signing requires a paid plan.

## ProxyType permission table

| ProxyType | Transfer TAO / alpha | Manage stake | Lock stake | Register | Subnet admin | Weights & serving | Child keys | Swap hotkey | Claim root | Basket trading | Gamma | Coldkey swap |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Any** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **NonCritical** | ✅ | ✅ | ✅ | ✅ *(PoW only)* | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ *(not spend)* | ❌ |
| **NonTransfer** | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ *(close only)* | ❌ |
| **NonFungible** | ❌ | ❌ | ❌ | ✅ *(PoW only)* | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| **Owner** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **SubnetLeaseBeneficiary** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ *(service only)* | ❌ |
| **Transfer** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **SmallTransfer** | ✅ *(\< 0.5 TAO / 0.5 alpha)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Staking** | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| **Lock** | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Registration** | ❌ | ❌ | ❌ | ✅ *(PoW + burned)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Validate** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ *(no identity or take)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Weights** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ *(weights only)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **ChildKeys** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **SwapHotkey** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| **RootClaim** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| **BasketTrading** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| **GammaSpend** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ *(spend only)* | ❌ |
| **SudoUncheckedSetCode** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Triumvirate** *(deprecated)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Senate** *(deprecated)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **Governance** *(deprecated)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **RootWeights** *(deprecated)* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |

## What the columns mean

- **Transfer TAO / alpha**: `transfer_keep_alive`, `transfer_allow_death`, `transfer_all`, `transfer_stake` and `transfer_stake_and_hotkey`. These move value to a different coldkey. Funding an EVM address (`EVM.deposit`) counts as a transfer.
- **Manage stake**: `add_stake`, `remove_stake`, `unstake_all`, `unstake_all_alpha`, `move_stake`, `swap_stake` (and their `_limit` variants), `stake_into_basket`, `add_collateral` and `set_min_collateral`. Stake stays on your own coldkey, but these calls can unstake it to free TAO.
- **Lock stake**: `lock_stake`, `move_lock` and `set_perpetual_lock`, the conviction-lock lifecycle.
- **Register**: `pow_register` (proof of work), the burn registrations `burned_register`, `register` and `register_limit` (despite their names, `register` and `register_limit` burn TAO), and `root_register`.
- **Subnet admin**: the subnet-owner hyperparameter calls (`sudo_set_*` in AdminUtils, including emission weights and switching gamma on for the subnet), `set_tempo`, `set_subnet_identity` and `update_symbol`. SubnetLeaseBeneficiary also has `start_call`.
- **Weights & serving**: `set_weights`, `commit_weights` and `reveal_weights` (with their mechanism, batch and timelocked variants), `serve_axon`, `serve_prometheus`, `set_identity`, `associate_evm_key`, and validator take changes.
- **Child keys**: `set_children` and `set_childkey_take`.
- **Swap hotkey**: `swap_hotkey` and `swap_hotkey_v2`.
- **Claim root**: `claim_root` and `claim_root_with_hotkey`.
- **Basket trading**: `swap_basket` and `swap_basket_many`, used by a root validator to rebalance its basket.
- **Gamma**: the [gamma](https://beta.taostats.io/docs/concepts/protocol-changes/gamma) calls: `mint_gamma`, `mint_gamma_with_stake`, `move_gamma`, `set_gamma_deposit_spender`, `set_gamma_deposit_daily_spend_cap`, `close_gamma_deposit`, `spend_gamma` and publishing a service with `set_service`.
- **Coldkey swap**: announcing, executing, disputing or clearing a coldkey swap. Only `Any` can do this.

## Notes

- **NonTransfer is not value-safe.** It cannot transfer to another coldkey, but it can unstake, lock and burn stake, and register networks. Do not use it to protect an account's value. It cannot mint, move or spend gamma, change a gamma deposit's spender or cap, or publish a service, so it can't give itself spending power over gamma.
- **NonFungible is the type that touches no value.** It cannot move, stake, lock or burn TAO or alpha, cannot use gamma, and cannot swap keys. It can still set weights and child keys, which redirect emissions, so treat it as an operations key, not a harmless one.
- **NonCritical** covers day-to-day work, including transfers, contract calls, gamma minting and publishing a service. It excludes sudo, burned and root registration, coldkey swaps, basket trading, spending gamma and EVM execution (`EVM.call`, `create`, `withdraw`), which needs `Any` because precompiles can rebuild an unrestricted origin.
- **Basket trading and gamma spending need an explicit grant.** Only `Any` and `BasketTrading` can call `swap_basket`; only `Any` and `GammaSpend` can call `spend_gamma`.
- **Staking includes claiming root dividends.** It covers `claim_root` and `claim_root_with_hotkey` as well as stake management. `RootClaim` remains the narrowest grant for a service that only claims.
- **Lock** controls the whole conviction-lock lifecycle and nothing else. It can lock up to the account's stake on a subnet, which reduces what can be unstaked, and can move a lock to any hotkey; moving it to a hotkey owned by a different coldkey forfeits accrued conviction. It cannot add, remove or transfer stake.
- **GammaSpend** can only spend the gamma deposits that name the real account as spender. A subnet service uses it as a billing key.
- **Validate** runs a validator hotkey from an operations key: all weight calls, `serve_axon`, `serve_axon_tls`, `serve_prometheus`, `associate_evm_key` and `set_commitment`. It cannot stake, transfer, swap keys, set child keys, change take, set identity or publish a gamma service, and it cannot wrap calls in Utility, Proxy or Multisig, so it never moves or locks TAO or alpha.
- **Weights** is the narrowest grant for a third-party weight setter: `set_weights`, `commit_weights`, `reveal_weights` and `commit_timelocked_weights`, with their mechanism and batch variants, and nothing else. Unlike Validate, it cannot re-point the axon or EVM key, so it cannot change where the subnet reaches or pays the neuron.
- **Batching.** Every non-deprecated type except `Validate` and `Weights` can call `Utility.batch_all`. Each call inside the batch is still checked against the proxy type, and the batch rolls back if one is rejected.
- **SmallTransfer** allows balance transfers below 0.5 TAO and stake transfers below 0.5 alpha per call.
- **SudoUncheckedSetCode** permits one call: `sudo_unchecked_weight` wrapping `System.set_code`, used for runtime upgrades by the sudo key.
- **Only `Any` can** call sudo, wrap calls in a multisig, submit MEV-shield encrypted calls, approve a limit order for later execution (`authorize_order`), register a [quantum-resistant hashed account](https://beta.taostats.io/docs/concepts/protocol-changes/quantum-wallets), or create a protected pure proxy or derivative. These either re-dispatch the inner call without the proxy filter or commit the account's funds.
- A proxy cannot add another proxy with a broader type than its own.
- The broad types (`Any`, `NonCritical`, `NonTransfer`, `NonFungible`) can also call Utility, Proxy, Scheduler, Commitments, Swap (liquidity positions), limit-order and other infrastructure pallets, including the safe pure-proxy and derivative calls (`create_safe_pure`, `kill_safe_pure`, `as_safe_derivative`). Multisig calls, safe or legacy, remain `Any` only. `Proxy.announce` is also `Any` only, so a delayed proxy call can only be announced by the account itself or its `Any` proxy.
