Ethereum Gas Fees by Transaction Type
At 0.11 gwei (standard) and ETH ≈ $2,029, a plain ETH transfer costs $0.0048, a stablecoin transfer about $0.013, a Uniswap swap about $0.034, and an NFT mint around $0.034. The table below shows live cost across all three priority tiers for every common action.
Updated 2026-05-31 01:32 UTC. Gas-unit values are medians observed in production — methodology.
| Action | Gas units | Standard | Fast | Rapid |
|---|---|---|---|---|
ETH transfer Transfers | 21,000 | $0.0048 | $0.0053 | $0.017 |
Transfers | 55,000 | $0.013 | $0.014 | $0.045 |
ERC-20 approval (approve / permit2 sign) DeFi | 45,000 | $0.010 | $0.011 | $0.037 |
DeFi | 150,000 | $0.034 | $0.038 | $0.123 |
NFTs | 150,000 | $0.034 | $0.038 | $0.123 |
L2 | 130,000 | $0.030 | $0.033 | $0.107 |
Aave V3 supply DeFi | 200,000 | $0.046 | $0.051 | $0.165 |
Lido stake (stETH) DeFi | 110,000 | $0.025 | $0.028 | $0.090 |
ENS registration Wallet & infra | 280,000 | $0.064 | $0.071 | $0.230 |
Contract deployment (simple) Wallet & infra | 600,000 | $0.138 | $0.152 | $0.494 |
Speed-up / cancel (RBF) Wallet & infra | 21,000 | $0.0048 | $0.0053 | $0.017 |
WETH wrap / unwrap DeFi | 45,000 | $0.010 | $0.011 | $0.037 |
Gas limit isn't a fee — it's a ceiling
Every Ethereum transaction has two gas numbers attached: gas limit (the maximum you authorize) and gas used (what actually ran). The fee you pay is gas_used × gas_price, not gas_limit × gas_price. The limit is a circuit-breaker.
For a plain ETH transfer, this distinction is trivial — 21,000 is both the protocol minimum (intrinsic gas) and the exact usage. The transaction either runs all 21,000 or it doesn't run at all. There's no padding, no refund.
For everything else, gas_used is a function of the contract's code path through your specific input. A Uniswap swap that crosses three liquidity ticks costs more than one that crosses two. A token transfer to a fresh address (no existing balance entry) costs ~25% more than a transfer to a recipient who already holds the token. An NFT mint that triggers a redeem hook costs more than one without.
The numbers in the table are medians, not maxes — your transaction may use 10-30% more or less than shown. If it uses less, the difference is refunded back to you in the same block. If it uses more than your gas limit, the EVM reverts state but still charges you for the burned gas. That's the “out of gas” failure mode and the most expensive way to fail a transaction.
How wallets actually quote you
When MetaMask or Rabby shows you a fee estimate, it's doing four things behind the scenes:
- Estimate gas usage: calls
eth_estimateGason the target contract with your exact input. This runs the transaction in a sandbox and returns the actual gas_used. - Pad it: wallets add a 10-30% safety margin (MetaMask: ~10%, Rabby: ~25%) so the transaction has headroom if state shifts between estimation and inclusion.
- Pick a gas price: suggests three tiers — “market”, “aggressive”, and a custom option. Aggressive ≈ what miners need to include you in the next 1-2 blocks.
- Display the maximum: shows you
padded_gas × gas_price × ETH/USD. That's why the wallet number is often 15-30% above the live cost in the table above.
Practical implication: don't pay attention to the “max fee” the wallet shows. Look at the confirmed-transaction fee on Etherscan after the fact — that's your actual cost. For non-urgent transactions, switch the wallet's tier from “market” (its default) to “low” to save 30-50% on the gas-price component.
When gas estimation fails
Sometimes your wallet shows “this transaction will likely fail” and refuses to give you a fee estimate. The instinct is to bump the gas limit and try anyway. Don't. The transaction is probably broken upstream — paying for a transaction that will revert just burns money. Three common causes:
- State changed since you opened the dApp. You quoted a swap when liquidity was deep, then a big trader moved the price 0.5% past your slippage tolerance. The estimator simulates with current state and sees a revert. Fix: refresh the dApp, re-quote.
- Approval is missing or stale. You upgraded the contract but didn't re-approve. Or you have a partial allowance and the swap exceeds it. Fix: check the approval; re-approve if needed.
- Token has transfer hooks. Some tokens enforce permissioned transfer logic (allowlists, fees, pause states). The gas estimator can't always model these — it sees a revert in simulation that wouldn't happen in production, or vice versa. Fix: send a small test transaction first.
If you genuinely need to override and submit anyway — for example, the dApp is broken but you know the underlying call is valid — set the gas limit manually to the table value above with a 30% buffer. But that's a last resort. The default response to “will likely fail” is: don't submit.
Same transaction on an L2 — 5-50x cheaper
Every action in the table above runs on Arbitrum, Optimism, Base, and Polygon with the same contract interface (the major dApps deploy across all four) but at a fraction of the mainnet cost. A swap that costs $0.034 on mainnet is typically $0.05-0.50 on Arbitrum or Base. The same Uniswap router, the same swap, sometimes the same liquidity — just settled to Ethereum via a rollup batch instead of directly.
The math: an L2 transaction pays two fees in one — a tiny L2 execution component (cents) plus a fractional share of the L1 calldata-posting cost. When the rollup batches 10,000 transactions and posts them to Ethereum in one blob, your share of that L1 cost is one ten-thousandth of the full mainnet gas. EIP-4844 (blobs) dropped this further in March 2024 — most rollups now run 10-20x cheaper than they did pre-Dencun.
If you're doing anything routine — sending stablecoins, swapping, minting, bridging — start on an L2. Mainnet only when you need composability with mainnet-only contracts, are settling to a CEX that doesn't support L2 withdrawals, or are moving so much value that the bridge round-trip cost is dwarfed by the savings.
How to time the most expensive actions
Three actions in the table reliably cost more than “a normal transaction”: NFT mints (often 200k+ gas), Aave/Compound deposits (200k+), and contract deployments (600k+). For these, timing matters most. A mint at peak US trading hours can cost 5-10x the same mint at 4am UTC. Strategies:
- Check cheap gas times by day for the recurring weekly pattern.
- Use the gas fee forecast to spot the next lower-fee window in the upcoming 24 hours.
- For non-urgent expensive transactions, set a gas alert at your target gwei and wait.
- For mints and DeFi positions you'll close repeatedly, do them on an L2 — the 5-50x cost difference compounds.
Frequently asked questions
Why does an ERC-20 transfer cost more than an ETH transfer?
An ETH transfer just updates two balances in the protocol state — 21,000 gas. An ERC-20 transfer runs a contract: read the sender balance, decrement it, read the recipient balance, increment it, emit a Transfer event, do bookkeeping. That work costs roughly 2-3x more gas (~50,000-65,000 depending on the token contract).
Why does my wallet quote a higher fee than the table above?
Wallets quote the *maximum* gas they expect the transaction to consume (the gas limit), padded by 10-30% for safety. The actual fee paid is gas_used × gas_price — and gas_used is typically lower than the limit. Excess gas is refunded in the same block.
Is the live cost table on this page accurate?
Yes — it uses real-time gas prices from Ethereum RPC and the live ETH/USD price from CoinGecko, refreshed every minute. The gas-unit numbers are medians observed in production. Your actual transaction may use slightly more or less depending on the specific contract being called.
Why does a Uniswap swap cost 7x more than an ETH transfer?
A swap does seven things in one transaction: validate signature, transfer token in, look up pool state, compute the swap math (in V3 this involves walking through liquidity ticks), update pool state, transfer token out, emit events. Each step burns gas. The cheapest swap path on mainnet is roughly 130k gas — anything below that is a code-path optimization or a permit-skipping swap.
What is the cheapest type of Ethereum transaction?
A plain ETH transfer at 21,000 gas. The next cheapest is a WETH wrap/unwrap at ~45,000 gas, then a token approval at ~45,000 gas. Stablecoin transfers (USDC, USDT) sit at 50-65k. Everything else is more expensive.
Why does the same swap sometimes cost different amounts?
Two reasons: (1) gas price varies minute to minute with mainnet demand, and (2) the path the router picks can change between hops depending on liquidity. A 1-hop swap costs ~150k gas; a 3-hop multi-pool route can hit 220k+.
What does "out of gas" actually mean?
You set a gas limit too low for the transaction to complete. The work runs until the gas budget is exhausted, then the EVM reverts all state changes — but you still pay for the gas you burned. This is the most expensive way to fail a transaction. Always trust your wallet's estimate or add a buffer.
How do these costs change on Layer 2?
L2s charge fees in two parts: a cheap L2 execution component (cents) plus a share of the L1 data-posting cost (varies with mainnet gas). The whole-transaction cost on Arbitrum, Base, or Optimism is typically 5-50x cheaper than mainnet. See the live comparison on the L2 gas fees page.
Are these gas-unit numbers fixed by the protocol?
No. The 21,000 gas minimum for an ETH transfer is protocol-enforced (intrinsic gas), but every other number is determined by the specific contract code being called. A "Uniswap swap" cost will shift when Uniswap deploys a new router or pool implementation.
Related ETH gas tools and guides
Cut every fee on this page in half.
Set a gas alert at half the current gwei. We'll email you the moment mainnet drops there — every action on this page costs proportionally less.