RUDashboard

How USDT (TRC-20) Transfer Fees Are Calculated on TRON

Wallets show you one figure and call it the fee. TRON does not work that way — it bills three things separately, under rules you can read off the chain yourself. Once you can compute it, the number stops moving unexpectedly.

The formula

Total cost = Energy consumed × the Energy price, plus transaction bytes × the Bandwidth price, plus an activation fee if the destination address has never existed on-chain. Each term is zero if you hold enough of the corresponding resource.

ChargeParameterCurrent value
EnergygetEnergyFee100 sun = 0.0001 TRX per unit
BandwidthgetTransactionFee1,000 sun = 0.001 TRX per byte
Free BandwidthgetFreeNetLimit600 points per day
Activating a new accountgetCreateNewAccountFeeInSystemContract1,000,000 sun = 1 TRX

These are governance parameters, not constants. The Energy price in particular has been lowered by vote several times. Read them live rather than trusting a table in an article — the next section shows how.

Reading the parameters yourself

Every value above is public. Call getchainparameters on any TRON node and you get the current set back as key-value pairs, in sun.

  1. Query the wallet/getchainparameters endpoint on a public node.
  2. Find getEnergyFee in the response. Divide by 1,000,000 to convert sun into TRX per unit of Energy.
  3. Do the same for getTransactionFee — that is your price per byte of Bandwidth.
  4. If either has changed since you last checked, every cost estimate downstream of it changed too.

The Energy term

Energy is the dominant charge, and the only one that depends on who you are sending to rather than what you are sending.

  • A transfer to an address that already holds USDT consumes roughly 64,285 Energy — about 6.43 TRX at the current price.
  • A transfer to an address that has never held USDT consumes roughly 130,285 Energy — about 13 TRX — because the contract must allocate a new storage slot.
  • The amount of USDT you send has no effect. Ten dollars and a hundred thousand dollars cost the same.

For an exact figure rather than a rule of thumb, simulate the call. A triggerconstantcontract request against the USDT contract with your real sender and recipient returns energy_used without broadcasting anything. Multiply that by the Energy price and you have the precise cost of that specific transfer.

The Bandwidth term

Bandwidth is charged on the serialised size of the transaction. A TRC-20 transfer runs about 345 bytes, so it needs about 345 Bandwidth.

Every account receives 600 free Bandwidth per day. That covers the first transfer and leaves too little for a second, which is why the daily pattern of failures tends to start on transfer number two. Beyond the allowance you pay 0.001 TRX per byte — about 0.345 TRX for a transfer.

The activation term

A TRON address does not exist on-chain until something is sent to it. Creating it costs 1 TRX, charged to the sender, on top of the Energy and Bandwidth for the transfer itself.

This is a property of the destination address, not of USDT. It applies once per address, ever, and it catches people paying a brand-new wallet for the first time.

Worked totals

CaseEnergyBandwidthActivationTotal
Regular recipient, first transfer of the day~6.43 TRXfree~6.43 TRX
Regular recipient, later the same day~6.43 TRX~0.35 TRX~6.78 TRX
First-time USDT recipient~13 TRXfree~13 TRX
Brand-new, never activated address~13 TRXfree1 TRX~14 TRX
Any of the above, with rented Energyrental pricefree or ~0.35 TRXas abovewell below burning

The last row is the point of renting: the Energy term is the large one, and it is the only term you can meaningfully reduce.

One number wallets show that is not a fee

Wallets ask you to set a fee_limit before signing a contract call. It is a ceiling on what you are willing to spend, not a charge — you are billed for what execution actually consumes.

Setting it too low causes the transaction to stop mid-execution and fail while still taking what it burned. Setting it generously costs nothing if the call succeeds, which is why a comfortable limit is almost always the right choice.