Energy and Bandwidth¶
TRON's fee model, and why stake exists. TRON only — EVM networks price transactions in gas instead; see Networks → the evm-gas model. Units first: 1 TRX = 1,000,000 SUN; every CLI flag named *-sun takes raw SUN. JSON reports raw SUN too, but not always as a string: balances and other int64-sized amounts are decimal strings, while bounded counters and fees such as feeSun, multiSignFeeSun, energyUsed and netUsed may come back as JSON numbers. Follow each command's field table rather than assuming one type — see machine-interface.
Two resources instead of gas¶
| Resource | Consumed by | Free allowance |
|---|---|---|
| Bandwidth | every transaction's bytes | small daily per-account quota |
| Energy | smart-contract execution (TRC20 transfers included) | none |
When a transaction needs more than you have, the node burns TRX from your balance to cover the difference. For contract calls, --fee-limit (on tx send / contract commands, default 100000000 SUN) caps that burn — a safety valve against a buggy or hostile contract consuming unbounded energy.
Check your standing anytime:
wallet-cli account info --network tron:3448148188 -o json | jq '.data.resources'
{ "bandwidth": { "used": 0, "limit": 600 }, "energy": { "used": 0, "limit": 888 } }
How you obtain resources: staking¶
Staking locks TRX (it remains yours) in exchange for a continuous resource quota plus TRON Power (governance votes). The stake command group maps 1:1 onto the chain operations:
| Command | Chain operation | Effect |
|---|---|---|
stake freeze |
FreezeBalanceV2 | Lock TRX for --resource energy\|bandwidth |
stake unfreeze |
UnfreezeBalanceV2 | Request unlock; resources drop immediately, TRX enters a waiting period (14 days on mainnet) |
stake withdraw |
WithdrawExpireUnfreeze | Claim unstakes whose waiting period has expired |
stake cancel-unfreeze |
CancelAllUnfreezeV2 | Roll all pending unstakes back to staked |
stake delegate |
DelegateResourceV2 | Lend resource quota to --receiver (optionally --lock for --lock-period blocks, ~3 s/block) |
stake undelegate |
UnDelegateResourceV2 | Reclaim a delegation |
Delegation moves the resource quota, never the TRX — the stake stays on the owner's account. A common setup: a cold account holds the stake and delegates energy to a hot account that does the transacting.
Practical consequences¶
- A "free" TRX transfer isn't always free: past the bandwidth quota, it burns TRX.
- A TRC20 transfer with zero energy burns noticeably more — check
--dry-run'sfeeblock before complaining about balances. rpc_errormentioning bandwidth/energy/balance during send → fund, stake, or wait for the daily quota; see Troubleshooting.
See also¶
Staking walkthrough · Networks · account info