什么是 ERC-20?它是以太坊经济运行的代币标准。
我的 MetaMask 钱包里存着 USDT。还有一些 LINK,上周兑换到的一点 UNI,以及别人空投给我的一个狗狗代币(我一直忘了卖掉)。这些代币的用途完全不同。Tether 是一种由现金和国债支持的稳定币。Chainlink 运行预言机网络,为智能合约提供现实世界的数据。Uniswap 管理着以太坊上最大的去中心化交易所 (DEX)。那个狗狗代币没有任何实际用途。但是我的钱包把它们都显示在同一个列表里,让我可以用同一个按钮发送它们,而且我使用的所有 DeFi 协议都无需任何特殊设置就能接受它们。
这之所以行得通,是因为这四种代币都遵循相同的规则。它们都是ERC-20代币。相同的界面、相同的功能、相同的运行机制。而理解ERC-20的真正含义,是理解以太坊经济运作方式的第一步。
Fabian Vogelsteller 于 2015 年 11 月撰写了这份提案,并给它取了一个平淡无奇的名字:以太坊第 20 号征求意见稿 (Ethereum Request for Comment number 20)。Vitalik Buterin 参与撰写了最终版本。到 2017 年,该提案正式获得通过,随后 ICO 热潮席卷而来。由于 ERC-20 几乎免费,成千上万的项目一夜之间发行了代币。如今,已有 50 万个代币合约,该标准依然占据主导地位。这就是 ERC-20 的作用,以及为什么即使你从未打算编写任何 Solidity 代码,也应该关注它。
ERC-20 标准的工作原理
这个名字有点过于书呆子气了。ERC 是以太坊请求评论(Ethereum Request for Comment)的缩写。20 是提案编号。就是这样。一位名叫 Fabian 的开发者说“这是所有代币都应该遵循的规则”,并将他的提案编号为 20,因为那是下一个可用的位置。不是二十条规则,也不是二十个代币,只是以太坊改进队列中的第 20 个提案而已。
这些规则规定:如果你想在以太坊上创建同质化代币(FUN),你的智能合约必须包含以下特定功能。“同质化”意味着每个代币单元都是相同的。一个 USDC 与其他所有 USDC 完全相同。你无需关心你持有的是哪个具体的 UNI 代币,因为它们都是可以互换的。NFT 则恰恰相反。每个 NFT 都是独一无二的,具有不同的标准和不同的文章。
ERC-20 标准明确规定了六个函数和两个事件。所有符合标准的代币合约,从市值 1400 亿美元的 USDT 到三十秒前有人刚刚推出的模因币,都实现了这些相同的调用:
| 功能 | 简明英语版 |
|---|---|
| 总供应量() | “世界上有多少枚这样的代币?” |
| balanceOf(地址) | 这个钱包里有多少个? |
| 转账(至,金额) | “从我的钱包向另一个人发送 X 个代币” |
| 批准(支出人,金额) | “允许这个 DeFi 协议花费我最多 X 个代币” |
| transferFrom(from, to, amount) | “我已获得将代币从钱包 A 转移到钱包 B 的权限” |
| 津贴(所有者,支出者) | “这位消费者还能从零花钱里花多少钱?” |
每当发生任何事件时,区块链上都会记录两个事件。每次代币在钱包之间转移时,都会触发“转移”事件。当有人授予支出权限时,就会触发“批准”事件。像 Etherscan 这样的区块链浏览器会利用这些事件来构建您在查找代币时看到的交易历史记录。
三个可选字段增添了个性:名称为代币赋予一个人类可读的标签(“Chainlink”),符号是交易代码(“LINK”),小数位数设置代币可以划分的粒度(几乎每个人都使用 18 位小数来匹配 ETH,尽管 USDT 使用 6 位小数,但这造成的错误比任何人愿意承认的都要多)。
六个函数。两个事件。三个可选字段。这就是全部的规范。我甚至可以把它打印在一张餐巾纸上,还有剩余空间沾上咖啡渍。然而,正是这餐巾纸大小的规范运行着一个价值数千亿美元的代币经济。MetaMask 读取这些函数来显示你的余额。Uniswap 调用它们来执行兑换。Aave 使用它们来管理借贷。你用过的所有 DeFi 协议都通过同一个接口与代币通信。简洁才是关键所在。

