ERC-20 is the Ethereum technical standard that defines a common interface every fungible token contract must follow, covering how balances are read, how transfers happen, and how one account authorises another to spend on its behalf. According to the Ethereum Foundation’s developer documentation, it was proposed by Fabian Vogelsteller in November 2015 and formalised in the Ethereum Improvement Proposals repository as Ethereum Improvement Proposal 20, authored by Fabian Vogelsteller and Vitalik Buterin with a created date of 2015-11-19. It is the blueprint behind most stablecoins, wrapped assets, and governance tokens on Ethereum today.
Key Takeaways
- ERC-20 is an interface for fungible tokens on Ethereum, proposed by Fabian Vogelsteller in November 2015 and formalised as EIP-20.
- The standard defines six mandatory methods (totalSupply, balanceOf, transfer, transferFrom, approve, and allowance) plus two events (Transfer and Approval), per the Ethereum Improvement Proposals spec.
- Any token contract that implements those methods and events can be used by any wallet, exchange, or protocol that speaks the standard, without custom integration work.
- According to Etherscan, a total of 2,010,819 contracts were found on Ethereum, making this the most-deployed token standard in blockchain history.
- Stablecoins dominate the standard: according to Etherscan, Tether USD (USDT) has a circulating market cap of $185.50 billion and USD Coin (USDC) $78.60 billion on Ethereum, both issued by Tether and Circle via the ERC-20 interface.
How Does ERC-20 Work?
The Stamp-book analogy makes the standard concrete. A compliant contract behaves like a stamp book held in public. Every page lists an account and a stamp count. Moving stamps between pages and authorising someone else to tear stamps off your page are the only operations the standard needs to get right. Three core mechanics govern how it works in practice. Those are the mandatory methods, the event log entries that record every state change, and the approve-then-transferFrom pattern that powers DEX swaps and DeFi deposits.
1. The Six Mandatory Methods
Every compliant contract must implement six functions. The signatures below are taken verbatim from EIP-20.
| Method | Purpose | Signature (Solidity) |
| totalSupply | Total tokens in existence | function totalSupply() public view returns (uint256) |
| balanceOf | Tokens held by an address | function balanceOf(address _owner) public view returns (uint256 balance) |
| transfer | Move tokens from caller to a recipient | function transfer(address _to, uint256 _value) public returns (bool success) |
| transferFrom | Third-party transfer under a prior allowance | function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) |
| approve | Authorise a spender up to a limit | function approve(address _spender, uint256 _value) public returns (bool success) |
| allowance | Move tokens from the caller to a recipient | function allowance(address _owner, address _spender) public view returns (uint256 remaining) |
Source: Ethereum Improvement Proposals (EIP-20 Final)
The transfer method moves a caller-specified amount of tokens to a given address and must fire the Transfer event, and should throw if the caller’s balance is insufficient. The transferFrom method is used for a withdrawal workflow, allowing contracts to transfer tokens on your behalf, which is how a decentralized exchange like Uniswap moves tokens out of a user’s wallet during a swap without ever taking custody.
Three additional methods, name(), symbol(), and decimals(), are optional in the spec but included by almost every real-world token, so wallets and explorers can display “USDT, 6 decimals” instead of raw integers.
2. The Two Mandatory Events
Every state change is written to the Ethereum event log, which block explorers, indexers, and light clients read.
- The Transfer event must trigger when tokens are transferred, including zero value transfers, and a token contract that creates new tokens should trigger a Transfer event with the _from address set to 0x0.
- The Approval event must trigger on any successful call to approve(address _spender, uint256 _value).
Events are how MetaMask knows a balance changed without polling every contract, and how services like Etherscan reconstruct transfer history.
3. The Approve then transferFrom Pattern
The stamp-book makes the pattern concrete. approve(spender, amount) is you writing on your page, “Alice may tear up to 100 stamps from me.” transfer from (you, recipient, amount) is Alice showing the clerk your note and tearing the stamps. The clerk (the token contract) checks the note, reduces your balance, increases the recipient’s balance, and writes two log entries.
The design is why a DEX can sell your USDC for ETH without ever holding your USDC. You approve the router, and the router then calls transferFrom on every trade. Callers MUST handle false returns (bool success). Callers MUST NOT assume that false is never returned! The warning matters because a subset of early tokens, notably Tether, did not return a boolean at all, which is why OpenZeppelin’s SafeERC20 wrapper exists in most modern codebases.
The same section of the spec also flags the long-standing approve race condition. Per EIP-20, clients should make sure to create user interfaces in such a way that they set the allowance first to zero, before setting it to another value for the same spender, to prevent an attack where the spender front-runs the change and spends both the old and new allowance. The warning still explains why wallets add an “Approve zero” step, and why the industry has moved toward signature-based approvals.
Why Does ERC-20 Matter?
The standard matters because it turned Ethereum from a programmable blockchain into a shared factory for digital assets. Etherscan indexes 2,010,819 contracts in its ERC-20 section, each immediately usable by every wallet, DEX, and lending protocol that reads the standard. Without that interface, every new issuance would need its own wallet integration.
The impact shows up clearest in stablecoins. Per Etherscan Token Tracker data, Tether USD on Ethereum holds a circulating market cap of $185.50 billion across 13.65 million holders, and USD Coin holds $78.60 billion across 6.69 million holders, both deployed as ERC-20 contracts. Every dollar of that supply moves through the same transfer and transferFrom calls, a governance token or meme coin.
Across CoinLaw’s DeFi and stablecoin coverage, the interface sits underneath almost every story: wrapped Bitcoin flowing into lending markets, staked ETH routing through restaking protocols, tokenised Treasuries settling on-chain. The common interface is the reason a single wallet can hold them all. For context on how those assets reach users, our cryptocurrency adoption data coverage tracks exchange listings, regulatory approvals, and on-chain flows across the same surface.
Pros, Cons, and Risks
The main strength of the standard is also the root of its main flaw. The same minimal interface that made it universally adoptable also left footguns in the approval flow and in how tokens arrive at contracts.
Advantages
- Interoperability by default: any wallet or protocol that reads the standard supports every compliant token, so new issuers do not need custom integrations.
- Simple surface area: six mandatory methods plus two events are enough to list a token on most exchanges and DEXes.
- Massive network effect: most DEX liquidity, lending collateral, and stablecoin supply on Ethereum settles in compliant tokens, which compounds the incentive for new issuers to conform.
- Transparent event log: every transfer and approval is recorded on-chain, giving explorers and indexers a uniform data source to reconstruct balances and flows.
Trade-offs and Risks
- Approve race condition: Per EIP-20, clients should set the allowance first to zero before setting it to another value for the same spender. Raising an allowance without zeroing opens a window where the spender can pull the old and new amounts.
- Tokens sent to contracts can be lost: as of 06/20/2024, at least $83,656,418 worth of ERC-20 assets were lost after being sent to contracts that did not implement a claim or withdraw function, per Ethereum Foundation documentation. Newer standards such as ERC-223 and ERC-777 address the issue, though the original remains dominant due to network effects.
- Non-standard return values: a handful of widely held tokens, including the original USDT implementation, do not return a boolean from transfer and approve. Contracts that naively expect the boolean can revert unless they wrap calls with a SafeERC20-style helper.
- No built-in metadata standards for compliance: the spec does not cover freeze lists, blocklists, or transfer hooks, so issuers such as Circle and Tether add those features in contract code outside the standard itself.
The approved race condition is one of the longest-lived design flaws in any financial infrastructure still in production. CoinLaw has covered phishing and draining exploits that rely on it since the early DeFi era, and the industry’s answer, Permit signatures and Permit two, only reached wide adoption years after the warning appeared in the specification.
Types of ERC-20 Tokens
The standard is a data structure, not an economic design. Issuers use the same interface to represent very different assets, which is why the upper reaches of the Ethereum market cap ranking mix dollar-pegged coins, wrapped Bitcoin, and staked Ether into a single list.
| Category | Purpose | Governance/utility |
| Fiat-pegged stablecoin | Dollar redemptions 1-to-1 | Tether USD (USDT) at $185.50 billion, USD Coin (USDC) at $78.60 billion, USDS at $11.35 billion, Dai (DAI) at $4.32 billion, PayPal USD (PYUSD) at $4.11 billion |
| Wrapped asset | Bring external assets onto Ethereum | Wrapped BTC (WBTC) at $8.93 billion, Wrapped Ether (WETH) at $7.94 billion, Coinbase Wrapped BTC (cbBTC) at $6.30 billion |
| Liquid staking derivative | Tradable claim on staked ETH | Lido Staked ETH (stETH) at $22.19 billion, Wrapped stETH (wstETH) at $11.18 billion, Binance wBETH at $8.66 billion |
| Governance / utility | Vote on protocol changes, pay fees | Chainlink (LINK), Uniswap (UNI), Aave (AAVE), Maker (MKR), Compound (COMP) |
| Exchange token | Discounts, buybacks, utility on an exchange | Bitfinex LEO at $9.41 billion and Cronos (CRO) at $2.96 billion |
| Tokenised real-world asset | On-chain T-bills, gold, institutional products | BlackRock’s BUIDL fund at $2.49 billion, Tether Gold (XAUt) at $2.69 billion, Paxos Gold (PAXG) at $2.38 billion |
Source: Etherscan Token Tracker (ERC-20)
The same six methods cover every row in that table. A wallet balance for USDT, LINK, or BUIDL is read with the identical balanceOf call.
Real-World Applications
Stablecoins and Dollar Rails
Dollar-pegged stablecoins drive most of the volume under the standard. Across USDT, USDC, USDS, DAI, and PYUSD, Ethereum carries more than $284 billion in circulating ERC-20 stablecoin supply. Every on-chain dollar payment, from a remittance through Circle’s APIs to a Uniswap swap, calls transfer or transferFrom on a compliant contract.
DeFi Protocols and DEX Trading Pairs
Decentralised exchanges, lending markets, and yield protocols assume the standard on both sides of every trade. Uniswap’s router calls approve, then transfer from on each swap. Aave and Compound mint interest-bearing receipts (aTokens, cTokens) against deposits that are themselves compliant. Our DeFi market data shows how those protocol flows layer on the same interface.
Wallets, Explorers, and Custody
A wallet that speaks the standard can display balances for any of the millions of deployed tokens. MetaMask reads balanceOf from a user-supplied contract address, fetches symbol and decimals, and renders a line item, no per-token code required. Block explorers like Etherscan reconstruct token histories entirely from Transfer and Approval event logs, which is why Etherscan maintains an index of 2,010,819 contracts in its ERC-20 section without needing a custom parser for each.
Frequently Asked Questions (FAQs)
ERC-20 stands for Ethereum Request for Comments number 20. It was proposed by Fabian Vogelsteller in November 2015 and later assigned Ethereum Improvement Proposal number 20 (EIP-20). The letters ERC label developer proposals for application-level standards, while the number is the sequential ID that the Ethereum community gave the proposal.
Etherscan’s Token Tracker lists 2,010,819 ERC-20 contracts indexed on Ethereum. Only a small fraction, roughly 3,107, shown under the Etherscan “OK or Neutral reputation” filter, have meaningful trading activity. The rest are abandoned tests, spam issuances, and one-off deployments.
Yes. Tether USD (USDT) on Ethereum has a circulating market cap of $185.50 billion and 13.65 million holders, making it the largest asset by market cap under the standard. Tether also issues USDT on other chains (Tron, Solana, Avalanche) using each chain’s native interface, though the Ethereum version is the one built on EIP-20.
ERC-20 covers fungible tokens, where every unit is identical and interchangeable, like a dollar or an ETH. ERC-721 covers non-fungible tokens (NFTs), where each token has a unique ID and distinct properties, like a deed or a collectible. The ERC-20 standard is for tokens that have a property making each token exactly the same, in type and value, as another token.
Technically yes. There is a well-known caveat. Sending ERC-20 assets to a contract that does not implement a claim or withdraw function can result in the tokens being stranded, and at least $83,656,418 had been lost this way as of June 20, 2024, per Ethereum Foundation documentation. Always confirm the destination contract supports withdrawals before transferring.
Conclusion
The specification set a deliberately small interface and now runs most of Ethereum’s token economy through it. The 2,010,819 deployed contracts, plus $185 billion in USDT supply alone, now settle through the same six methods Fabian Vogelsteller and Vitalik Buterin sketched out in the Ethereum Improvement Proposals repository. The minimalism is why the standard won, and it is also why the approved footgun has lasted as long as it has.
The next chapter of Ethereum approvals is already being written through Permit signatures, Uniswap’s Permit two, and account-abstracted wallets, all of which aim to replace the two-step approve flow with signature-based approvals that cannot be front-run. CoinLaw will track that shift across stablecoin, DeFi, and wallet coverage as issuers migrate to safer patterns.