TRC-20 Transfer Fees Dissected: Energy, Bandwidth, and What Actually Gets Charged
Two Resources, One Transaction
Every TRC-20 transfer on TRON consumes two distinct resources: bandwidth and energy. They're billed separately, drawn from separate pools, and have completely different replenishment mechanics. Most developers understand one or the other, but the interaction between them is where costs either stay manageable or spiral.
Bandwidth covers the raw byte cost of broadcasting a transaction to the network. Energy covers the VM execution cost of running the smart contract logic. A simple TRX transfer only needs bandwidth. A TRC-20 transfer, which triggers the token contract's transfer(address,uint256) function, needs both.
Bandwidth: The Simpler Half
Every TRON account gets 600 free bandwidth per day through a baseline allocation. A standard TRC-20 transfer transaction is typically around 345 bytes, which maps to roughly 345 bandwidth units (the network charges 1 bandwidth per byte of transaction data, including signatures and memo fields).
If your account has enough free daily bandwidth or staked-for-bandwidth TRX, the transaction costs nothing on this dimension. If the bandwidth pool is empty, the network burns TRX directly at a rate of 0.001 TRX per bandwidth unit (1,000 SUN per byte). For a 345-unit transaction, that's 0.345 TRX burned from the sending address, no staking required.
The free 600 daily units reset at 00:00 UTC. If you're doing low-volume transfers, you'll rarely hit bandwidth costs at all. High-volume senders typically stake TRX for bandwidth rather than burning, since the staking yield covers more transactions per TRX than the burn rate does.
Energy: Where the Real Cost Lives
A USDT TRC-20 transfer consumes approximately 65,000 energy. That number comes from the EVM-compatible bytecode execution inside the TRON Virtual Machine: storage reads and writes to the contract's balance mapping, the event emission for the Transfer log, and internal safety checks. The exact figure can vary slightly depending on whether storage slots are being written for the first time (cold) versus updated (warm), but 65,000 is the standard figure for a typical USDT transfer between two active addresses. A transfer to a recipient whose USDT balance is currently zero roughly doubles to around 130,000 energy because a new storage slot is allocated.
Energy has two sources: your own staked TRX, or rented (delegated) energy from a third party. Staking TRX gives you a proportional share of the network's total energy pool, and the pool regenerates linearly back to 100% over 24 hours. The exact ratio of energy per staked TRX depends on the total network-wide staked amount and shifts over time. Recovering 65,000 energy from your own stake alone requires a significant amount of TRX locked up, which is why energy rental exists.
What Happens When Energy Runs Out
If a transaction needs 65,000 energy and your account doesn't have enough available, the network doesn't silently process a partial execution. Instead, it checks the transaction's fee_limit and burns TRX from your account, up to that limit, to cover the energy shortfall, then executes the full transaction. If the shortfall would exceed your fee_limit, the transaction fails before any state changes are committed.
This is the scenario you want to avoid: paying both for your staked energy and for burned TRX on top, or worse, failing the transaction outright because fee_limit was set too low. You can check the current TRX cost for covering 65,000 energy on the pricing page before committing to a strategy.
Stake 2.0 Changed How Delegation Works
Before Stake 2.0 (activated on mainnet in April 2023), staking and delegation were intertwined: the resource owner called freezeBalance and specified a receiver address directly, the freeze was bound to that receiver, and the model didn't have the flexibility needed for resource markets.
Stake 2.0 introduced freezeBalanceV2 and separated the staking action from the delegation action. You now stake TRX into a personal energy or bandwidth pool, then delegate that resource separately via delegateResource. This means:
- Delegations are revocable by default and can be reassigned without unstaking. There's an optional
lockflag: setting it to true holds the delegation for at least the network's minimum lock period (currently 3 days). Without that flag, you can pull the delegation back at any time. - The 14-day unfreeze waiting period applies to the underlying TRX stake when you withdraw it, not to the delegation itself.
- Energy rental platforms can cycle delegations across many recipient addresses from a single staked position.
On-chain, when a rental platform like tronenergyrent.com delegates energy to your address, the delegated amount is reflected in your account state, visible via wallet/getaccount as acquired_delegated_frozenV2_balance_for_energy. The corresponding usable energy shows up against your account's energy limit and is immediately spendable without any action on your end.
Rental Costs vs. Burn Costs
Rental is priced per duration tier: 1 hour, 1 day, 3 days, 30 days. The 1-hour tier is the cheapest in absolute TRX, the 30-day tier is the most expensive, with 1-day and 3-day in between. The pricing reflects how long the platform's underlying TRX stake is locked to your address: longer windows = more capital tied up = more TRX charged. For current per-tier numbers in TRX, see pricing.
Compared to burning, rental almost always wins for senders who plan ahead. Burning the full 65,000 energy at the network's dynamic rate is straightforward but exposed to whatever the current burn cost happens to be, which can move sharply when total network energy demand shifts. Rental gives you a fixed TRX cost at order time.
The Resource Priority Order During Execution
When a transaction executes, the VM draws energy in a specific order:
- Energy backed by resources delegated to your address by other accounts
- Energy from your own staked TRX
- TRX burned from your account to cover any remaining shortfall (capped by
fee_limit)
This ordering matters for rental strategies. Delegated energy is consumed before your own stake. So if you have both your own staked energy and rented energy, the rented portion is drawn from first. Once the rental window expires and the delegation is reclaimed, your account falls back to its own staked balance or, if that's not enough, to TRX burn.
Bandwidth follows the same priority: free daily allocation first, then staked bandwidth, then TRX burn. There's no cross-resource substitution; you can't use spare energy to cover a bandwidth shortfall.
Reading Your Account's Resource State On-Chain
The TRON API endpoint wallet/getaccountresource returns a JSON object with the fields you should know:
EnergyLimit: total energy currently available to your account from your own stakeEnergyUsed: energy consumed in the current 24-hour windowTotalEnergyLimit: network-wide total energy (useful for calculating the stake-to-energy ratio)TotalEnergyWeight: network-wide total staked weight for energyfreeNetLimit: your free daily bandwidth allowance (typically 600)NetLimit: bandwidth from your own staked TRXNetUsed: bandwidth consumed todayTotalNetLimit,TotalNetWeight: network-wide totals for bandwidth
To see how much energy has been delegated to your address by others, query wallet/getaccount and read the acquired_delegated_frozenV2_balance_for_energy field. For per-delegator detail, including any lock expiry, use wallet/getdelegatedresourcev2.
If you're building a system that sends TRC-20 transfers programmatically, polling these endpoints before broadcasting lets you detect low-energy conditions before they cause unexpected TRX burns. The API docs cover how to integrate resource checks and energy ordering into automated workflows.
Why Token Contracts Vary in Energy Consumption
USDT's 65,000 energy figure is specific to the Tether contract at TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Other TRC-20 contracts will differ. A token contract with additional logic (fee-on-transfer mechanics, allowance checks for routers, or event emissions for multiple topics) will consume more energy per call. A minimal ERC-20-style contract might come in under 30,000.
The only reliable way to know a contract's actual energy cost is to simulate the transaction or look at historical execution records for that specific contract on a block explorer. Don't apply the USDT figure universally to all TRC-20 tokens.