<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Overtron Blog: TRON energy & USDT fees]]></title><description><![CDATA[How TRON energy works, why a USDT transfer burns 6.5 TRX, and how to pay about 2.2 TRX instead. Notes from the Overtron team on wallets, payments and fees.]]></description><link>https://overtron.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ac80815a0a8c2f5ddbbdd3d/f2ef4d13-f9a6-4ed9-8bb8-cb4cbd8de115.png</url><title>Overtron Blog: TRON energy &amp; USDT fees</title><link>https://overtron.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:15:29 GMT</lastBuildDate><atom:link href="https://overtron.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[USDT TRC-20 fee in 2026: the formula, live parameters and a TronWeb check]]></title><description><![CDATA[The USDT TRC-20 fee is energy x getEnergyFee + bandwidth x getTransactionFee. Live parameters, 64,285 vs 130,285 energy, and a TronWeb check before you…]]></description><link>https://overtron.hashnode.dev/usdt-trc20-fee-formula-tronweb</link><guid isPermaLink="true">https://overtron.hashnode.dev/usdt-trc20-fee-formula-tronweb</guid><category><![CDATA[tron]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[Cryptocurrency]]></category><category><![CDATA[Web3]]></category><category><![CDATA[fintech]]></category><dc:creator><![CDATA[Anton Krylov]]></dc:creator><pubDate>Sat, 31 Oct 2026 16:50:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ac80815a0a8c2f5ddbbdd3d/319dc47a-e292-47fe-b997-a36daebcf42c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ask ten people what a USDT TRC-20 transfer costs and you will get ten numbers: "about 1 dollar", "6.5 TRX", "13 TRX", "27 TRX". Most of them were true at some point. The fee on TRON is not a fixed price tag. It is a product of two resources and two network parameters, and once you know the formula you can recompute it on any date without trusting anyone's screenshot, including ours.</p>
<h2>The formula</h2>
<p>TRON does not charge a percentage of the amount. Sending 10 USDT and 100,000 USDT costs the same. What you pay for is the resources the transaction consumes:</p>
<pre><code>fee (sun) = energy_used × getEnergyFee + bandwidth_used × getTransactionFee
1 TRX = 1,000,000 sun
</code></pre>
<ul>
<li><strong>Energy</strong> is consumed by executing the USDT smart contract.</li>
<li><strong>Bandwidth</strong> is the size of the transaction in bytes.</li>
<li>If the sending address holds neither resource, the node burns TRX at the current rates.</li>
</ul>
<p>Both rates are chain parameters that the TRON committee can change by vote. The energy price has moved over the years and currently sits at 100 sun per unit; bandwidth costs 1,000 sun per byte. You can read the live values with one request, no API key needed:</p>
<pre><code class="language-bash">curl -s https://api.trongrid.io/wallet/getchainparameters
</code></pre>
<p>Look for <code>getEnergyFee</code> and <code>getTransactionFee</code> in the response.</p>
<h2>How much energy one USDT transfer needs</h2>
<p>This part is set by the USDT contract, not by the network, and it has two cases:</p>
<table>
<thead>
<tr>
<th>Recipient address</th>
<th>Energy used</th>
<th>Burned at 100 sun</th>
</tr>
</thead>
<tbody><tr>
<td>Already holds USDT</td>
<td>64,285</td>
<td>≈ 6.43 TRX</td>
</tr>
<tr>
<td>Has never held USDT</td>
<td>130,285</td>
<td>≈ 13.03 TRX</td>
</tr>
</tbody></table>
<p>The second case is almost double because the contract has to create a new storage slot for the recipient's balance instead of updating an existing one. Bandwidth adds about 345 bytes, which is usually free: every activated address gets 600 free bandwidth units per day, enough for roughly one transfer.</p>
<p>We wrote a separate breakdown of the empty-recipient case here: <a href="https://overtron.io/en/blog/usdt-transfer-empty-wallet-double-energy?utm_source=hashnode&amp;utm_medium=article">why a USDT transfer to an empty wallet needs double energy</a>.</p>
<h2>Check it from code before you send</h2>
<p>You do not need to guess which row of the table applies. A dry run of <code>transfer()</code> through <code>triggerConstantContract</code> returns the exact <code>energy_used</code> without signing or spending anything, and <code>getAccountResources</code> tells you how much energy and free bandwidth the sender already has.</p>
<pre><code class="language-js">const { TronWeb } = require('tronweb');

