ERC-1155 是什么?半同质化合约怎么装下多种 NFT 图 1
ERC-1155 是什么?半同质化合约怎么装下多种 NFT · 图 1

一句话理解

ERC-721 里,一个合约通常对应一个系列,每张 NFT 都有全局唯一的编号。ERC-1155 换了个仓库结构:一个合约里同时存放很多“种类”,每个种类用一个编号标识,种类下面可以有很多完全相同、可以互相替换的单位。一把唯一的传说之剑和五千瓶一模一样的治疗药水,可以共存于同一个合约、用同一笔交易转走。这就是它常被叫作“半同质化”的原因——它同时容纳两种同质性。

结构差异

ERC-721 的核心状态是“每个编号对应哪个主人”,所有权以编号为键;ERC-1155 的核心状态是“某个地址在每个种类上有多少个”,所有权是地址乘种类的数量表。差异带来三个连锁后果:

  • 转账语义不同:ERC-721 转的是“这一个”,ERC-1155 转的是“这种,多少个”。接收方安全检查(onERC1155Received 回调)也相应按种类批量询问。
  • 批量操作safeBatchTransferFrom 一笔交易处理多种代币多个数量。对游戏来说,一次领奖可能同时给一件装备加二十个材料,ERC-721 需要多笔交易,ERC-1155 一笔打包。
  • 元数据按种类挂:URI 绑定在种类编号上,同种类的所有一般共享一份元数据(标准允许在数量为一时使用特殊 URI 逻辑,但这属于实现细节,采用不广)。

省 Gas 的原理与边界

批量转移省 Gas 主要省在固定开销的摊销:每笔交易都有签名验证、区块包含等基础成本,批量函数把这些成本在多种代币之间分摊,同时只写一个合约的状态。但它不改变“状态变化越多、写入成本越高”的基本规律——批量转账里每一种代币的余额变更仍要各自付费,只是均摊后总额通常更低。对铸造来说,一次发一万瓶药水的成本可以远低于一万次独立铸造,这正是游戏经济偏爱它的原因。

代价也要写在账本上:

  1. 单张辨识度靠约定。种类编号本身不带“第几号个体”的信息,若项目想区分同种类里的特殊单位(例如编号 1001 的第 7 瓶有彩蛋),需要在应用层自己设计,不同市场不一定识别。
  2. 版税表达较弱。ERC-2981 按种类查询收款人,部分实现忽略数量维度,市场对 ERC-1155 的版税与挂单支持普遍不如 ERC-721 顺滑。
  3. “同质单位”与代币的界限模糊。数量大、完全可替换的 ERC-1155 单位在功能上接近 ERC-20 代币,若项目把它当证券化资产运营,会面临与纯 NFT 不同的合规讨论——按具体司法辖区分析,这里不做判断。

哪些场景真的适合

游戏道具与消耗品是最典型的落点:多种类、多数量、高频批量流转。第二类是票务与兑换券:同场次的票本质是同质的,但入场核销、退改签需要按种类批量处理。纯收藏场景则通常仍选 ERC-721——买家要的是“这一张”的明确唯一性,跨市场兼容也更好。想了解单张标准的接收安全检查细节,可以读ERC-721 接收检查失败详解;跨标准对比的总览在ERC-721 与 1155 对比

常见问答

问:ERC-1155 的 NFT 能不能在 OpenSea 类市场挂单?

主流市场多数支持浏览和交易 ERC-1155,但对数量大、同质单位的挂单体验差异明显:有的按“1 个单位”挂,有的支持改数量,版税显示也可能不完整。卖前先在目标市场实测一笔小额,不要假设 ERC-721 的体验可以平移。

问:同一合约里怎么区分唯一道具和普通材料?

标准没有为此规定专门字段。常见做法是把唯一道具的种类数量上限设为一、或额外实现铸造限制,让“数量上限为一”充当事实上的唯一性声明。但这只是惯例:真正的唯一性要看合约的铸造逻辑与链上历史,不能只看种类编号长得像。

问:一个合约装了上千种道具,读起来会不会很乱?

合约状态确实比 ERC-721 密集,但工具链通常按种类展开给你看。尽调重点放在三点:该种类的铸造上限与权限、有没有销毁函数(数量可变会稀释你的单位占比)、市场端对该种类的支持实测。种类编号与图片的对应关系建议在个人台账里留一份映射表,日后查历史更省事(参见记录管理)。

风险提示

本文为技术标准科普,不构成投资建议。半同质化代币的价值与流通性取决于项目实现与市场接受度,标准兼容不代表交易体验一致,操作前请以合约行为与平台规则为准。