Move ERC-20 Tokens on Ethereum When You Have 0 ETH
USDT, USDC or an airdrop on Ethereum mainnet and zero ETH? Why stablecoins cannot pay L1 fees, how to size the top-up from live coverage, and the non-KYC way to unstick the address.
You cannot move USDT, USDC or any other ERC-20 on Ethereum mainnet from an ordinary wallet until that address holds enough native ETH for gas. The token cannot pay mainnet fees. Send a small ETH top-up to the same address on chain ID 1, for example from a non-KYC gas station paid with Monero or Lightning, wait for Etherscan to confirm it, then retry the transfer or approval.
What makes mainnet different from the layer-2 guides is cost. Advice written for Base or Arbitrum, where a few cents of gas covers dozens of transactions, does not carry over. This guide covers how wallets end up token-rich and ETH-broke on layer 1, how to size the top-up for the exact action, and which fixes waste money or privacy.
Mainnet rule: ERC-20s never pay gas on a normal wallet
Ethereum charges every transaction fee in ETH. USDT, USDC, WETH and airdropped tokens are ERC-20 contracts: inventory in the wallet, not fuel for it. On an ordinary externally owned account, which is what MetaMask, Rabby and most hardware wallets use, there is no setting that makes the token pay its own fee.
When the ETH balance is below the estimated fee, MetaMask greys out Confirm with ethereum insufficient funds for gas, and other wallets show a similar error. Nothing is broken; the wallet simply has nothing to pay the fee with.
How wallets end up token-rich and ETH-broke on layer 1
An exchange withdrawal of USDT as an ERC-20 delivers the token and no ETH. An airdrop lands in an address that was never funded. Someone bridged their ETH out to a layer 2 and left tokens behind. Or the last ETH went on a failed transaction and a token balance is now stranded. In each case Etherscan shows the tokens, the ETH line reads zero, and usdt stuck ethereum 0 eth is the search that follows.
Fee reality: size the top-up for the job
Mainnet is the expensive chain in the 1gwei.dev set, so the amount matters more here than anywhere else.
Transfer vs approve vs DEX swap
A plain ERC-20 transfer is the cheapest token action. An approval costs roughly the same again, and a DEX swap usually costs several times a transfer because it runs more contract code; approve ERC-20 gas cost plus swap is the most expensive path. Moving the tokens to another wallet you control, then deciding what to do with them, is often the cheapest way out.
Read the live numbers, not a remembered price
Mainnet fees move with demand, hour to hour. Your wallet's fee estimate for the exact action and the coverage table in the checkout, which reads the live gas price on chain ID 1 and shows how many sends, token transfers and swaps each amount covers, are the only reliable guides. Pick the preset that covers your action with a margin.
Why layer-2 advice misleads here
On Arbitrum, Base or Robinhood Chain the smallest preset covers dozens of transactions. On Ethereum it may cover only a few. Buying the amount a layer-2 guide suggests is the most common reason a mainnet unstick fails on the first try.
Fixes that waste money or privacy
Buying $50 of ETH on an exchange for one transfer
It works, but it means KYC, minimum purchase sizes, a withdrawal fee and sometimes a withdrawal hold, and the exchange now records your identity next to the address.
XMR→ETH swap minimums
Instant swap services set minimum trade sizes that are usually far above what one transfer needs, and their network fees are charged on top. A gas station built for small amounts is a better fit.
Sending ETH from your primary wallet
Fast and cheap, but it links the two addresses on-chain permanently. If the stuck wallet was meant to be separate, this undoes that.
Non-KYC path: micro mainnet ETH via 1gwei.dev
1gwei.dev is a mainnet gas station that sells ETH in amounts sized for real layer-1 fees, from 0.00005 to 0.01 ETH, with presets of 0.0002, 0.0005 and 0.001 ETH. Open the Ethereum gas page, paste the address that holds the tokens, pick the amount from live coverage, and pay the Monero or Lightning invoice. The ETH is sent from the operator's hot wallet within about a minute of the payment confirming.
You can also pay with Base USDC through x402, even from a wallet with no Base ETH, and still receive mainnet ETH. That payment is public on BaseScan and links the paying address to the order; Monero or Lightning do not.
Verify on Etherscan, then move the tokens
Open the order's explorer link or the address on etherscan.io and check that the ETH arrived on Ethereum mainnet, chain ID 1. If the wallet still shows zero, it is set to another network; switch it to Ethereum. Then reject any old pending draft in the wallet and start the transfer again so the fee is estimated fresh.
A common mistake in the other direction: ETH that arrived on Base, Arbitrum or Robinhood Chain does not pay mainnet fees. The address is the same but the balances are separate.
Mainnet vs layer 2: pick the matching guide
If the tokens are not on Ethereum mainnet, the fix is the same idea with a different gas token and a much smaller amount: ETH on Arbitrum, Base or Robinhood Chain, POL on Polygon, HYPE on HyperEVM, BNB on BNB Chain, or test ETH on Sepolia. Check the network in the explorer first, then use the guide for that chain.
Questions people ask
How do I move USDT on Ethereum if I have zero ETH?
Put enough native ETH for gas on that same address on chain ID 1 first. USDT is an ERC-20 and cannot pay mainnet fees. A non-KYC gas station paid with Monero or Lightning can send the ETH; wait for Etherscan to confirm it, then retry.
How much ETH do I need to move one ERC-20?
Enough for your wallet's fee estimate for that exact action with a margin. A transfer is cheapest, an approval similar, a swap several times more. Mainnet fees change continuously, so use the wallet estimate and the live coverage on 1gwei.dev rather than a remembered amount.
Can I use ETH sitting on Base or Arbitrum for mainnet gas?
No. Balances on other chains are separate even at the same address. You need ETH on Ethereum mainnet, chain ID 1, specifically.
Why not just swap some of the USDT for ETH?
Because the swap is itself a transaction that needs ETH for gas, and it usually needs an approval first. With zero ETH the wallet cannot start either.
Can I buy mainnet ETH with Monero without a swap service?
Yes. On 1gwei.dev you pay a Monero invoice and the operator's hot wallet sends ETH on mainnet. Nothing is swapped on-chain, and the amounts start far below typical XMR→ETH swap minimums.
The top-up arrived but MetaMask still says insufficient funds. Why?
Either the wallet is on another network, or the amount is below the current fee estimate for that action. Check the network, reject the stale pending draft, and compare the estimate with your ETH balance.