为什么 ERC-20 彻底改变了以太坊
我在 2016 年就从事加密货币行业,那时还没有现在这样的标准。那段时间简直一团糟。每个代币都是定制开发的。有人会自己编写代币合约,使用自己的函数名称、转账逻辑和余额查询方式。MetaMask 甚至都不知道这些代币有一半是什么。交易所要花几个月的时间才能添加对新代币的支持,因为每个代币都需要定制的集成代码。想建一个去中心化交易所(DEX)?想都别想。你得为每个代币的实现编写单独的处理器。
ERC-20 终结了这种混乱局面。标准采纳后,只需将合约地址粘贴到 MetaMask,新代币就会立即显示。Uniswap 无需任何人的许可即可上架该代币。Aave 无需编写任何自定义代码即可接受其作为抵押品。一个标准,通用兼容性。
2017 年的 ICO 浪潮就是最好的证明。一个住在宿舍里的孩子午饭后就能发布 ERC-20 代币,搭建一个包含白皮书的网站,午夜前就能开始接受投资者的 ETH 投资。我亲眼目睹了这一切。一些项目筹集了数十亿美元。有些是正规的,并且开发出了真正的产品。大多数都是垃圾。少数是彻头彻尾的骗局。但其背后的技术呢?它运行完美无瑕。该标准完美地实现了其设计初衷:让代币的创建和交互变得极其简单。
如今的规模令人震惊。以太坊网络上存在超过 50 万个 ERC-20 代币合约。ERC-20 代币的总市值高达数千亿美元。仅 USDT 的市值就超过了 1400 亿美元。再加上 USDC、LINK、UNI、DAI、SHIB、MKR 等其他代币,以太坊的大部分经济价值都蕴藏在 ERC-20 合约之中。
| 顶级 ERC-20 代币 | 类别 | 市值(约) |
|---|---|---|
| USDT(泰达币) | 稳定币 | 1400亿美元以上 |
| 美国国会(圆圈) | 稳定币 | 600亿美元以上 |
| LINK(Chainlink) | Oracle 网络 | 80亿美元以上 |
| UNI(Uniswap) | DEX治理 | 40亿美元以上 |
| DAI(创客) | 去中心化稳定币 | 50亿美元以上 |
| 非裔美国人英语 | 贷款协议 | 20亿美元以上 |
| 柴犬 | 模因币 | 60亿美元以上 |
| MKR(制造商) | 治理 | 15亿美元以上 |
创建 ERC-20 代币:比你想象的要容易
我曾经在 YouTube 直播中观看过有人现场部署 ERC-20 代币。整个过程耗时 14 分钟,包括他向观众解释操作步骤的时间。
这并非炫耀主播有多聪明,而是为了说明 OpenZeppelin 让这一切变得多么简单。OpenZeppelin 是一个经过审计、久经考验的 Solidity 代码库,它包揽了所有繁重的工作。你只需选择代币名称(“MyToken”)、代币符号(“MTK”)、小数位数(18 位,与 ETH 相同)以及初始供应量。该库会处理六个 ERC-20 函数、事件以及安全检查。你只需复制模板,修改四个变量,部署到以太坊,即可拥有一个真正的代币。
部署的 Gas 费用会波动。网络空闲时?可能在 20-50 美元之间。网络高峰期,比如 NFT 发行日?则可能在 200-500 美元之间。如果部署在 Arbitrum 或 Base 而不是以太坊主网上,费用会降至几美元。经济门槛几乎为零。
这就是这种便捷性的阴暗面。以太坊区块链不会验证代币合约的合法性。它不会验证团队、审计代码或评估商业模式。只要你能支付 gas 费用,就能部署代币。这就是为什么 Etherscan 上列出了成千上万个代币合约,其中大多数要么是已放弃的实验项目,要么是正在进行的骗局。ERC-20 标准保证了兼容性,但它对代币是否值得持有却没有任何保证。
ERC-20 与其他以太坊代币标准
人们问我:“ERC-20 是唯一的代币标准吗?” 不,远非如此。但它是第一个真正奏效的标准,之后出现的其他标准则解决了 ERC-20 遗留的问题。
ERC-721 的出现带来了 NFT。与 ERC-20 代币可以互换(你的 USDC 和我的 USDC 完全相同)不同,每个 ERC-721 代币都拥有一个唯一的 ID。Bored Ape #4293 和 Bored Ape #7810 是完全不同的资产。虽然底层函数名称相似,但逻辑是针对单个物品而非通用数量进行操作的。你不能发送半个 Bored Ape,要么全部发送,要么全部不发送。
ERC-1155 代币源于游戏开发者,他们厌倦了为每种物品类型部署单独的合约。一个合约即可处理金币(可同质化,类似于 ERC-20)、铁剑(半同质化,可复制 50 把)以及一顶独一无二的传奇头盔(不可同质化,仅此一件)。批量交易可以节省 gas 费用。只需一笔交易即可转移 100 种不同的物品,而无需进行 100 笔单独的交易。
BEP-20是币安智能链 (BSC) 对其版本的称呼。功能相同,事件相同,但区块链不同。相当于在成本更低的网络上复制粘贴了 ERC-20。Solana 的 SPL 标准也能实现相同的功能,但架构完全不同,因为 Solana 的设计初衷并非与以太坊兼容。
| 标准 | 令牌类型 | 可互换的? | 用例 | 网络 |
|---|---|---|---|---|
| ERC-20 | 同质化代币 | 是的 | 货币、治理、效用 | 以太坊 |
| ERC-721 | 非同质化代币 | 无(唯一标识符) | NFT、数字艺术、收藏品 | 以太坊 |
| ERC-1155 | 多令牌 | 两个都 | 游戏,混合资产类型 | 以太坊 |
| BEP-20 | 同质化代币 | 是的 | 与 ERC-20 相同 | BNB 链 |
| 声压级 | 同质化 + NFT | 两个都 | 索拉纳生态系统 | 索拉纳 |
DeFi 中的 ERC-20 代币:为什么该标准能够推动去中心化金融
如果取消 ERC-20,DeFi 将在一夜之间崩溃。不是“挣扎”,而是彻底崩溃。该系统的每个部分都假定代币使用同一种语言。
Uniswap 将两种 ERC-20 代币配对到一个流动性池中,并允许用户在它们之间进行兑换。它支持 USDC、SHIB,甚至包括你朋友凌晨两点推出的那个“梗币”。去中心化交易所 (DEX) 并不关心代币的具体用途,它只关心合约是否实现了 transfer() 和 approve() 函数。添加流动性池后,交易即可上线。无需提交上币申请,无需交易所审核,也无需等待。
Aave 和 Compound 提供 ERC-20 代币借贷服务。协议会调用 balanceOf() 函数查看您的存款余额,并调用 transfer() 函数进行代币转移。偿还贷款时,则使用 approve() 和 transferFrom() 函数。由于接口已预先确定,因此新代币的借贷市场可以在代币发行当天立即启动。
然后是以太坊(ETH)这个棘手的问题。ETH 的出现早于 ERC-20 标准,因此它并不符合该标准,这破坏了其可组合性。解决方案是:WETH。Wrapped Ether(封装以太坊)是对原生 ETH 的 ERC-20 封装。存入 1 个 ETH,即可获得 1 个 WETH,DeFi 协议可以正常处理这些 WETH。WBTC 对比特币也做了同样的事情,它将比特币的价值以 ERC-20 代币的形式引入以太坊生态系统,并由托管的真实比特币 1:1 支撑。
实际结果是:我今天就可以构建一个 DeFi 协议,它能兼容所有已创建的 ERC-20 代币,包括尚未存在的代币。我的代码无需专门了解 USDT,也无需在明天有人推出新的稳定币时进行更新。接口会处理一切。正是这种可组合性,使得以太坊的 DeFi 活动、TVL 和开发者工具都超过了其他任何区块链。ERC-20 标准是所有其他技术赖以生存的基础。
安全风险和常见的ERC-20问题
让我来告诉你DeFi用户损失数百万美元的审批漏洞,以及几乎没有人会在被它困扰之前了解它。
当你在 Uniswap 上兑换代币或在 Aave 中充值时,去中心化应用 (dApp) 会请求你“授权”它使用你的代币。大多数 dApp 默认启用无限授权。这听起来似乎无害,但当你意识到这意味着什么时,就会发现问题所在:智能合约可以随时永久地花费你钱包中所有同类型的代币,直到你明确撤销授权为止。如果合约在六个月后遭到黑客攻击,攻击者会利用你之前的授权来盗走你早已忘记自己曾授予访问权限的代币。
这种情况发生过,而且不止一次。解决方法很简单,但很麻烦:每次交易只批准所需的确切金额。或者使用 Revoke.cash 清理你忘记的旧批准。我每隔几个月就会检查一次,情况总是比我预想的更糟。ERC-2612 是一个更新的标准,它用签名许可取代了链上批准,从而降低了这种风险。但大多数 dApp 仍然使用旧模式。
假代币每周都会骗人上当。骗子会部署名为“Uniswap”或“Chainlink”的ERC-20合约,但合约地址略有不同。你在去中心化交易所(DEX)上搜索时,看到熟悉的名称,就购买了假币。你的钱会直接进入骗子的钱包。真正的LINK合约地址是0x514910771AF9Ca656af840dff83E8264EcF986CA。假币的地址可能是0x514910……或其他什么。务必从CoinGecko或项目官方网站复制地址。切勿仅凭名称搜索。
还有一些代币暗藏玄机。表面上看,这些合约看起来像一个标准的 ERC-20 合约。但实际上,部署者添加了可以无限增发新代币的功能,或者在你尝试兑换时收取 99% 的出售税,又或者设置黑名单,禁止除部署者以外的任何人出售代币。ERC-20 标准并未规定合约的功能限制,它只规定了最基本的功能。其他一切都由开发者自行决定。代币审计、DextScore 以及 Etherscan 上的认证合约,正是因为标准的简洁性与骗子的创造力之间存在着这种差距。