force_transfer
Call v101 → current #2Transfers TAO between accounts (root only, can specify source).
View calls on chainCall Workflow
This diagram shows the call execution flow: starting with force_transfer, passing through validation
(signature, nonce, mortality, fee payment), then pre-dispatch checks, followed by dispatch which emits events: Transfer and modifies storage: Account, and finally post-dispatch where ExtrinsicSuccess is emitted and fees are settled.
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
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
| # | Name | Type | Description |
|---|---|---|---|
| 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::Balance | value: 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
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