<?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: Daniel Carter</title>
    <description>The latest articles on DEV Community by Daniel Carter (@danielcartercrypto).</description>
    <link>https://dev.to/danielcartercrypto</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%2F4161615%2Ff64ce821-6b82-4d08-a5f8-183e18b7b8b1.png</url>
      <title>DEV Community: Daniel Carter</title>
      <link>https://dev.to/danielcartercrypto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielcartercrypto"/>
    <language>en</language>
    <item>
      <title>Getting Paid in USDT as a Freelance Developer in Türkiye: Networks, Fees and Cashing Out</title>
      <dc:creator>Daniel Carter</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:09:47 +0000</pubDate>
      <link>https://dev.to/danielcartercrypto/getting-paid-in-usdt-as-a-freelance-developer-in-turkiye-networks-fees-and-cashing-out-4f40</link>
      <guid>https://dev.to/danielcartercrypto/getting-paid-in-usdt-as-a-freelance-developer-in-turkiye-networks-fees-and-cashing-out-4f40</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpls4bgz2x9io32jkw2dr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpls4bgz2x9io32jkw2dr.jpg" alt="Get paid in USDT, cash out locally in Türkiye" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of developers in Türkiye work for clients in Europe, the Gulf or the US. Payment is where things get messy: international bank transfers take days, platforms take a cut, and by the time the money lands, the exchange rate has moved. More and more freelancers now ask to be paid in USDT.&lt;/p&gt;

&lt;p&gt;This post is the practical guide I wish I had: how to pick a network, what it really costs, how to avoid the classic mistakes, and how to get from USDT back to lira.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Pick the network before you share an address
&lt;/h2&gt;

&lt;p&gt;"Send me USDT" is not enough information. USDT exists on many chains, and they are not interchangeable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Network&lt;/th&gt;
&lt;th&gt;Address looks like&lt;/th&gt;
&lt;th&gt;Typical fee to send&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TRON (TRC20)&lt;/td&gt;
&lt;td&gt;starts with &lt;code&gt;T&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;0 to a few TRX, depends on energy&lt;/td&gt;
&lt;td&gt;Most common for P2P in the region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BNB Chain (BEP20)&lt;/td&gt;
&lt;td&gt;starts with &lt;code&gt;0x&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;usually cents, paid in BNB&lt;/td&gt;
&lt;td&gt;Same address as your other EVM chains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ethereum (ERC20)&lt;/td&gt;
&lt;td&gt;starts with &lt;code&gt;0x&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;can be several dollars&lt;/td&gt;
&lt;td&gt;Rarely worth it for invoices&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Put the network in your invoice, in bold, next to the address. Something like: &lt;strong&gt;USDT on TRON (TRC20) only&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Understand what the fee actually is
&lt;/h2&gt;

&lt;p&gt;On BNB Chain you pay gas in BNB. On TRON, a USDT transfer consumes &lt;em&gt;energy&lt;/em&gt;; if you have none, the network burns TRX instead, which is why the "same" transfer can cost almost nothing or several TRX. If you send USDT often, use a wallet that can rent energy for the transfer instead of burning TRX.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnprevbps6aiwgaul3u0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnprevbps6aiwgaul3u0.jpg" alt="TRC20 vs BEP20 fees" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Keep custody of your earnings
&lt;/h2&gt;

&lt;p&gt;If the client pays straight into an exchange account, your income is only as available as that exchange's rules in your country. I prefer a self-custody wallet: a recovery phrase I hold, keys encrypted on my phone, and a PIN plus biometrics on top. Exchanges are fine for trading; your invoice address should be yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Avoid the four classic mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wrong network.&lt;/strong&gt; The client sends BEP20 to a TRC20 address (or the reverse). Always confirm the network in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No gas.&lt;/strong&gt; USDT arrives on BNB Chain but you hold no BNB, so you cannot move it. Keep a small amount of the native coin on every chain you use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address poisoning.&lt;/strong&gt; Scammers send dust from look-alike addresses so you copy the wrong one from history. Copy from your own receive screen, every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping the test.&lt;/strong&gt; For a new client, ask for a small test payment first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Cashing out to lira
&lt;/h2&gt;

