ERC20 是什么?为什么所有代币都长得差不多

打开币安里的代币列表,几百种币里大部分是"ERC20 代币"。ERC20 不是某个币,而是一种代币标准。理解它你就理解了整个 DeFi 的乐高基础。学习时可以在 币安官网 找一个 ERC20 代币看链上详情;下载 币安官方APP 跟踪 ETH 生态币种;iPhone 用户先看 iOS安装教程

ERC20 是什么

ERC = Ethereum Request for Comments,是以太坊的提案标准。20 是它的编号。这份提案定义了一个代币合约必须实现的接口

  • totalSupply():总供应量
  • balanceOf(address):某地址的余额
  • transfer(to, amount):转账
  • approve(spender, amount):授权某人花你的代币
  • transferFrom(from, to, amount):被授权人代为转账
  • allowance(owner, spender):查授权额度

只要一个智能合约实现了这些函数,它就是 ERC20 代币。

为什么需要这个标准

如果没有 ERC20,每个代币都自己定义接口,那么:

  • 钱包 APP 没法通用支持
  • 交易所要为每个币写专门代码
  • DEX 没法用统一逻辑做兑换

ERC20 让所有代币长得"一样",钱包、交易所、DEX 都能用同一套代码处理

类比:USB 接口让所有 U 盘都能插进同一个口,不需要每个厂商单独适配。

主流 ERC20 代币

ERC20 代币太多,举几个有代表性的:

代币 用途
USDT、USDC、DAI 稳定币
UNI、AAVE、SUSHI DeFi 治理币
LINK 预言机
MATIC Polygon 代币(在以太坊上是 ERC20)
SHIB、PEPE Memecoin
LDO、RPL 流动性质押

整个以太坊上有数十万 ERC20 代币,绝大多数是垃圾,但少数构成了 DeFi 生态的核心。

一个 ERC20 代币长什么样

任何 ERC20 代币的智能合约都包含:

  • 一个 mapping 存每个地址的余额
  • transfer 函数:扣减发送者,增加接收者
  • approve 函数:记录"我允许 spender 花我多少"
  • 一系列事件:Transfer、Approval

代码复杂度很低,一份基础 ERC20 合约只要几十行 Solidity。但一份合约可能管理着数十亿美元的资产。

approve / transferFrom 的常见误用

ERC20 里最容易出问题的是 approve 模式。流程:

  1. 你 approve(Uniswap, 100 USDT)
  2. Uniswap 合约调 transferFrom(你, 池子, 100)
  3. 完成兑换

但很多 DApp 让你 approve 一个无限大的额度,这意味着只要这个 DApp 被黑,你的所有 USDT 都可能被盗走。

安全做法

  • 只 approve 实际需要的数量
  • 定期用 revoke.cash 撤销不再使用的 approve
  • 对小项目极度谨慎

ERC20 vs ETH 本身

ETH 不是 ERC20 代币——它是以太坊的原生币,比 ERC20 更底层。区别:

  • ETH 转账消耗的 Gas 较低(21000)
  • ERC20 转账消耗多(50000+)
  • ETH 用 transfer 函数转,ERC20 调合约方法

但有些场景需要 ETH 也变成 ERC20 形式(方便和其他代币一起操作),所以有 WETH(Wrapped ETH)——一个 1:1 锚定 ETH 的 ERC20 代币。在 Uniswap 上 ETH/USDC 实际是 WETH/USDC。

ERC20 的"小数位"

每个 ERC20 都有一个 decimals 字段(最常见是 18,部分稳定币是 6)。这意味着:

  • 1 USDT 在合约里实际表示为 1000000(10^6,因为 decimals=6)
  • 1 USDC 同样是 1000000
  • 1 ETH 在 WETH 合约里是 1000000000000000000(10^18)

如果你直接看链上数字别忘了考虑 decimals,否则数字会让你以为很大。

ERC20 的诈骗手段

由于发币门槛极低(任何人付几美元 Gas 就能部署一个 ERC20),骗子很多:

  • 空投钓鱼:往你钱包发个莫名其妙的代币,引诱你去某网站"领奖"
  • 蜜罐合约:你能买不能卖,价格被人为操纵
  • 改名仿冒:模仿主流币的名字,差一两个字符
  • rug pull:项目方拉高币价后撤走流动性
  • 后门 mint:合约预留了"项目方能无限增发"的函数

防御:

  • 不要点钱包里来路不明的代币上的"领奖"链接
  • 主流币用合约地址核对(在 etherscan 上)
  • 看代币的持有人分布,过度集中的危险
  • 不参与无审计的小项目

其他链上的"ERC20"

其他链都模仿了 ERC20:

  • BSC:BEP-20
  • Polygon:ERC-20(也叫 PoS Token)
  • Solana:SPL Token
  • Tron:TRC-20

接口大同小异,但链不同,代币不互通。USDT 在以太坊(ERC20)和 Tron(TRC20)是两个不同的代币(虽然都是 USDT),转账时选错网络就丢币。

学习者的小练习

去 etherscan:

  1. 找 USDT 的合约地址(0xdAC17F958D2ee523a2206206994597C13D831ec7)
  2. 看它的"Read Contract",调 totalSupply、balanceOf
  3. 看 Holders 分布
  4. 看最近的 Transfer 交易

练完之后你对 ERC20 就不再是抽象概念。

常见疑问

Q:所有币安上的币都是 ERC20 吗? A:不是。BTC、SOL、TRX 等都是各自独立的链。币安上的 ERC20 子集大约有几百种。

Q:发一个 ERC20 难吗? A:技术上几行代码就能发。难的是有人买、有用、有人接盘。

Q:ERC20 能编程定时锁仓吗? A:可以,需要在合约里加锁仓逻辑。

Q:USDT 是不是有"被增发不通知"的能力? A:是的,发行方 Tether 控制着 USDT 的铸造和销毁。

Q:稳定币算 ERC20 吗? A:以太坊上的稳定币(USDT、USDC、DAI)都是 ERC20。

延伸阅读

  • 想看 ERC721(NFT 标准):去看 ETH知识 分类
  • 想理解智能合约风险:去看 风险管理 分类
  • 想知道选币的方法论:去看 项目分析 分类