wallet-cli tx send¶
Send the native coin, or a token, with a human --amount.
Synopsis¶
wallet-cli tx send --to <address|contact> (--amount <n> | --raw-amount <n>)
[--token <symbol> | --contract <address> | --asset-id <id>]
[--dry-run | --sign-only | --build-only | --wait [--wait-timeout <ms>]]
[--fee-limit <sun>] [--permission-id <n>] [--expiration <ms>]
[--gas-limit <n>] [--max-fee <gwei>] [--priority-fee <gwei>] [--nonce <n>]
[options]
Description¶
Builds, signs, and submits a transfer from the active account (or --account), on TRON or EVM networks alike. What is sent depends on which selector you pass:
- none → the network's native coin;
--token <symbol>→ token resolved from the local address book;--contract <address>→ contract token by address — TRC20 on TRON, ERC20 on EVM;--asset-id <id>→ TRC10 by numeric asset id (TRON only).
Amounts: --amount is human units (native coin, or token units respecting the token's decimals); --raw-amount is the raw integer (SUN / wei, or token base units). Exactly one of the two. The native coin's decimals are fixed by the family (6 on TRON, 18 on EVM); a token's are read from the chain.
Early exits still build through the selected network first. --dry-run builds and estimates, then returns the plan with no signature and no broadcast; --sign-only builds, estimates, signs, and prints the signed transaction hex without broadcasting; --build-only builds and estimates but does not unlock or sign, printing the unsigned hex. The hex is protobuf on TRON and RLP (0x02…) on EVM; either feeds tx sign and tx broadcast.
Fees are family-specific. TRON burns bandwidth/energy and caps the energy spend with --fee-limit; EVM pays gas, so --gas-limit, --max-fee, --priority-fee and --nonce apply instead. Help tags each set (TRON only) / (EVM only), and using one on the other family is refused with invalid_option — as are --max-fee / --priority-fee on an EVM chain that still prices in gasPrice.
Omitted EVM values are taken from the node: the gas limit from eth_estimateGas (unpadded), the fee ceiling from the current base fee, and the nonce from the account's pending count. When the estimate itself fails — an unfunded account, a call the node reverts — the error says so and --gas-limit proceeds without one. A fee that is signable but questionable (a tip clamped to the ceiling, a ceiling below the current base fee) is reported in meta.warnings rather than refused.
TRON multi-sig uses --permission-id to select the signing group and --expiration to extend how long co-signers have to add their signatures.
By default the command returns at submission (stage: "submitted"), not confirmation — add --wait to block until confirmed/failed, or poll tx status.
Requires an account — the active one, unless --account <accountId|label> overrides it. The master password via --password-stdin is needed only when the selected mode signs; --dry-run and --build-only never unlock the wallet. Signing commands show no interactive prompt, so a signing mode without the password fails with auth_required.
Options¶
| Option | Description |
|---|---|
--to <address\|contact> |
Required. Recipient address for the selected network, or a name from the contact book |
--amount <string> |
Human amount; mutually exclusive with --raw-amount |
--raw-amount <string> |
Raw integer amount in native base units (SUN / wei) or token base units |
--token <string> |
Token symbol from the address book; excludes --contract, --asset-id |
--contract <string> |
Token contract address — TRC20 on TRON, ERC20 on EVM; omit for a native-coin transfer |
--dry-run |
Build and estimate through the selected network; no signing or broadcast; excludes --sign-only / --build-only |
--sign-only |
Build, estimate, sign, and output the signed hex without broadcasting; excludes --dry-run / --build-only |
--build-only |
Build and estimate, output the unsigned hex without unlocking; excludes --dry-run / --sign-only |
--wait / --wait-timeout <ms> |
Poll after broadcast until confirmed/failed (cap default 60000; on cap returns the submitted receipt) |
--password-stdin |
Master password from stdin |
TRON only:
| Option | Description |
|---|---|
--asset-id <string> |
TRC10 numeric asset id |
--fee-limit <string> |
Max TRX energy fee to burn for TRC20 transfers, in SUN (default 100000000) |
--permission-id <n> |
Permission group to sign with (0=owner, 1=witness, 2-9=active); default 0 |
--expiration <ms> |
Transaction expiration in ms, up to 86400000 (24h); only with --sign-only or --build-only; omitted = node default (~60s) |
EVM only:
| Option | Description |
|---|---|
--gas-limit <string> |
Gas units to authorise; default is the node's estimate, unpadded |
--max-fee <gwei> |
Maximum total fee per gas — 25 or 25gwei (EIP-1559 chains only) |
--priority-fee <gwei> |
Tip per gas paid to the proposer — 25 or 25gwei (EIP-1559 chains only) |
--nonce <n> |
Transaction nonce; default is the account's pending nonce. Under --dry-run an explicit nonce is checked against the account's mined count and a spent one fails with nonce_too_low before any estimate; a nonce merely ahead of the next one stays a meta.warnings gap notice |
Plus the global options.
Examples¶
Password: except for
--dry-run, the examples below omit the password to keep the focus on the selector flags. A real send needs the master password on stdin — prefix withprintf '%s' "$PW" |and append--password-stdin(see the description above).
# 1 TRX on Nile; 0.0001 ETH on Sepolia
wallet-cli tx send --to TSx72ViULFepRGCS4PM5dP4FqD1d8qggCc --amount 1 --network nile
wallet-cli tx send --to 0x7B28FE10FBccE88c3967ff0Fd64f1ffB46b46C9C --amount 0.0001 --network sepolia
# token by address-book symbol on either family; TRC10 by asset id on TRON only
wallet-cli tx send --to T... --token USDT --amount 5 --network nile
wallet-cli tx send --to 0x... --token USDC --amount 5 --network sepolia
wallet-cli tx send --to T... --asset-id 1002000 --raw-amount 1000000 --network nile
# rehearse without signing
wallet-cli tx send --to TSx72ViULFepRGCS4PM5dP4FqD1d8qggCc --amount 1 --network nile --dry-run -o json
--dry-run prints the fee in the selected network's model — bandwidth/energy on TRON, a gas ceiling on EVM:
⏳ Dry run tx send
To TMowUdZm5F4iircH2gnaUSCfDa3hdNLn7V
Fee 0.1 TRX
Tx ff87701b0a...18ad8381
⏳ Dry run tx send
To 0x7B28FE10FBccE88c3967ff0Fd64f1ffB46b46C9C
Fee ≤ 0.000044 ETH (21,000 gas × 2.13664 gwei max)
Tx {"to":"0x7...000000"}
Submit receipt (default mode, text and json):
printf '%s' "$PW" | wallet-cli tx send --to TGkbaCYB4kRBc3Q6wjqkACefUvRwf2KzkH --amount 1 --network nile --password-stdin
⏳ Sent 1 TRX
To TGkbaCYB4kRBc3Q6wjqkACefUvRwf2KzkH
TxID 4574b646adc694e99a1f64e548b2bdf9da62621c2d833f77354f67b751fbd0c4
Status pending — not yet on-chain
! Track it: wallet-cli tx info --network tron:3448148188 --txid 4574b646adc694e99a1f64e548b2bdf9da62621c2d833f77354f67b751fbd0c4
{"schema":"wallet-cli.result.v1","success":true,"command":"tx.send","data":{"kind":"send","stage":"submitted","txId":"4574b646adc694e99a1f64e548b2bdf9da62621c2d833f77354f67b751fbd0c4","rawAmount":"1000000","to":"TGkbaCYB4kRBc3Q6wjqkACefUvRwf2KzkH"},"meta":{"durationMs":2172,"warnings":[]},"chain":{"family":"tron","network":"tron:3448148188","chainId":"3448148188"}}
Output¶
data varies by mode:
| Mode | Fields |
|---|---|
| default (submit) | kind: "send", stage: "submitted", txId, rawAmount (string), to, plus toContact when --to was a contact name |
--wait (confirmed) |
the above, but stage: "confirmed", plus confirmed, blockNumber, failed, and the realised cost — netUsed (bandwidth used) / feeSun on TRON, gasUsed / feeWei / effectiveGasPriceWei on EVM |
--wait (reverted) |
the same fields, but stage: "failed" and failed: true — the transaction was mined and then reverted |
--dry-run |
kind, mode: "dry-run", fee, the unsigned tx, rawAmount, to (plus nonce on EVM) |
--sign-only |
kind, mode: "sign-only", hex (signed transaction hex), signed, address (signer), txId, fee, rawAmount, to |
--build-only |
kind, mode: "build-only", hex (unsigned transaction hex), unsigned tx, fee, rawAmount, to |
signed is the signed transaction in the chain's own form — a TRON transaction object including signature[], or {raw, hash} on EVM. The fee object follows the network's fee model: tron-resource reports the estimated resource cost as bandwidthBurnSunIfNoFreeze plus energy* fields for contract calls, while eip1559 / legacy report maxCostWei, gasLimit and maxPerGasWei — the per-gas ceiling being maxFeePerGas on an EIP-1559 chain and gasPrice on a legacy one.
tx is the unsigned transaction in the same family-specific shape: txID, raw_data and raw_data_hex on TRON; on EVM to, value, chainId, nonce, gasLimit, plus type: 2 with maxFeePerGas / maxPriorityFeePerGas, or type: 0 with gasPrice on a legacy chain. On EVM hex is a 0x RLP encoding rather than protobuf.
A reverted transaction still leaves the envelope at success: true and exit 0 — the command completed; the chain rejected the transaction. Scripts must branch on data.stage, not on the exit code.
Exit status¶
0 submitted (or built/signed in early-exit modes) · 1 execution failure (nonce_too_low — --dry-run with an already-mined --nonce, rpc_error, timeout — on timeout the tx may still be in flight; check tx status before resending) · 2 usage error (conflicting selectors/amounts/modes; family_mismatch when the recipient or the account belongs to another family; invalid_option when a fee flag is scoped to the other family).
0 also covers --wait reporting stage: "failed": the exit code reflects the command, not the on-chain result. See script safety.
See also¶
tx status · tx broadcast · Fee models · Script safety