force_transfer

Call v101 → current #2

Transfers TAO between accounts (root only, can specify source).

View calls on chain

Click items to navigate. Pan and zoom to explore.

Used by: validators

The Big Picture

Like transfer_allow_death, but callable only by root and allows specifying the source account. Used when funds need to be moved without the source account signing the transaction.

Use Cases

  • Emergency fund recovery
  • Protocol-level transfers
  • Correcting stuck balances

From Chain Metadata

Exactly as `transfer`, except the origin must be root and the source account may be specified. ## Complexity Same as transfer, but additional read and write because the source account is not assumed to be in the overlay.

Input Parameters

#NameTypeDescription
0
source
MultiAddress AccountIdLookupOf<T>source: Account address as a lookup source (typically resolves to AccountId)
1
dest
MultiAddress AccountIdLookupOf<T>dest: Account address as a lookup source (typically resolves to AccountId)
2
value
Compact<u64> Cpt T::Balancevalue: Balance in chain native currency (RAO for TAO; ÷10⁹) (RAO -> TAO (/ 10^9))

Permissions

Origin
Unknown
Required Role

Permission data inferred from metadata. May be incomplete.

Requirements

  • Caller is root account
  • Source has sufficient free balance
  • Destination account can receive funds

Effects

Events Emitted

Storage Modified

Postconditions

  • Source balance decreased by amount
  • Destination balance increased by amount
  • Transfer event emitted

Side Effects

  • May create destination account if new
  • May reap source account if balance falls below ED

Code Examples

// ----------------------------------------------------------------------
// HEADS UP: 2 args below have a complex type with no usable default.
// Look for `undefined as any` and replace them with real values
// before running — the snippet compiles, but will fail at runtime as-is.
// ----------------------------------------------------------------------
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443

const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);

// Build force_transfer call (typed, named args)
const source = undefined as any /* MultiAddress — replace with real value */;
const dest = undefined as any /* MultiAddress — replace with real value */;
const value = 0n;

const tx = api.tx.Balances.force_transfer({
  source,
  dest,
  value,
});

Runtime Info

Pallet Index
5
Call Index
2
First Version
v101
Current Version
v411