Transactions

transfer

Transfer TAO from the coldkey to a destination address.

View as Markdown

Sends free balance from the signing coldkey to the destination. On-chain transfers are irreversible — funds sent to a wrong address cannot be recovered, so double-check the destination. A transaction fee is deducted from the sender on top of the amount, and the call fails if the free balance cannot cover both. Pass all to sweep the entire transferable balance. With keep_alive (the default) the transfer refuses to drop the sender below the existential deposit; disable it only when intentionally emptying the account.

SignerPalletWraps
coldkeyBalancesBalances.transfer_keep_alive, Balances.transfer_allow_death, Balances.transfer_all

Parameters

ParameterTypeRequiredDescription
dest_ss58stringyesAccount the funds are sent to.
amount_taonumber | "all"yesHow much to send.
keep_alivebooleannoRefuse to drop the sender below the existential deposit. Disable it only when you intend to empty the account, which lets the chain reap it.

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 transfer \
  --dest <ss58|name> \
  --amount-tao <amount|all> --dry-run
btcli tx transfer \
  --dest <ss58|name> \
  --amount-tao <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.Transfer(dest_ss58="5F...", amount_tao=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("transfer", {...}, wallet)