Do You Need ETH to Send USDT or USDC? Gas for Token Transfers Explained

By Merunas Grincalaitis, founder of MEV DAO and a developer who builds MEV, sniping and trading bots on Ethereum. Last updated: October 2026.

TL;DR: Yes, by default you need ETH in the same wallet to send USDT or USDC on Ethereum, because every transaction pays its gas fee in ETH, not in the token you are moving. In our own sample a USDT transfer used about 46,000 gas, so the amount is small, but zero ETH means zero transfers. The ways around it are a wallet feature that swaps a bit of your token for gas (MetaMask calls it gas included transactions), a signature that lets someone else pay (USDC supports this, USDT on Ethereum does not), a smart account with a paymaster, or withdrawing through an exchange. If the wallet is compromised, topping it up with ETH is the one move you should not make.

People new to Ethereum ask me this a lot. They have USDT sitting in MetaMask, they hit Send, and the button is greyed out or the wallet says "insufficient funds". It feels like a bug. It isn't.

Why do you need ETH to send USDT or USDC?

Because a token transfer is a transaction, and Ethereum only accepts gas payment in ETH. USDT and USDC are not coins that live natively on Ethereum. They are ERC-20 tokens, which means each one is a smart contract that keeps a table of balances. When you "send" 100 USDC, your wallet actually sends a transaction to the USDC contract asking it to move 100 units from your row to someone else's row.

Every transaction on Ethereum pays a fee for the computation it uses. That fee is measured in gas and paid in ETH by the account that signs and sends the transaction. The token contract has no way to take its fee in USDC instead, because the fee is charged by the protocol before the contract code even runs. MetaMask's own help page puts it plainly: an "insufficient funds" error means you don't have enough of the network's native token to cover gas.

How much ETH do you need to send USDT or USDC?

Usually very little, but it depends on the gas price at that moment. When I pulled a sample of mainnet transfers for our gas guide, a plain ETH transfer always used 21,000 gas, a USDC transfer had a median of about 45,000 gas and a USDT transfer about 46,000. Multiply the gas by the current gas price (check the Etherscan gas tracker) and you get the fee.

Two practical notes from experience:

  1. Sending to a fresh address can cost more. If the recipient has never held that token, the contract has to create a new storage slot for them, which is why you see transfers at the top of the range (around 60,000+ gas) next to cheap ones.
  2. Leave a buffer. Wallets estimate the fee with a margin, and gas prices move between when you look and when you sign. If your ETH balance is exactly the estimate, the wallet may still refuse.

Why does my wallet say "insufficient funds" when I clearly have USDT?

The error is about the gas token, not the token you are sending. This catches people in three common ways:

  • You have zero ETH. The most common case. You bought USDT on an exchange, withdrew it to a self-custody wallet, and never sent any ETH along.
  • You are on a different network than you think. On Arbitrum, Base and Optimism the gas token is also ETH, but it has to be ETH on that network. On Polygon it is POL, on BNB Chain it is BNB. ETH sitting on mainnet does nothing for a USDC transfer on Base.
  • You have some ETH, just not enough. Gas prices spike during busy periods, and a balance that worked last week may fall short today.

The fix is the same for all three: get a small amount of the right native token into the same address on the same network, or use one of the workarounds below.

Can you send USDT or USDC without ETH?

Yes, there are several ways, but each one has a catch. Here is how they compare:

Method Works with USDT? Works with USDC? Who pays the gas The catch
Send a little ETH to the wallet Yes Yes You, in ETH Needs ETH from somewhere else first
MetaMask gas included transactions Yes (on supported networks) Yes You, paid in the token via MetaMask Smart Transactions must be on; MetaMask adds a small fee
Signed authorization (EIP-2612 permit or EIP-3009) No on Ethereum mainnet Yes A relayer or app Only works if an app or relayer supports it
Smart account with a paymaster (ERC-4337) Depends on paymaster Depends on paymaster The paymaster, sometimes charging you in tokens Funds must be in the smart account
Withdraw via a centralized exchange Yes Yes The exchange, which charges a withdrawal fee Only if the funds are already on the exchange

Option 1: Let the wallet pay gas from your tokens

MetaMask now has a feature it calls gas included transactions. When you send or confirm a dapp transaction, you can pick a token such as USDT, USDC or DAI to cover the network fee, and MetaMask swaps a bit of it for ETH behind the scenes. According to their docs it works on Ethereum Mainnet and several other networks, requires "Smart Transactions" and "Estimate balance changes" to be enabled, and includes a small MetaMask fee on top of gas. If your transfer is tiny, the fee can eat a noticeable chunk of it, so check the confirmation screen.

Option 2: Sign, and let someone else submit

