什么是 ERC-1155?
ERC-1155 是一个在单一智能合约里同时支持 同质化代币(FT)、非同质化代币(NFT) 与 半同质化代币(SFT) 的以太坊协议。它突破性地将过去必须逐条部署的 ERC-20、ERC-721 写法整合到一个合约,极大节省链上资源,降低发行方的 Gas 成本,因此也被称为“多代币标准”或“Multi Token Standard”。
ERC-1155 诞生的动机
传统协议的最大痛点在于 “一类型一合约”。
—— 发行 1 万张不同装备,就要部署 1 万个合约;每次空投也只是 1 对 1 的单笔交易。
区块链游戏、元宇宙及 DeFi 衍生品日益复杂,链上拥堵与费用高昂的反噬开始显现。
ERC-1155 用以下组合拳解决:
- 批量转移:一次交易可完成数千笔代币发送
- 共享存储:一张合约管理无限 tokenID
- 降低 Gas:大量节省字节码与状态存储
其核心关键词:多代币标准、批量转移、NFT+FT 同合约、Gas 优化、区块链游戏。
技术规范精要
1. 核心接口
任何 ERC-1155 合约 必须实现 下表列出的 6 个事件/函数,并返回 ERC-165 supportsInterface 为 true(0xd9b67a26)。
| 函数 / 事件 | 作用 |
|---|---|
safeTransferFrom | 单类代币安全转移 |
safeBatchTransferFrom | 多类代币批量安全转移 |
balanceOf | 查询单个余额 |
balanceOfBatch | 查询多个余额 |
setApprovalForAll / isApprovedForAll | 对整包代币授权或撤权 |
TransferSingle / TransferBatch | 事件:记录所有变更 |
2. ERC-1155 Token Receiver
接收者 若是合约地址,需额外实现 ERC1155TokenReceiver 接口,否则交易会 回滚,保证资产安全:
onERC1155Received:单代币接收onERC1155BatchReceived:多代币接收
返回特定 bytes4 魔法值表示成功接收,防止 “丢币黑洞”。
⚔️ 想立刻体验多代币钱包或 DApp 自带的安全接收流程?👉 探索实战示例与合约模板
3. 元数据(Metadata)
- URI 字段支持
{id}占位符,链下 JSON 可统一维护。 - JSON 需符合 “ERC-1155 Metadata URI Schema”,包含
name、description、image、decimals等。 - 如需多语言,可在 JSON 内添加
localization字段,客户端按用户地区自动加载。
4. 批量转移与安全回调的 8 类场景
设计文档列出 8 种可能场景 —— 小到正常转账、大到 hook 回调失败、混合标准兼容等 —— 全部通过 事件 + 余额检查 提供可追踪日志。
这保证:任何第三方探针仅用 event 就能重现状态。
5. Mint & Burn
- Mint 时
_from = 0x0 - Burn 时
_to = 0x0 - 零值事件也要求 emit,方便交易所统计真实流通量。
五大设计决策
- 仅用安全转移(safe transfer only):避免接收者无意间丢币。
- 不返回 symbol 字段:简约链上,让
URIJSON 托管复杂信息。 - 支持单个 + 批量函数:不强制 batch,但批量更高效。
- 强制事件轨迹:任何状态变动 必留痕,利于链下探针重建。
- “一揽子”授权:
setApprovalForAll解决频繁授权痛点;如需细分可用 ERC-1761。
链上实际用例
区块链游戏
《The Sandbox》使用 ERC-1155 一次部署上万种游戏资产,用户交易时把武器、土地、货币混合在一个批次,调用 safeBatchTransferFrom,Gas 降低约 80%。
DeFi & 收益债券
将抵押产生的利息代币化为 FT,再把特定仓位凭证做成 NFT。同一个合约即可分红 + 铸造 Positional NFT,大幅缩短产品迭代周期。
数字门票
演唱会主办方离线发行带有 {id} 占位符的门票,用户扫码时链下系统可即时加载座位、排期、票面图,动态和本地化一次搞定。
🚀 想亲手部署这样一套多代币合约?👉 立即克隆开源示例项目
FAQ
Q1:ERC-1155 与 ERC-721 必须二选一吗?
A:不用。同一地址上可同时持有 ERC-721 和 ERC-1155 资产,只是合约层面要处理好 onERC721Received / onERC1155Received 的交叉调用。多数主流钱包已内置兼容。
Q2:NFT 上限还能与 Game Token 叠加吗?
A:采用 Split ID bits 模式,借用 uint256 的前 128 位当套装 ID,后 128 位当唯一标识符即可,合约端用一个清晰的位移就能解包。
Q3:批量转移失败怎么办?
A:若数组内任一项余额不足或返回非法值,整笔交易直接回滚;确保前端提前做充分的 pre-check 与模拟估算(estimateGas)。
Q4:可以只给用户授权很少资产吗?
A:当前标准采用“全或无”的 setApprovalForAll。需要分片授权可结合 [ERC-1761 Scoped Approval];不过该方案会多出链上限额和到期时间字段。
Q5:合约升级后旧日志是否作废?
A:如果换地址,必须在新地址补发事件还原最终状态;若想保持同一地址,可引入 EIP-2535 Diamond Proxy 进行热升级。
Q6:链下 JSON 挂掉怎么办?
A:标准并未拘泥存储位置,推荐 IPFS/Arweave 等去中心化存储,同时保留 HTTPS 回退;丢失文件不影响链上所有权,仅丧失可读元数据。
快速上手小贴士
- 合约地址别用 1、2、3 递增的 tokenID,给非同质部分保留高区段,省去未来合并工作。
- 批量操作时用
balanceOfBatch先查,调safeBatchTransferFrom一步到位,前端展示只需监听TransferBatch最新块即可。 - 部署时补发一次
TransferSingle(from = 0x0, to = 0x0, id = newToken, value = 0)广播代币存在,交易所能即刻识别。
ERC-1155 用最简洁的动作征服最复杂的资产用例,同时为面向海量用户的 区块链游戏、社交生态、金融创新 打好了底座。掌握它,就等于掌握了走向下一代 Web3 的最佳通行证。