上一期我们拆解了ERC-721——那套让每一枚Token拥有唯一身份的“身份证”标准。ERC-721的哲学是“独一无二”:你的CryptoPunk和我的CryptoPunk,虽然同属一个系列,但每一枚都有自己的ID、自己的头像、自己的价格。
但ERC-721有一个令游戏开发者极其头疼的问题。想象一下:你正在做一款角色扮演游戏,里面有金币(无限量,每枚都一样)、药水(有限量,但同款可以叠加)、稀有皮肤(一款1000份,每份半同质化)、传奇武器(限量100把,每把有独立编号但属性相同)、还有独一无二的神器(全服仅此一件)。
如果用ERC-721来发行,每一种道具都需要部署一个独立的合约。一个稍具规模的游戏可能涉及几百种道具,意味着几百份合约。维护成本高得离谱,批量操作(比如一次交易把10种道具打包出售)更是需要发起10笔独立的链上交易,Gas费轻松突破几百美元,用户体验堪称灾难。
这就是今天的主角——ERC-1155诞生的直接原因。它被设计出来回答一个朴素但致命的问题:能不能用一个合约,同时管住一万种不同类型的资产?
一、ERC-1155的核心思想
1. 概念起源:谁的发明?
ERC-1155的故事始于2018年。当时,区块链游戏公司Enjin的CTO Witek Radomski注意到一个日益严重的问题:ERC-20和ERC-721各管各的,游戏开发者要么为每一种道具部署一个新合约,要么把几十个合约地址在后台勉强串联起来,开发体验极其碎片化。
Radomski向以太坊社区提交了一份新的代币标准提案,核心主张简单而大胆:让一个合约内部,每个Token ID代表一种独立的“资产类型”,同质化的可以像金币一样叠加数量,非同质化的可以像神器一样唯一存在,半同质化的可以有限量但同类堆叠。
2019年6月,该标准被以太坊社区正式采纳为官方标准。Enjin后来也围绕ERC-1155构建了一整套数字资产生态,使开发者能够在同一合约中处理多种游戏道具与NFT。
2. 最简单的理解框架:“资产ID + 数量”模型
ERC-721的查询逻辑是“这个地址是不是某枚特定NFT的主人”——有就是1,没有就是0。
ERC-1155的逻辑更接近一个三维表格:
行 = 用户地址
列 = 资产ID(每种道具一个ID)
值 = 这个用户持有的该资产的数量
金币(ID#0)可能有几十亿的供应量,用户A持有3,500枚;传奇宝剑(ID#99)总量只有100把,用户A持有1把;绝版神器(ID#666)全球仅1个,用户B持有它,余额为1,其他所有人的余额都是0。
一个合约,一个地址,同时管理着同质化代币(FT)、非同质化代币(NFT)和半同质化代币(SFT)。这就是ERC-1155与ERC-721最本质的架构差异。如果用一句话概括:ERC-721是一个Token对应一个资产,ERC-1155是一个合约对应一个资产世界。
3. 一个直观对比
| 维度 | ERC-721 | ERC-1155 |
|---|---|---|
| 合约-资产关系 | 一个合约 = 一个系列(每枚NFT独立ID) | 一个合约 = N种资产类型(每个TokenID独立属性) |
| 同质化支持 | 不支持 | 支持(FT、NFT、SFT混在一约) |
| 批量操作 | 每枚代币需单独交易 | 一次交易可处理多个资产ID |
| 元数据方式 | 每枚NFT一个独立URI | 每个TokenID一个URI,支持模板化替换 |
| 授权方式 | 按单枚NFT授权 | 一次授权覆盖合约下所有资产ID |
二、99%的Gas成本是怎么省下来的?
1. ERC-1155的核心函数
ERC-1155合约必须实现一组核心函数,其中最关键的是两个批量函数:
safeBatchTransferFrom:一次交易转移多种资产——比如同时把ID#1(金币)×500、ID#5(药水)×20、ID#99(宝剑)×1打包发给同一个接收地址。balanceOfBatch:一次查询多个用户对多个资产ID的余额——比如一次性拉取10个用户各持有5种道具的库存,而不是发起50次链上查询。
此外,还有setApprovalForAll函数——一次授权某个操作员管理你名下所有资产ID的转移权限,而不是像ERC-721那样需要对每一枚NFT逐个approve。这在DeFi场景下极其重要:一笔批量交易可能在Aave中跨多个ID结算多个仓位。
2. Gas效率:一组数据说明问题
开发者社区中有一句被反复引用的格言:如果你想铸造1000枚相同的道具,用ERC-721需要部署一个合约并在循环中调用1000次mint;用ERC-1155只需要部署一个合约,铸一枚总量为1000的同质化TokenID。
具体数据:调用一次safeBatchTransferFrom即可转移10种不同的资产,而ERC-721需要调用10次不同的合约和10次transfer函数,Gas成本相差数倍。
标准定义中明确提出了防止冗余字节码堆积的设计目标——“ERC-20和ERC-721需要为每种代币类型单独部署合约,这会在区块链上堆积大量重复字节码,并通过将每个代币合约隔离在自己的权限地址中限制功能。”而根据游戏NFT的开发者指南数据,在特定交易场景下,ERC-1155相比ERC-721可将Gas费降低超过90%。
这里需要特别说明一点:ERC-1155的效率优势主要体现在批量操作和合约部署层面——单个TokenID的单次转账,Gas成本并不一定比ERC-721低。 它的真正价值在于“一次做多件事”的能力。根据2026年的行业观察,当用户需要频繁移动多个ID时,ERC-1155的批量原始函数可以显著节省Gas并简化索引。
3. 半同质化:一个被严重低估的设计
除了批量操作,ERC-1155最被低估的设计是半同质化。
什么叫“半同质化”?想象一张演唱会门票。在购买之前,它只是一个“库存单位”——全场第437号座位,跟第438号座位本质上没有区别。但一旦被售出,它就变成了“一张独一无二的凭证”——上面附着了一个具体的座位号、一个具体的持有者、一个独立的入场记录。同一个资产,在不同的阶段,从一个“通用的数量”变成了一件“唯一的物品”。
ERC-1155的TokenID架构天然支持这种形态切换:ID#25(VIP门票)初始总量500张,发行时按同质化处理;但一旦售出,每张门票可以通过safeTransferFrom单独流转,甚至附加动态元数据来记录座位号、入场状态和转售版税。
这种“被兑换或升级前像同质化资产一样运作,之后变得独一无二”的模式,非常契合游戏掉落、门票兑换和会员资格等场景。
三、游戏战场
如果说ERC-721是数字艺术和收藏品的“标准母语”,那么ERC-1155就是游戏的“操作系统”。游戏是ERC-1155最高频的应用领域,原因很简单:游戏天然就是“多资产系统”。 一款大型网游可能有几百种货币、上万种装备、数十万种道具。如果用ERC-721的“每资产独立合约”模式来搭建,合约部署和维护的成本足以劝退任何有野心的团队。
1. 为什么游戏需要多代币合约
在区块链游戏中,ERC-1155允许金币、药水、门票作为同质化代币(可叠加、可分割),稀有皮肤、独特坐骑作为非同质化代币(限量、不可分割),全部放在同一个合约下。玩家在交易市场里可以一次出售多个物品,平台也能一次结算多种资产ID。
截至2025年,ERC-1155相关的游戏NFT优化研究显示,超过70%的NFT平台已经认识到批量铸造和懒铸造(Lazy Minting)技术在降低用户门槛方面的优势。而在跨游戏资产互操作性领域,2026年的一篇行业分析指出,ERC-1155允许单个合约管理多种代币类型,对拥有数千种道具的游戏来说高效至极——开发新RPG的程序员可以创建集成系统,识别来自其他游戏的NFT并将其属性映射到自己宇宙中的等效道具,一把传奇宝剑可能变成等离子步枪。
2. 一个生动的案例:Illuvium的资产迁移
2025年12月,知名链游Illuvium宣布将所有资产迁移至Immutable zkEVM链。在这次迁移中,Illuvium做了一个意味深长的调整:独特资产(Illuvials、Illuvitars、Land Plots)保持ERC-721标准;但所有非唯一资产(武器、装备、皮肤、表情、蓝图、消耗品)全部从ERC-721切换为ERC-1155。
为什么?Illuvium的官方解释非常直白:在ERC-721模式下,完全相同的物品被表示为独立的代币,导致“库存杂乱、交易缓慢、与多物品交互产生不必要的摩擦”。切换到ERC-1155后,“相同物品可以堆叠,通过订单簿更高效地交易,并支持批量操作(比如一次性打开多个磁盘)”。
这个案例最耐人寻味的地方在于:Illuvium不是“建的时候选了ERC-1155”——它是“已经用ERC-721跑了好几年,回头发现跑错了,才花钱花时间迁移到ERC-1155”。 这比任何理论分析都更有说服力。当一个已经投产、拥有真实用户的游戏项目愿意付出迁移成本来切换标准时,说明ERC-1155在游戏领域的效率优势不是纸上谈兵,而是真金白银的运营账算出来的。
3. 跨游戏互操作性:2026年的新趋势
2026年,区块链游戏领域出现了一个重要的新叙事:跨游戏资产互操作性——你在游戏A中拥有的某个ERC-1155道具,可以在游戏B中被识别并赋予不同的功能。核心实现路径正是ERC-1155的“多资产统一容器”特性:每个TokenID携带独立的元数据和属性字段,外部合约可以通过统一接口读取任何游戏资产的元数据并进行跨世界映射。虽然目前仍处于早期探索阶段,但ERC-1155作为底层技术框架的位置已经稳固。
四、批量操作带来了新的攻击面
任何技术标准都不是完美无缺的,ERC-1155也带来了自己独特的安全隐患。
1. 接收回调函数带来的重入攻击
ERC-1155标准中包含一个“安全接收”机制:当Token被转移到一个合约地址时,会调用接收合约的onERC1155Received或onERC1155BatchReceived函数进行确认,确保接收方确实有能力处理这些资产。这本来是一个保护机制——防止Token被误转入不兼容的合约而永久锁死。
但这个机制也打开了一道门:接收方可以在回调函数中执行任意代码。如果在转账过程中,接收方在回调里重新调用发送方的函数,而此时发送方的状态还没有更新完毕,就构成了重入攻击(Reentrancy Attack)。
Ackee Blockchain在2025年的一份安全报告中给出了一个极具代表性的实例:某金库合约的mint函数对外调用了IERC1155Receiver(to).onERC1155Received(),而这个调用发生在fnftsCreated计数器更新之前——攻击者在回调中重新进入创建流程,以极低的成本获得了远超正常价格的ETH提现权限。当攻击者调用withdraw函数销毁NFT时,实际取出的ETH金额是按被操纵后的高价计算的:nftPrice[id]已被恶意调高为一个大值,nftAmount是攻击者持有的全部NFT数量,两者相乘即为可提取的ETH总额。
OWASP智能合约安全项目将此列为专门的安全漏洞类别(SCWE-138:重入攻击 via ERC-721/ERC-1155 Safe Transfer Callbacks),指出ERC-1155的safeTransferFrom在接收方合约中触发onERC1155Received,如果接收方在这些回调中执行敏感逻辑且没有防重入保护,攻击者就可以在转账过程中重新进入发送方合约,利用旧状态进行二次操作。
2. 防御最佳实践
社区已经形成了成熟的防御框架。最核心的三条建议是:
- 在涉及NFT转账的函数上添加
nonReentrant防护锁,阻断重入; - 先更新内部状态,后执行外部调用(Checks-Effects-Interactions模式)——必须在调用
safeTransferFrom之前先更新余额、会计和业务状态,确保即使回调被重入,函数看到的已经是更新后的最新状态; - 当接收方可信时,使用
transferFrom而非safeTransferFrom,避免触发回调。
值得注意的是,这些问题并非ERC-1155本身的缺陷,而是“灵活性的代价”——能够被外部合约调用和响应,意味着更大的组合能力,也意味着更多的攻击面。这提醒开发者在使用这些标准时务必谨慎,务必利用经过审计的成熟库(如OpenZeppelin的实现)作为起点。
3. “Semi-Fungible”属性带来的归属追踪难题
另一个被NFT艺术家和技术社区讨论的潜在问题是:ERC-1155的“总量控制 + 多用户持有”模式使得单枚代币的所有权路径比ERC-721更难追溯。在ERC-721中,每枚NFT从铸造、转到转出,每一步都在链上形成一条清晰的单向所有权链条,任何人都可以回溯查看。而在ERC-1155中,当你持有某个TokenID(比如ID#25门票)的100份时,你持有的不是“第1枚到第100枚”,而是一个抽象的数量——你无法精确追踪“我手里的第3张票是从谁手里转来的”。对需要精确溯源场景(如艺术品收藏中的provenance履历),这可能是一个隐性劣势。
五、RWA、数字票务与安全代币
ERC-1155在游戏领域的统治力有目共睹,但它的能力其实远远不止于此。
1. 代币化现实资产(RWA)
以太坊社区提出了ERC-7518动态合规互操作安全代币标准,该提案基于ERC-1155扩展,引入了“Partition(分区)”概念——同一份合约内通过不同TokenID可以建立不同的资产分区,每个分区独立设定合规规则和转账限制。举例来说:在房地产代币化的场景中,同一栋楼的不同楼层可以分配不同的TokenID,每个楼层内部又可以切分为多个同质化份额。
这一能力使ERC-1155在代币化现实资产(RWA)领域具有明显的结构性优势。正如我们在第十四期讨论的,代币化RWA市场在15个月内增长了256.7%,ERC-1155的“多资产合一容器”特性恰好满足了RWA资产最常见的结构——一个底层资产,多种权益分层,不同合规要求。
2. 数字票务与NFT收藏品
另一个高频应用是数字票务和收藏品市场。同一场音乐会可能有普通票(FT,总量几千张)与VIP纪念票(NFT,每张独立编号),ERC-1155把两类票放进一个合约,售票、转让与验票流程更顺畅。
传统的NFT市场平台也已深度集成了ERC-1155。OpenSea支持ERC-1155的懒铸造功能,让创作者可以在没有前期成本的情况下起步,这对于大型收藏品系列或预算有限的创作者来说尤其友好。
六、从可编程的身份到资产组合
从第一期的“Token是可编程的价值表示层”,到此前的十五期——我们拆解了共识机制、智能合约、私钥、UTXO、稀缺性、通胀、销毁、时间加权、流动性质押、胖协议与胖应用、TVL、ERC-20的同质化世界、ERC-721的唯一性世界。每一期都在追问同一个核心问题:Token到底能表示什么?
第十四期——ERC-20——给出的答案是:“Token可以表示可互换的通用价值单位。”
第十五期——ERC-721——给出的答案是:“Token可以表示不可互换的独特权利凭证。”
而今天,第十六期——ERC-1155——给出的答案更进一步:“Token可以表示任意多种资产的可编程组合,无论它们是同质的、非同质的,还是介于两者之间的。 ”
ERC-1155在整个Token标准体系中处于一个独特的位置:它不是在替代ERC-20或ERC-721,而是在为它们提供一个共同的“容器”。 如果说ERC-20是“数字水分子”——每一滴都一模一样;ERC-721是“数字雪花”——每一片都独一无二;那么ERC-1155就是一个“数字分子工具箱”——同一个工具箱里,可以装水,可以装雪花,也可以装那些“这一批都一样、但跟另一批不一样”的半同质化材料。
这也是为什么ERC-1155对Token的角色定义产生了一次微妙但重要的深化:Token不再只是一个“资产单元”,而变成了一个“资产管理系统”。 你持有的不再是一枚代币,而是一个“资产组合”——在这个组合里,不同ID代表不同类型、不同属性、不同规则的价值载体。