Sending TRX and Tokens
July 15, 2026 · View on GitHub
One command sends all three asset kinds — native TRX, TRC20, TRC10 — the selector flags decide which. Command examples run on Nile.
Password: every
tx sendneeds your master password on stdin, and signing shows no prompt. The examples below omit it to keep the token flags in focus — prependprintf '%s' "$PW" |and append--password-stdin, or pipe from a password manager (see Getting started).
Native TRX
wallet-cli tx send --to TSx72ViULFepRGCS4PM5dP4FqD1d8qggCc --amount 1 --network tron:nile
--amount is human TRX (1 = 1 TRX = 1,000,000 SUN). Prefer exact base units? Use --raw-amount 1000000 instead — one or the other, never both.
TRC20 tokens
A TRC20 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 tron:nile
# by symbol — needs the token to be in the token book (see below)
wallet-cli tx send --to T... --token USDT --amount 5 --network tron:nile
TRC20 transfers execute contract code, so they consume 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.
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 contract, or a TRC10 asset id. Entries come from two sources, shown in the Source column of token list:
- official — built in for well-known tokens. On mainnet,
USDTandUSDCare preloaded; the testnets (Nile, Shasta) ship with none. - user — tokens you add yourself.
wallet-cli token list --network tron:mainnet
| Symbol | Name | Source | Contract / ID |
| ------ | ---------- | -------- | ---------------------------------- |
| USDT | Tether USD | official | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t |
| USDC | USD Coin | official | TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8 |
Because testnets carry 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 — TRC20 by --contract, TRC10 by --asset-id — scoped to that one network:
wallet-cli token add --contract T... --network tron:nile # TRC20, by contract
wallet-cli token add --asset-id 1000001 --network tron:nile # TRC10, by numeric asset id
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
TRC10 assets have numeric ids, not contracts:
wallet-cli tx send --to T... --asset-id 1002000 --raw-amount 1000000 --network tron:nile
--token, --contract, and --asset-id are mutually exclusive; none of them means native TRX.
Rehearse, then send
--dry-run builds the transaction and estimates fees without signing or broadcasting — nothing can leave your wallet:
wallet-cli tx send --to T... --token USDT --amount 5 --network tron: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: same commands with
--network tron:mainnetmove 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