<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex</title>
    <description>The latest articles on DEV Community by Alex (@tenergyme).</description>
    <link>https://dev.to/tenergyme</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4220620%2Fba29ef5a-efd9-4b4c-8e5c-30d241690c8d.jpg</url>
      <title>DEV Community: Alex</title>
      <link>https://dev.to/tenergyme</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tenergyme"/>
    <language>en</language>
    <item>
      <title>We kept switching TRON energy providers to save on USDT fees. Then we built a router</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Tue, 03 Nov 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/tenergy/we-kept-switching-tron-energy-providers-to-save-on-usdt-fees-then-we-built-a-router-3e7c</link>
      <guid>https://dev.to/tenergy/we-kept-switching-tron-energy-providers-to-save-on-usdt-fees-then-we-built-a-router-3e7c</guid>
      <description>&lt;p&gt;Our team worked on a project that processed customer payments and handled daily outgoing USDT (TRC-20) transfers. For the first year, a surprising share of our engineering time didn't go into the project itself, but into one tedious question: which provider should we buy TRON energy from this month?&lt;/p&gt;

&lt;p&gt;This is how that went, what it taught us, and why we ended up building a separate service for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a USDT transfer on TRON is not free
&lt;/h2&gt;

&lt;p&gt;A TRC-20 transfer runs a smart contract, and TRON meters contract execution in &lt;strong&gt;energy&lt;/strong&gt;. If the sending address has no energy, the network burns TRX instead, at the chain parameter &lt;code&gt;getEnergyFee&lt;/code&gt; — 100 SUN per unit of energy today (1 TRX = 1,000,000 SUN).&lt;/p&gt;

&lt;p&gt;How much energy a USDT transfer needs depends on the recipient, not the sender:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recipient&lt;/th&gt;
&lt;th&gt;Energy per USDT transfer&lt;/th&gt;
&lt;th&gt;Burned without energy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;already holds USDT&lt;/td&gt;
&lt;td&gt;64,285&lt;/td&gt;
&lt;td&gt;≈ 6.43 TRX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;holds no USDT (new or emptied address)&lt;/td&gt;
&lt;td&gt;130,285&lt;/td&gt;
&lt;td&gt;≈ 13.03 TRX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At a few hundred transfers a day, this was a real cost for the project. The usual fix is to &lt;strong&gt;rent&lt;/strong&gt; energy: a provider delegates energy to your address for a short window (an hour is typical), you broadcast the transfer, and the delegation ends. Renting that same 65k energy costs a fraction of burning TRX directly.&lt;/p&gt;

&lt;p&gt;Straightforward enough in theory. The hard part is choosing whom to rent from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provider #1, #2, #3… and back to #2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;iTRX.&lt;/strong&gt; Our first provider. At first we topped up the balance by hand, later we automated it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TronZap.&lt;/strong&gt; It became cheaper, so we added it and moved orders there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FeeSaver.&lt;/strong&gt; Cheaper again. It became our main provider for most of the first half of 2026. At the time it took orders only through its API or its Telegram bot, with no web interface, so for one-off manual transfers we kept using TronZap in the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TronZap, again.&lt;/strong&gt; Its price dropped below FeeSaver's, so we switched back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netts.&lt;/strong&gt; An aggregator that showed offers from several suppliers. Rates were generally competitive, though buying directly from some of its upstream suppliers, such as CatFee or SoHu, was occasionally cheaper. Once Netts added its own stake, it sometimes came out ahead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these providers did anything wrong. The market simply moves, and each switch was the right call at the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the switching actually cost
&lt;/h2&gt;

&lt;p&gt;The price difference was the visible part. The invisible part was everything around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A new integration every time.&lt;/strong&gt; Each provider has its own API, its own order states and its own error codes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A balance in every service.&lt;/strong&gt; Each provider requires a prepaid balance, meaning capital was fragmented across multiple services, each needing dedicated refill jobs and alerts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One provider for automated backend jobs, another for manual operations.&lt;/strong&gt; The cheapest provider had no web interface for ad-hoc transfers, so manual payouts went through a second service with its own balance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prices change by the hour.&lt;/strong&gt; The cheapest provider at 03:00 UTC is often not the cheapest at 15:00. Monitoring quotes manually doesn't scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outages.&lt;/strong&gt; When a provider runs out of energy at peak time, transfers either wait or burn TRX. Every integration needed a fallback anyway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The price spread is substantial. At the time of writing, the quotes for one hour of 65,000 energy across the providers we track ranged from &lt;strong&gt;28 to 67 SUN per unit&lt;/strong&gt; — about 1.8 TRX at the bottom, 4.4 TRX at the top, for the same transfer.&lt;/p&gt;

&lt;p&gt;At some point we noticed we were dedicating more engineering bandwidth to energy logistics than to the project itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving it once
&lt;/h2&gt;

&lt;p&gt;So we stopped choosing a provider and started routing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Poll each provider's API for rates every minute.&lt;/li&gt;
&lt;li&gt;For each order, pick the cheapest provider that can fill that amount right now.&lt;/li&gt;
&lt;li&gt;If it fails or runs out, send the order to the next one automatically.&lt;/li&gt;
&lt;li&gt;Check the delegation on chain before the transfer goes out.&lt;/li&gt;
&lt;li&gt;Keep one balance instead of one per provider.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two lessons shaped the design. First, &lt;strong&gt;keep your existing code&lt;/strong&gt;: most teams already integrate with an existing provider API, so the router accepts the request formats of 22 popular services — switching means changing only the base URL and API key. Second, &lt;strong&gt;never trust an order status alone&lt;/strong&gt;: the only proof that energy arrived is the delegation on chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you send USDT on TRON, check these five things
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read the recipient's USDT balance first.&lt;/strong&gt; It determines whether the transfer requires ~65k or ~131k energy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rent per transfer, not per day&lt;/strong&gt;, unless your volume is steady around the clock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark pricing during your actual peak volume hours&lt;/strong&gt;, rather than spot-checking at arbitrary times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep a second provider configured&lt;/strong&gt;, so an outage never turns into burned TRX.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify the delegation on chain&lt;/strong&gt; before you broadcast the transfer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where this ended up
&lt;/h2&gt;

&lt;p&gt;We eventually extracted this router into a standalone service, TEnergy, so other teams handling USDT payouts wouldn't have to reinvent provider routing. The live price board and the API docs are at &lt;a href="https://tenergy.me" rel="noopener noreferrer"&gt;tenergy.me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To cover server infrastructure and the prepaid balances we keep at every provider, our pricing is pass-through: you pay the rate of the provider that fills the order, plus a routing fee of 2–5% depending on your 30-day volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the dev.to community:&lt;/strong&gt; open &lt;a href="https://tenergy.me/?promo=DEVTO3&amp;amp;utm_source=devto&amp;amp;utm_medium=article" rel="noopener noreferrer"&gt;tenergy.me/?promo=DEVTO3&lt;/a&gt; or enter promo code &lt;code&gt;DEVTO3&lt;/code&gt; in the dashboard (&lt;em&gt;Top up → Promo code&lt;/em&gt;) to set the routing fee to 3% for your first 30 days.&lt;/p&gt;

&lt;p&gt;We have more material than fits here: on-chain data on how much TRX the network burns every day and who actually supplies the energy, and what we learned building gasless USDT and contracts for cheap account activation and payout splitting. If any of it would be useful to you, let us know and we'll write it up.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: we build TEnergy. Energy figures: mainnet chain parameter &lt;code&gt;getEnergyFee&lt;/code&gt; and measured USDT transfers; price range: TEnergy price board at the time of writing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>api</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
