ERC-20
The dominant Ethereum token standard for fungible tokens. ERC-20 defines a common set of functions (transfer, balanceOf, approve) that wallets and dApps rely on to interact with any compliant token.
What ERC-20 defines
ERC-20 specifies a small set of required functions every fungible token contract must implement:
totalSupply()— total tokens in existence.balanceOf(address)— balance for a given address.transfer(to, amount)— send tokens from caller to another address.transferFrom(from, to, amount)— spend tokens approved for use by caller.approve(spender, amount)— authorize another address to spend on caller's behalf.allowance(owner, spender)— check approved spending limits.
Plus two events (Transfer, Approval) that wallets and indexers use to track activity.
Every wallet, DEX, lending protocol, and indexer is built around this interface. A new ERC-20 token deployed today works with all this infrastructure automatically — that's the standard's main value.
What ERC-20 doesn't standardize
A few choices remain up to each contract:
- Decimals — most tokens use 18 (matching ETH); USDC and USDT use 6; WBTC uses 8. The decimal count is part of the interface but not standardized across tokens.
- Symbol and name — readable strings but not globally unique. Multiple tokens can claim the same symbol.
- Mintability and burnability — some tokens are fixed-supply; some allow minting (often controlled by an owner or governance); some have burn mechanics.
- Fee-on-transfer logic — some tokens deduct a fee on every transfer (a "rebase" or "tax" token). These break naive integrations because the amount received is less than the amount sent.
Famous ERC-20s
A few that shaped crypto:
- USDC, USDT — the dominant stablecoins. Hundreds of billions of supply combined.
- DAI — MakerDAO's decentralized stablecoin.
- WBTC — wrapped Bitcoin; brings BTC into Ethereum's ecosystem.
- UNI, AAVE, MKR, COMP — major DeFi governance tokens.
- LINK — Chainlink's token.
- stETH — Lido's liquid staking token.
The approval pattern and risks
The two-step "approve, then transferFrom" pattern lets contracts pull tokens from users when needed (for DEX swaps, staking, etc.). The downside: malicious or compromised contracts with broad approvals can drain wallets.
Common best practices:
- Approve specific amounts, not unlimited. Many wallets default to "infinite approval" which is convenient but riskier.
- Revoke unused approvals. Tools like revoke.cash let users see and remove old approvals.
- Permit (ERC-20 with EIP-2612) — newer pattern using off-chain signatures instead of separate approve transactions. Saves gas and reduces some attack surface.
Beyond Ethereum
ERC-20 was Ethereum's standard, but the same interface has been adopted across most EVM-compatible chains: Polygon, Arbitrum, Optimism, Base, BNB Chain, Avalanche. Tokens with the same name often exist on multiple chains, bridged between them or natively issued on each.
Non-EVM chains have their own equivalents: SPL on Solana, TIP-20 / TRC-20 on Tron, Aptos and Sui have Move-native standards. Each is functionally similar but not directly interoperable without a bridge.
Why ERC-20 has been so durable
The standard hasn't been substantially revised since 2015. Newer proposals (ERC-777, ERC-1363) added features but didn't displace ERC-20 in practice. The simplicity is the strength: every wallet supports it; every dApp expects it; new infrastructure is built assuming it. Network effects have entrenched the standard well past where its technical limitations would otherwise have led to replacement.
The standard's age is itself a feature for institutional adoption — there's a decade of audits, exploits, and learnings around it that newer standards don't have.