Transfer

Event v101 → current #2

Emitted when tokens are transferred between accounts.

View events on chain
Useful for: walletsexchangesanalyticsdevelopersstakers

The Big Picture

This is the fundamental 'money moved' event. Every TAO transfer between accounts emits this event. It's the building block for payments, tips, exchange operations, and any movement of liquid (unstaked) TAO. Wallets and exchanges monitor this constantly.

Why This Matters

When someone sends you TAO, or you send TAO to someone, this event proves it happened. The from/to/amount fields tell the complete story. Exchanges use this to credit deposits; wallets use it to show transaction history.

Example Scenario

You receive a payment of 10 TAO. Balances.Transfer fires with from: sender's address, to: your address, amount: 10000000000 (in RAO, = 10 TAO). Your wallet detects this event and shows 'Received 10 TAO from [sender]'.

Common Questions

Why is the amount so large?
Amounts are in RAO (the smallest unit). 1 TAO = 1,000,000,000 RAO. Divide by 10^9 to get TAO. This avoids decimal precision issues in blockchain math.
What's the difference between Transfer and transfer_keep_alive?
transfer_keep_alive refuses to empty your account (keeps existential deposit). transfer_allow_death can empty it completely. Both emit Balances.Transfer.
Can transfers fail silently?
No. If you see Balances.Transfer, the transfer succeeded. If it failed, you'd see ExtrinsicFailed instead, with no Transfer event.

Use Cases

  • Track incoming and outgoing TAO payments
  • Build payment notification systems
  • Monitor exchange deposits and withdrawals
  • Track fund flows across the network

How to Use This Event

  • Subscribe to your address for payment notifications
  • Monitor exchange hot wallets for deposit detection
  • Index all transfers to build payment analytics
  • Track whale movements and fund flows

From Chain Metadata

Transfer succeeded.

Triggers

Preconditions

  • Sender has sufficient balance
  • Transfer won't kill sender (or transfer_allow_death used)
  • Recipient will meet existential deposit

Effects

Storage Modified

Postconditions

  • Sender balance decreased by amount
  • Recipient balance increased by amount

Side Effects

  • May trigger NewAccount if recipient is new
  • May trigger KilledAccount if sender balance goes to zero

Event Data

#NameTypeDescription
0
from
AccountId Sender account (hex -> SS58)
1
to
AccountId Recipient account (hex -> SS58)
2
amount
u64 Transfer amount (RAO) (RAO -> TAO (/ 10^9))

Code Examples

import { ApiPromise, WsProvider } from "@polkadot/api";
import { stringCamelCase } from "@polkadot/util";

const provider = new WsProvider("wss://entrypoint-finney.opentensor.ai:443");
const api = await ApiPromise.create({ provider });

// Subscribe to Transfer events
api.query.system.events((events) => {
  events
    .filter(({ event }) =>
      event.section === stringCamelCase("Balances") &&
      event.method === "Transfer"
    )
    .forEach(({ event }) => {
      console.log("Transfer:", event.data.toHuman());
    });
});

On-Chain Activity

Emission Frequency
●●●●●○ Dominant 5M–50M emissions

Core protocol operations, high volume

#10 most emitted event

As of block 7,429,232

Runtime Info

Pallet Index
5
Event Index
2
First Version
v101
Current Version
v393