Skip to content

Sending Coins and Tokens

One command sends every asset kind — the network's native coin, TRC20/ERC20 contract tokens, and TRC10 assets — the selector flags decide which. Command examples run on Nile; the same commands work on an EVM network by swapping --network.

Password: a software-signed send needs your master password on stdin, and signing shows no prompt. The examples below omit it to keep the token flags in focus — prepend printf '%s' "$PW" | and append --password-stdin, or pipe from a password manager (see Getting started). --dry-run, --build-only and Ledger signing use no master password.

The native coin

wallet-cli tx send --to TSx72ViULFepRGCS4PM5dP4FqD1d8qggCc --amount 1 --network nile
wallet-cli tx send --to 0x742d35Cc6634C0532925a3b844Bc454e4438f44e --amount 0.01 --network sepolia

--amount is the coin's human unit — 1 = 1 TRX = 1,000,000 SUN on TRON, 0.01 = 0.01 ETH = 10^16 wei on Sepolia. Prefer exact base units? Use --raw-amount 1000000 instead — one or the other, never both.

Contract tokens (TRC20 / ERC20)

A contract token is identified by its contract address. Pass that address directly, or a short symbol that wallet-cli resolves to the contract for you:

# by contract address — always works
wallet-cli tx send --to T... --contract TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t --amount 5 --network nile
wallet-cli tx send --to 0x... --contract 0xdAC17F958D2ee523a2206206994597C13D831ec7 --amount 5 --network ethereum
# by symbol — needs the token to be in the token book (see below)
wallet-cli tx send --to T... --token USDT --amount 5 --network nile

A token transfer executes contract code, and the fee flags differ by family:

  • TRON — it consumes energy; --fee-limit caps the TRX that may be burned for it (default 100000000 SUN = 100 TRX). If a transfer fails on fee limit, understand why before raising it — see Energy & bandwidth.
  • EVM — it consumes gas, estimated from the node. Override with --gas-limit, --max-fee, --priority-fee, --nonce — see the evm-gas model.

Each set is refused on the other family with invalid_option.

The token book (symbol → token)

--token USDT works by looking the symbol up in a per-network token book: a local table mapping a symbol to its on-chain token — a TRC20/ERC20 contract, or a TRC10 asset id. Entries come from two sources, shown in the Source column of token list:

  • official — built in, curated per network. tron:728126428 ships USDT / USDC / USDD, tron:3448148188 ships USDT / USDD, and eip155:1 ships USDT / USDC. The other networks ship none.
  • user — tokens you add yourself.
wallet-cli token list --network tron
| Symbol | Name            | Source   | Contract / ID                      |
| ------ | --------------- | -------- | ---------------------------------- |
| USDT   | Tether USD      | official | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t |
| USDC   | USD Coin        | official | TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8 |
| USDD   | Usdd Stablecoin | official | TXDk8mbtRbXeYuMNS83CfKPaYYT8XWv9Hz |

The book is per network, and an official entry is never copied between chains — the same symbol can have a different address and different decimals elsewhere (USDT is 6 decimals on Ethereum and 18 on BNB Smart Chain). On a network with no official entries, add a token once before --token resolves it there. token add reads the symbol and decimals off the token and stores a user entry, scoped to that one network:

wallet-cli token add --contract T... --network nile      # TRC20, by contract
wallet-cli token add --contract 0x... --network sepolia     # ERC20, by contract
wallet-cli token add --asset-id 1000001 --network nile   # TRC10, TRON only

Manage the rest with the same group: token list to see all entries, token remove to drop a user entry, token balance / token info to query a token without adding it.

TRC10 tokens — TRON only

TRC10 assets have numeric ids, not contracts:

wallet-cli tx send --to T... --asset-id 1002000 --raw-amount 1000000 --network nile

--asset-id is a TRON-only flag; on an EVM network it fails with invalid_option.

--token, --contract, and --asset-id are mutually exclusive; none of them means the network's native coin.

Rehearse, then send

--dry-run builds the transaction and estimates fees through the selected network, then returns without signing or broadcasting — nothing can leave your wallet:

wallet-cli tx send --to T... --token USDT --amount 5 --network nile --dry-run -o json

Check the fee block in the output, then re-run without --dry-run. Submission alone is not success — either confirm afterwards with tx status, or add --wait to the tx send command so it blocks until the transaction is confirmed or failed.

Mainnet: the same commands with --network tron, --network ethereum or --network bsc move real assets, irreversibly. Triple-check --to (a confirmed transfer to a wrong address is gone), and dry-run first.

See also

tx send reference — every flag and output field · token commands — the token book · Getting started · Scripting — automating sends safely