&lt;p&gt;This is the step that matters most for freelancers. Options are exchanges, P2P marketplaces, or a wallet with a built-in local payment desk. With a desk, your USDT never leaves your custody until you place a sell order: you pick your country, choose a method the operator has enabled, send USDT, and receive lira to your local account. Whichever route you use, compare the rate you get to the market rate and check the current tax rules for freelance income in Türkiye.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wallet I use
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://wallet.taccoin.com/en" rel="noopener noreferrer"&gt;Taccoin&lt;/a&gt;: self-custody, one recovery phrase for Bitcoin, Ethereum, BNB Chain, Polygon, Arbitrum, Optimism, Base, Avalanche and TRON, built-in TRON energy for cheaper USDT transfers, and a local payments section that now lists Türkiye and nine European countries alongside the Arab region. Methods and rates are enabled per country, so check in the app what is live for Türkiye.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I am connected to the Taccoin project. This post is educational and not financial or tax advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>freelance</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>TRON energy explained: why the same USDT transfer costs 0 or several TRX</title>
      <dc:creator>Daniel Carter</dc:creator>
      <pubDate>Sun, 04 Oct 2026 14:27:20 +0000</pubDate>
      <link>https://dev.to/danielcartercrypto/tron-energy-explained-why-the-same-usdt-transfer-costs-0-or-several-trx-249m</link>
      <guid>https://dev.to/danielcartercrypto/tron-energy-explained-why-the-same-usdt-transfer-costs-0-or-several-trx-249m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgltksvzp2qpbadl03k1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgltksvzp2qpbadl03k1.jpg" alt="USDT TRC20 vs BEP20 network fees" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have ever built anything that moves USDT on TRON, you have hit this question from users: &lt;em&gt;"Why did my transfer cost almost nothing yesterday and several TRX today?"&lt;/em&gt; The answer is TRON's resource model, and it is worth understanding before you design fees in a wallet or payment flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bandwidth and energy
&lt;/h2&gt;

&lt;p&gt;TRON does not charge "gas" the way Ethereum does. Every transaction consumes two resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bandwidth&lt;/strong&gt; covers the raw size of the transaction. Every account gets a small free daily allowance, which usually covers simple TRX transfers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Energy&lt;/strong&gt; covers smart contract execution. USDT on TRON is a TRC20 contract, so every USDT transfer burns energy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the sender has energy (from staking TRX or from renting it), the transfer consumes that energy. If not, the network &lt;strong&gt;burns TRX&lt;/strong&gt; from the sender to pay for it. That is where the "several TRX" comes from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the cost changes per recipient
&lt;/h2&gt;

&lt;p&gt;A USDT &lt;code&gt;transfer()&lt;/code&gt; writes to the contract's balance mapping. Writing to a storage slot that already holds a value is cheaper than creating a new one. In practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending to an address that &lt;strong&gt;already holds USDT&lt;/strong&gt; costs roughly 65k energy.&lt;/li&gt;
&lt;li&gt;Sending to an address that has &lt;strong&gt;never held USDT&lt;/strong&gt; costs roughly double, because a new storage slot is created.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the same amount, from the same sender, can cost very different TRX depending on who receives it. Exact numbers drift with network parameters, so always estimate at send time rather than hard-coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for wallet UX
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Show the fee before confirmation.&lt;/strong&gt; Estimate energy for the actual recipient and convert to TRX at current prices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the TRX balance first.&lt;/strong&gt; A user with 100 USDT and 0 TRX cannot send USDT at all unless energy is provided another way. This is the single most common support ticket for TRC20 wallets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider energy rental.&lt;/strong&gt; Renting energy for a single transfer is often cheaper than burning TRX. If you integrate a rental provider, handle the case where the rental arrives late or partially.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let the payer be explicit.&lt;/strong&gt; In flows where someone else receives the funds (gifts, payouts, claimable links), decide upfront who covers energy.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A real example: claimable links
&lt;/h2&gt;

&lt;p&gt;I worked on the fee logic for &lt;a href="https://wallet.taccoin.com/en/features/send-by-link" rel="noopener noreferrer"&gt;Taccoin Wallet's send-by-link feature&lt;/a&gt;, where a sender locks USDT into a link and the receiver claims it later, possibly into a brand-new address. Because the receiver may have zero TRX and an empty address (the expensive case above), the &lt;strong&gt;sender pays the fees upfront&lt;/strong&gt;: on TRON that is a small TRX amount plus a USDT reserve for energy, quoted before the link is created. On BNB Smart Chain the equivalent is a small BNB gas reserve. The receiver gets the full amount and never needs to acquire TRX first.&lt;/p&gt;

&lt;p&gt;The general lesson: on TRON, "who pays energy, and is the recipient address new?" should be a first-class question in your design, not an afterthought.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Estimate energy per recipient, not per token.&lt;/li&gt;
&lt;li&gt;Block or warn on sends when TRX is insufficient.&lt;/li&gt;
&lt;li&gt;Prefer rented or staked energy over burning TRX for high-volume flows.&lt;/li&gt;
&lt;li&gt;Make the fee payer explicit in any flow involving a third party.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I am connected to the Taccoin project. This post was generated with AI tools. Numbers are approximate; verify current TRON network parameters before relying on them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>cryptocurrency</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Claimable crypto links: why the secret lives after the #</title>
      <dc:creator>Daniel Carter</dc:creator>
      <pubDate>Sun, 04 Oct 2026 12:54:22 +0000</pubDate>
      <link>https://dev.to/danielcartercrypto/claimable-crypto-links-why-the-secret-lives-after-the--3g1e</link>
      <guid>https://dev.to/danielcartercrypto/claimable-crypto-links-why-the-secret-lives-after-the--3g1e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsvtq0plg8myykbuiofy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsvtq0plg8myykbuiofy.jpg" alt="Sending USDT by link" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sending crypto to someone who has never installed a wallet is a surprisingly hard UX problem. You need their address, they need to pick the right network, and on chains like TRON or BNB Chain they also need a little native coin (TRX or BNB) just to move the token later.&lt;/p&gt;

