Transactions

remove-stake

Unstake alpha from a hotkey back to the coldkey.

View as Markdown

Swaps the alpha position back to TAO at the current pool price and credits it to the signing coldkey's free balance. Pass all to exit the entire position on that hotkey and subnet (the build fails if nothing is staked there). Like staking, the swap moves the pool, so large amounts incur slippage — use remove_stake_limit to bound the price. The hotkey and netuid must match where the stake is actually held, and the subnet must have subtoken trading enabled. The requested amount is capped to the stake currently available. A partial unstake must leave a remainder worth at least 0.002 TAO at the simulated pool price — exit the full position instead of leaving dust (AmountTooLow).

SignerPalletWraps
coldkeySubtensorModuleSubtensorModule.remove_stake

Parameters

ParameterTypeRequiredDescription
hotkey_ss58stringyesHotkey the stake is held on (the validator backing the position).
netuidintegeryesSubnet the stake lives on (netuid 0 is the root network).
amount_alphanumber | "all"yesHow much to unstake from this position, or all.

Address parameters (--hotkey, --coldkey, --dest, ...) accept a raw ss58 address, an address-book or proxy-book name, or a local wallet/hotkey name.

CLI

Preview with --dry-run (shows fee, effects, and policy result without submitting), then submit:

btcli tx remove-stake \
  --hotkey <ss58|name> \
  --netuid <int> \
  --amount-alpha <amount|all> --dry-run
btcli tx remove-stake \
  --hotkey <ss58|name> \
  --netuid <int> \
  --amount-alpha <amount|all> -w my_coldkey

Python

import bittensor as sub
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = sub.RemoveStake(hotkey_ss58="5F...", netuid=1, amount_alpha=1.0)

async with sub.Client("finney") as client:
    plan = await client.plan(intent, wallet)   # fee, effects, policy — no submission
    result = await client.execute(intent, wallet)
    if not result.success:
        print(result.error.code, result.error.remediation)

Or build it by op name, as an agent would:

await client.execute_tool("remove_stake", {...}, wallet)