# move-lock (/docs/tx/move-lock)

Re-points the signing coldkey's entire stake lock on the subnet at the
destination hotkey, carrying the locked mass with it. Accrued conviction
is preserved only when the origin and destination hotkeys are owned by
the same coldkey (e.g. rotating your own validator hotkeys); if the
destination hotkey belongs to a different coldkey, conviction resets to
zero and matures again from scratch. The destination hotkey must exist
on chain (fails with `HotKeyAccountNotExists`). Fails if there is no
existing lock on the subnet to move.

| Signer    | Pallet          | Wraps                       |
| --------- | --------------- | --------------------------- |
| `coldkey` | SubtensorModule | `SubtensorModule.move_lock` |

## Parameters [#parameters]

| Parameter                 | Type    | Required | Description                  |
| ------------------------- | ------- | -------- | ---------------------------- |
| `netuid`                  | integer | yes      | Subnet the lock lives on.    |
| `destination_hotkey_ss58` | string  | yes      | Hotkey the lock is moved to. |

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 move-lock \
  --netuid <int> \
  --destination-hotkey <ss58|name> --dry-run
btcli tx move-lock \
  --netuid <int> \
  --destination-hotkey <ss58|name> -w my_coldkey
```

## Python [#python]

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

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = sub.MoveLock(netuid=1, destination_hotkey_ss58="5F...")

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:

```python
await client.execute_tool("move_lock", {...}, wallet)
```