&lt;p&gt;One pattern that solves this is the &lt;strong&gt;claimable link&lt;/strong&gt;: the sender creates a URL, shares it in WhatsApp or email, and whoever opens it can claim the funds. Here is how that works at the protocol level, and why the secret part of the link sits after the &lt;code&gt;#&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. An ephemeral wallet per link
&lt;/h2&gt;

&lt;p&gt;When the sender creates a link, the app generates a fresh random private key on the device (32 bytes from a CSPRNG). That key controls a brand-new, single-use address on the target chain.&lt;/p&gt;

&lt;p&gt;The sender then &lt;strong&gt;funds that address&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the transfer amount (for example USDT), and&lt;/li&gt;
&lt;li&gt;a small fee reserve, so the claim transaction can pay its own gas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On BNB Chain the reserve is a bit of BNB. On TRON it is a little TRX to activate the account plus enough to cover energy for the USDT transfer. The key point: &lt;strong&gt;the sender pays the fees up front&lt;/strong&gt;, so the receiver gets the full amount and never needs to hold a native coin.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The key travels in the URL fragment
&lt;/h2&gt;

&lt;p&gt;The link looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/r/&amp;lt;link-id&amp;gt;#k=&amp;lt;key-material&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything after &lt;code&gt;#&lt;/code&gt; is the &lt;strong&gt;fragment&lt;/strong&gt;. Browsers never send the fragment to the server in the HTTP request. That gives a nice property: the backend can store the link ID, the ephemeral address, the amount and the expiry, while never seeing the key that can spend the funds.&lt;/p&gt;

&lt;p&gt;The claim page reads &lt;code&gt;location.hash&lt;/code&gt; in JavaScript, entirely client-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Claiming = signing on the receiver's device
&lt;/h2&gt;

&lt;p&gt;When the receiver opens the link and chooses where to receive (a new wallet created on the spot, or an address they already own):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The page or app reconstructs the ephemeral key from the fragment.&lt;/li&gt;
&lt;li&gt;It builds a transfer from the ephemeral address to the receiver's address.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;signs locally&lt;/strong&gt; and hands the signed transaction to the server.&lt;/li&gt;
&lt;li&gt;The server verifies it matches the link (right amount, right destination rules, not expired, not already claimed) and broadcasts it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The server is a relay and a bookkeeper, not a custodian.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. An optional second factor
&lt;/h2&gt;

&lt;p&gt;A link in a chat is a &lt;strong&gt;bearer token&lt;/strong&gt;: whoever has it can claim. To reduce the risk of a forwarded or leaked link, the fragment can carry the key XOR-ed with a value that is only released after the receiver enters a short security code. The sender shares that code over a &lt;em&gt;different&lt;/em&gt; channel (a call, SMS, another app).&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Expiry and refunds
&lt;/h2&gt;

&lt;p&gt;Unclaimed links should not lock funds forever. After an expiry window (for example 7 days), the sender can sweep the ephemeral address back to their own wallet. Since the sender's device also kept the key, this needs no cooperation from the server beyond broadcasting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Threat model in one table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server breach&lt;/td&gt;
&lt;td&gt;Server never stores the spending key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link forwarded to the wrong person&lt;/td&gt;
&lt;td&gt;Optional security code on a second channel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Receiver has no gas&lt;/td&gt;
&lt;td&gt;Fee reserve pre-funded by the sender&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link never opened&lt;/td&gt;
&lt;td&gt;Expiry + sender refund&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link posted publicly&lt;/td&gt;
&lt;td&gt;Nothing technical helps: treat it like cash&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Real-world example
&lt;/h2&gt;

&lt;p&gt;This is the design behind send-by-link in Taccoin Wallet, the wallet I work on: USDT on TRON and BNB Chain, sender-paid fees, key in the &lt;code&gt;#k=&lt;/code&gt; fragment, optional code, 7-day expiry with refund. There is a short write-up here: &lt;a href="https://wallet.taccoin.com/en/features/send-by-link" rel="noopener noreferrer"&gt;wallet.taccoin.com/en/features/send-by-link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have built something similar (or found holes in this model), I would like to hear about it in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I work on Taccoin Wallet. This post was generated with AI tools. It is educational and not financial advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>security</category>
      <category>webdev</category>
      <category>cryptocurrency</category>
    </item>
  </channel>
</rss>
