令牌标准:ERC-20 详解、ERC-721、ERC-1155 的差异与适用场景
聊到令牌化,绕不开的就是 ERC 标准。这三个标准——ERC-20、ERC-721、ERC-1155——基本上定义了以太坊上代币的“游戏规则”。
说白了,ERC-20 是同质化代币,ERC-721 是独一无二的 NFT,ERC-1155 则是个“多面手”,能把前两者的能力揉在一起。我刚开始接触时也觉得花里胡哨,直到真在项目里踩了坑,才明白选错标准代价有多大。
ERC-20:同质化代币的基石
ERC-20 是最通用的标准。代币之间没有区别,像美元,一张换另一张完全等价。你玩过 DeFi 的话,USDC、DAI 全是它的实现。
核心接口就六个:totalSupply、balanceOf、transfer、transferFrom、approve、allowance。是不是很简单?但恰恰是简单的 approve 让很多人吃过亏。
approve 无限额度,导致被漏洞合约把用户余额全部转走。个人建议:前端让用户每次只授权所需数量,或者用 increaseAllowance / decreaseAllowance 替代。
ERC-20 适用于:稳定币、治理代币、积分、任何需要互换性的数字资产。它的 gas 消耗很低,逻辑清晰,生态最成熟。
ERC-721:不可替代的独苗
ERC-721 代表的是独一无二的资产。每枚代币都有唯一的 tokenId。你想想看,如果两张演唱会门票座位不同,就不能等价交换——这就是 NFT 的逻辑。
我在做数字藏品平台时,早期用了 ERC-20 存储作品索引,结果用户投诉说“我的画怎么和别人一样?”嗯,后来全改成 ERC-721 才解决。
它的特点:
- 每个 tokenId 独立管理,可以有不同的元数据 URI。
- 支持
safeTransferFrom防止代币打到不可接收的合约。 - 通常部署 gas 比 ERC-20 高,因为每次 mint 需要存储唯一 ID。
ERC-1155:半同质化/多令牌容器
ERC-1155 把前两者的优势结合了。一个合约里既能管理同质化代币(例:游戏金币),也能管理 NFT(例:稀有装备),甚至还能搞混合批次转移。
它的核心函数 balanceOfBatch 和 safeBatchTransferFrom 可以一次查询或转移多种代币。说白了,一个 transferBatch 顶 ERC-721 几十次转账,gas 省得人心疼。
我曾经在游戏项目中使用 ERC-1155 打造“武器 + 金币”双资产系统,所有道具存在一个合约里,玩家一次签名就能批量交易所有装备。上线后用户反馈“丝滑”,团队也不用多合约维护。
三种标准差异对比
| 特征 | ERC-20 | ERC-721 | ERC-1155 |
|---|---|---|---|
| 可替代性 | 完全同质 | 唯一 | 同质 + 唯一混合 |
| tokenId | 无(常用地址+映射) | 每个 ID 唯一 | 每个 ID 可定义类型 |
| 批量操作 | 不支持(需循环) | 需循环 | 原生支持 batch |
| 部署 gas | 低 | 中 | 中偏高(但批量交易省) |
| 元数据 | 通常链下 | 每个 tokenId 单独 URI | 每个类型 URI,可覆盖 |
| 生态兼容度 | 极广 | 极广(NFT 市场) | 逐渐发展 |
怎么选?一张流程图告诉你
我习惯用这个简易决策树判断选用哪个标准。你对着需求走一遍,基本不会选错。
避坑指南
- 别混用标准接口: 我见过有人把 ERC-20 的
transfer用在 ERC-721 上,结果代币转不出去。每个标准有自己的接口规范,不能用错。 - 小心 Gas 陷阱: ERC-1155 的
safeBatchTransferFrom虽然省 gas,但如果一次传几十个不同类型且都调用_beforeTokenTransfer钩子,可能让调用链爆炸。建议最多一次 50 项。 - 安全转移: 无论用哪个标准,接收方如果不是用户钱包而是合约,必须支持对应的
onERC721Received或onERC1155BatchReceived,否则代币永久丢失。我以前帮人查过一例因接收合约没实现接口导致百万美元 NFT 卡死的案例……
记住:没有万能的标准,只有适合场景的方案。选标准前先把业务模型画清楚,尤其是“代币之间能否互换”“是否支持批量”“Gas 预算多少”这三个问题。理清了,选择自然就出来了。