# unstake-all-alpha (/docs/tx/unstake-all-alpha)

Sells every alpha position the signing coldkey holds on this hotkey and
restakes the proceeds as TAO on the root network (netuid 0), instead of
releasing them to the free balance. Subnets where subtoken trading is
disabled or where the position fails validation are silently skipped.
Use it to consolidate onto root while keeping funds staked; use
`unstake_all` to exit to free balance instead. Each pool swap happens
at the current price with no limit protection, so large positions can
incur slippage.

| Signer    | Origin                                 | Pallet          | Wraps                                                                                               |
| --------- | -------------------------------------- | --------------- | --------------------------------------------------------------------------------------------------- |
| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1234-L1238) |

## Parameters [#parameters]

| Parameter     | Type   | Required | Description                                |
| ------------- | ------ | -------- | ------------------------------------------ |
| `hotkey_ss58` | string | yes      | Hotkey whose alpha stake is moved to root. |

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

## CLI [#cli]

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

```bash
btcli tx unstake-all-alpha \
  --hotkey <ss58|name> --dry-run
btcli tx unstake-all-alpha \
  --hotkey <ss58|name> -w my_coldkey
```

## Python [#python]

```python
import bittensor as bt
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.UnstakeAllAlpha(hotkey_ss58="5F...")

sub = bt.Subtensor()
plan = sub.plan(intent, wallet)   # fee, effects, policy — no submission
result = sub.execute(intent, wallet)
if not result.success:
    print(result.error.code, result.error.remediation)
```

(`bt.Subtensor` is also the async client — `async with bt.Subtensor() as client:`
— see [The client](/docs/concepts/client).) Or build the intent by op name, as
an agent would:

```python
result = sub.execute_tool("unstake_all_alpha", {...}, wallet)
```

## On-chain implementation [#on-chain-implementation]

`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1236`](/code/pallets/subtensor/src/macros/dispatches.rs#L1234-L1238):

```rust
#[pallet::call_index(84)]
#[pallet::weight(<T as crate::pallet::Config>::WeightInfo::unstake_all_alpha())]
pub fn unstake_all_alpha(origin: OriginFor<T>, hotkey: T::AccountId) -> DispatchResult {
    Self::do_unstake_all_alpha(origin, hotkey)
}
```

Delegates to [`do_unstake_all_alpha`](/code/pallets/subtensor/src/staking/remove_stake.rs#L188).

Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/<path>` (index: [`/code/index.json`](/code/index.json)).