Some tokens let you authorize a transfer with an off-chain signature instead of a transaction. EIP-2612 adds a permit function for approvals, and EIP-3009 adds transferWithAuthorization, where you sign a message and a relayer submits it and pays the gas. USDC on Ethereum supports both. USDT on Ethereum supports neither: when I called DOMAIN_SEPARATOR() on the USDT contract, the call reverted, while the same call on USDC returned a value.

This matters for safety too. A signature can move your money just like a transaction can, and drainers abuse exactly this. I wrote about that in phishing approvals that drain wallets. Only sign typed-data messages on sites you deliberately opened.

Option 3: Use a smart account with a paymaster

With ERC-4337 account abstraction, a contract called a paymaster can agree to pay gas for your operation. Some wallets sponsor gas completely, others charge you in USDC. The limitation is that it applies to funds held in a smart account, not to an ordinary wallet address (an EOA, explained in what is an EOA wallet). Since the Pectra upgrade, EIP-7702 blurs this line: an EOA can delegate to smart account code, and a different account can submit the transaction and pay the gas.

Option 4: Move through an exchange

If the tokens are on Coinbase, Binance or Kraken, a withdrawal is paid by the exchange, which takes its own withdrawal fee from your balance. If you're moving funds to a self-custody wallet, withdraw a little ETH in the same trip.

What if the wallet holding the tokens is compromised?

Then do not send ETH to it. This is the scenario where "just top it up with gas" is the worst possible advice. If your seed phrase or private key has leaked, there is very often a sweeper bot watching the address. A sweeper bot is a script that sees incoming ETH and immediately sends it out to the attacker, usually in the same block or the next one. Your tokens stay frozen because you can never keep enough ETH there long enough to pay for the transfer.

You can see this pattern on Ethereum Stack Exchange, where people ask how to send gas and transfer USDT from a hacked wallet "in one transaction". On a plain EOA you can't do it in one transaction, but you can do it atomically in one block:

  1. Use a Flashbots bundle. A bundle is an ordered group of transactions that builders include together or not at all. Transaction one sends ETH from a safe wallet to the compromised one, transaction two transfers the tokens out. The sweeper never sees the ETH in the public mempool. The Flashbots quick start covers the mechanics, and my sweeper-bot rescue guide walks through a full rescue.
  2. Use an EIP-7702 sponsored rescue. The compromised key signs an authorization, and a safe wallet submits and pays for a single transaction that moves the tokens. I compared the two approaches in EIP-7702 rescue vs Flashbots bundles.

USDC adds a third path in theory, because an EIP-3009 authorization signed by the compromised key can be submitted by your safe wallet. But the attacker holds the same key and can sign one too, so speed and privacy still decide who wins. If you're in this situation right now, start with the wallet drained checklist before anything else.

How do you avoid getting stuck without gas again?

Keep a small ETH float in every wallet you use, on every network you use. My own habit is boring and it works:

  1. When I fund a new wallet with stablecoins, I send a little ETH in the same session.
  2. I check the network badge before I panic about a missing balance.
  3. I never drain a wallet to exactly zero ETH. Most "max" buttons reserve gas, but not all.
  4. I use a wallet that can pay gas in tokens, so a forgotten float isn't a blocker.

Frequently asked questions

Do I need ETH to send USDT?

Yes. On Ethereum mainnet every USDT transfer pays its gas fee in ETH from the sending wallet, unless your wallet offers a feature that converts part of your tokens into gas for you.

Can I pay gas fees with USDC?

Not directly at the protocol level, but MetaMask's gas included transactions, ERC-4337 paymasters and relayers using USDC's EIP-3009 signatures all let you effectively pay in USDC while someone or something converts it to ETH.

Why does MetaMask say insufficient funds when I have USDT?

The message refers to the network's native token, not USDT. You need ETH (or POL on Polygon, BNB on BNB Chain) in the same address on the same network to cover the fee.

Do I need ETH to send USDC on Base or Arbitrum?

Yes, those networks also use ETH for gas, but it must be ETH bridged to that network. The fees are usually much lower than on mainnet, so a very small amount is enough.

Can someone else pay the gas for my token transfer?

Yes, if the token supports signed authorizations like USDC's EIP-3009, if you use a smart account with a paymaster, or through an EIP-7702 sponsored transaction. For USDT on Ethereum, the realistic options are your wallet's gas-in-token feature or sending ETH.

Should I send ETH to a hacked wallet to move my tokens?

No. A sweeper bot will usually take the ETH before you can use it. Use a Flashbots bundle or an EIP-7702 sponsored transaction so the gas and the transfer land together.

If you're staring at a compromised wallet with tokens you can't move because every bit of ETH disappears, that's exactly the problem our Token Rescue Bot at MEV DAO was built for. And if you just want more practical notes like this one, you can subscribe here.

← More on Compromised Wallet Rescue All articles