const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io' });
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';

async function estimateUsdtTransfer(from, to, amountUsdt) {
  const params = [
    { type: 'address', value: to },
    { type: 'uint256', value: Math.round(amountUsdt * 1e6) },
  ];

  // Dry run of transfer(): nothing is signed or broadcast
  const sim = await tronWeb.transactionBuilder.triggerConstantContract(
    USDT, 'transfer(address,uint256)', {}, params, from
  );
  const energyNeeded = sim.energy_used;

  // What the sender already has
  const res = await tronWeb.trx.getAccountResources(from);
  const energyAvailable = (res.EnergyLimit || 0) - (res.EnergyUsed || 0);
  const freeBandwidth = (res.freeNetLimit || 0) - (res.freeNetUsed || 0);

  const missingEnergy = Math.max(0, energyNeeded - energyAvailable);
  const burnTrx = (missingEnergy * 100) / 1e6; // 100 sun = current getEnergyFee

  return { energyNeeded, energyAvailable, freeBandwidth, missingEnergy, burnTrx };
}
</code></pre>
<p>If <code>energyNeeded</code> comes back around 130K, the recipient has never held USDT and the transfer will cost double. If <code>missingEnergy</code> is zero, nothing will be burned for the contract call. Replace the hardcoded <code>100</code> with the live <code>getEnergyFee</code> value if you want the script to survive the next parameter change.</p>
<h2>Why your wallet shows a different number</h2>
<p>A few things make real-world fees drift from the table:</p>
<ul>
<li><strong>Partial energy.</strong> If you have 40K energy and the transfer needs 64,285, the node burns TRX only for the missing part.</li>
<li><strong>Free bandwidth already spent.</strong> A second or third transfer in a day adds about 0.35 TRX for bytes.</li>
<li><strong>Exchange withdrawals.</strong> Exchanges set their own flat withdrawal fee; it is a business decision, not the network price.</li>
<li><strong>Old articles.</strong> Figures like 13–27 TRX for an ordinary transfer date back to a higher energy price.</li>
</ul>
<h2>Paying less than the formula</h2>
<p>Burning TRX is the most expensive way to pay. The formula above gives you the upper bound. Two other routes exist:</p>
<ol>
<li><strong>Stake TRX</strong> under Stake 2.0 and get energy back daily. This works if you can lock up capital and send regularly.</li>
<li><strong>Rent energy</strong> for a short window. It is delegated to your address, the USDT contract consumes it instead of burning TRX, and nobody needs your private key.</li>
</ol>
<p>As of today on <a href="https://overtron.io/en?utm_source=hashnode&amp;utm_medium=article">Overtron</a>, 65K energy for 15 minutes costs 2.26 TRX against about 6.5 TRX burned, and 131K energy for a transfer to an empty address costs 4.56 TRX against about 13.1 TRX. Energy usually arrives within 10 to 60 seconds. The rate changes with the market, so treat these as a snapshot and check the current price before you pay.</p>
<p>If you prefer Telegram, the same rental is available in the bot: <a href="https://t.me/overtronbot?start=utm_hashnode">@overtronbot</a>.</p>
<h2>A one-minute recipe</h2>
<ol>
<li>Query <code>wallet/getchainparameters</code> and note <code>getEnergyFee</code> and <code>getTransactionFee</code>.</li>
<li>Simulate <code>transfer()</code> with <code>triggerConstantContract</code> to get <code>energy_used</code> for your recipient.</li>
<li>Subtract the energy you already have (<code>getAccountResources</code>).</li>
<li>Multiply the missing energy by <code>getEnergyFee</code>, divide by 1,000,000 to get TRX.</li>
<li>Add bandwidth × <code>getTransactionFee</code> if your 600 free daily units are gone.</li>
<li>Compare the result with the cost of renting the missing energy.</li>
</ol>
<p>That is the whole fee model. Everything else is rounding and marketing.</p>
<hr />
<p><em>Originally published at <a href="https://overtron.io/en/blog/usdt-trc20-transfer-cost-2026">overtron.io</a>.</em></p>
]]></content:encoded></item></channel></rss>