令牌标准: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。
小技巧: 批量 mint 时可以考虑用 ERC-721A(一个优化版),能大幅降低 mint 多个的 gas。我记得有个项目通过它节省了 40% 以上部署费。

ERC-1155:半同质化/多令牌容器

ERC-1155 把前两者的优势结合了。一个合约里既能管理同质化代币(例:游戏金币),也能管理 NFT(例:稀有装备),甚至还能搞混合批次转移。

它的核心函数 balanceOfBatch 和 safeBatchTransferFrom 可以一次查询或转移多种代币。说白了,一个 transferBatch 顶 ERC-721 几十次转账,gas 省得人心疼。

我曾经在游戏项目中使用 ERC-1155 打造“武器 + 金币”双资产系统,所有道具存在一个合约里,玩家一次签名就能批量交易所有装备。上线后用户反馈“丝滑”,团队也不用多合约维护。

适用场景: 游戏道具、合成系统、供应链中的批量流转、需要多种令牌共存的场景。如果业务中有大量跨种类转移,推荐直接用 ERC-1155。

三种标准差异对比

特征 ERC-20 ERC-721 ERC-1155
可替代性 完全同质 唯一 同质 + 唯一混合
tokenId 无(常用地址+映射) 每个 ID 唯一 每个 ID 可定义类型
批量操作 不支持(需循环) 需循环 原生支持 batch
部署 gas 低 中 中偏高(但批量交易省)
元数据 通常链下 每个 tokenId 单独 URI 每个类型 URI,可覆盖
生态兼容度 极广 极广(NFT 市场) 逐渐发展

怎么选?一张流程图告诉你

我习惯用这个简易决策树判断选用哪个标准。你对着需求走一遍,基本不会选错。

令牌标准选择流程图 开始:代币需求 每个代币是否有唯一标识? (如数字藏品、房产证) 是 否 ERC-721 是否需要批量操作 或多种令牌共存? 是 否 ERC-1155 ERC-20 若需求复杂,可直接选 ERC-1155 一劳永逸

避坑指南

  • 别混用标准接口: 我见过有人把 ERC-20 的 transfer 用在 ERC-721 上,结果代币转不出去。每个标准有自己的接口规范,不能用错。
  • 小心 Gas 陷阱: ERC-1155 的 safeBatchTransferFrom 虽然省 gas,但如果一次传几十个不同类型且都调用 _beforeTokenTransfer 钩子,可能让调用链爆炸。建议最多一次 50 项。
  • 安全转移: 无论用哪个标准,接收方如果不是用户钱包而是合约,必须支持对应的 onERC721Received 或 onERC1155BatchReceived,否则代币永久丢失。我以前帮人查过一例因接收合约没实现接口导致百万美元 NFT 卡死的案例……
我的习惯: 如果项目还在原型阶段,我会优先用 ERC-1155,因为它能向下兼容 ERC-20 和 ERC-721 的大部分功能,后续需求变更不用重构合约。等业务定型再拆成专用标准。

记住:没有万能的标准,只有适合场景的方案。选标准前先把业务模型画清楚,尤其是“代币之间能否互换”“是否支持批量”“Gas 预算多少”这三个问题。理清了,选择自然就出来了。