Transactions

move-lock

Move an existing lock from one hotkey to another on a subnet.

View as Markdown

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.

SignerPalletWraps
coldkeySubtensorModuleSubtensorModule.move_lock

Parameters

ParameterTypeRequiredDescription
netuidintegeryesSubnet the lock lives on.
destination_hotkey_ss58stringyesHotkey 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

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

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

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:

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