什么是 ERC-1155 多代币标准?
ERC-1155 是一种 Ethereum 代币标准,允许一个智能合约同时管理多种代币。一个 ERC-1155 合约可以代表同质化代币、非同质化代币、半同质化代币,或这些资产类型的组合。官方 ERC-1155 规范规定了标准化的余额查询、单笔转账、批量转账、操作员授权、接收方回调、事件和可选元数据。
ERC-1155 被归类为 Final 状态的 Ethereum 评论征求意见(ERC)标准。它通常被称为多代币标准,因为一个合约中的每个代币 ID 都可以代表一种独立的加密资产。每个代币 ID 都可以拥有独立的供应量、余额、元数据、稀有度、用途和经济特征。ERC-1155 旨在降低部署和交互操作大量区块链资产的成本与复杂性。为什么创建 ERC-1155?
早期代币模型通常需要为不同的同质化资产或 NFT 系列分别部署合约。因此,包含数百种货币、资源、武器、角色和活动道具的区块链游戏可能需要许多合约。重复部署合约会增加字节码、管理、集成工作和交易成本。ERC-1155 将多种代币类型纳入一个合约,并为其采用统一的转账和授权系统。它还支持标准化批量操作,可在一笔交易中转移多个代币 ID。因此,该标准适用于游戏、数字收藏品、会员系统、代币化库存、金融头寸、奖励计划,以及其他包含多种资产类别的加密应用。该标准并不限于游戏,只要合约需要高效管理多种代币类型,便可使用 ERC-1155。ERC-1155 的工作原理
ERC-1155 合约会针对每个账户地址与代币 ID 的组合分别记录余额。在同一合约中,一个地址可以持有 10 个 ID 为 1 的代币、1 个 ID 为 2 的代币,以及 0 个 ID 为 3 的代币。每个代币 ID 都可以作为同质化资产、独一无二的 NFT,或供应量有限且可互换的资产。代币转移时,合约会扣减发送方对应 ID 的余额,并增加接收方相应的余额。合约会发出标准化事件,方便钱包和索引器还原代币的创建、转账和销毁记录。如果接收方是智能合约,ERC-1155 合约会调用接收方函数,确认其接受这些资产。Ethereum 节点会执行这些规则,并根据已部署的合约代码验证余额变动。ERC-1155 中的代币 ID 是什么?
代币 ID 是一个无符号整数,用于标识 ERC-1155 合约中的一种代币类型。另一个合约中可以存在相同的代币 ID,但它不一定代表相同资产。因此,ERC-1155 资产需要通过区块链网络、合约地址和代币 ID 共同识别。在一个合约中,ID 为 25 的代币可能代表游戏资源;在另一个合约中,它则可能代表独特的收藏品。该标准不要求 ID 从 0 开始、按顺序递增,或编码特定含义。开发者可以根据应用架构分配 ID。应用应查询可靠的合约数据,而不是猜测哪些代币 ID 存在。ERC-1155 中的同质化代币
如果某个代币 ID 存在多个可互换单位,它就可以代表同质化资产。例如,ID 为 1 的代币可以代表一种游戏货币,包含 100 万个相同单位。每位持有者都有与 ID 为 1 的代币对应的数量余额。同一 ID 的单位通常具有相同的合约定义属性。与 ERC-20 不同,ERC-1155 核心接口不会为每个代币 ID 单独定义总供应量、符号、名称或 decimals 函数。项目需要通过扩展、元数据或自定义函数提供所需的供应量或展示信息。ERC-1155 中的非同质化代币
如果某个 ID 的供应量限制为 1 个单位,它就可以代表非同质化资产。持有这唯一一个单位的地址可视为该代币的所有者。同一合约中的另一个代币 ID 可以代表其他独特物品。例如,ID 为 1001 的代币可以代表一把剑,而 ID 为 1002 的代币可以代表一块虚拟土地。核心标准不会强制要求代币 ID 的最大供应量为 1。如果某个 ID 要作为 NFT 使用,合约的铸造逻辑必须确保其唯一性。半同质化代币
半同质化代币最初包含可互换单位,但之后可能获得不同含义或有限用途。活动门票是一个常见例子:活动开始前,同一分区的多张门票可能可以互换。使用后,每张门票都可以成为与特定体验相关的收藏记录。具有限量版本或状态变化的游戏道具也可以采用半同质化模型。ERC-1155 不会正式将 ID 分类为同质化、非同质化或半同质化。代币的分类取决于供应量、元数据、转账规则和应用设计。ERC-1155 核心函数
核心接口包含用于查询余额、转移代币和管理操作员授权的函数。必需函数包括
balanceOf 函数
这也与 ERC-721 不同:ERC-721 的
balanceOfBatch 函数
safeTransferFrom 函数
转账成功后会发出
safeBatchTransferFrom 函数
批量转账成功后会发出一个
批量转账的重要性
批量转账可以通过一笔区块链交易转移多种资产。游戏用户可以一次转移货币、材料、护甲和收藏品。应用也可以在一次操作中向同一接收方发放多种奖励。与提交多笔独立交易相比,批处理可以减少重复交易开销并降低总成本。具体节省多少取决于 ID 数量、合约实现、存储变动、网络状况和接收方逻辑。批次过大仍可能消耗过多 Gas,并因区块 Gas 上限而失败。应用应对用户控制的批次大小设定合理限制。ERC-1155 操作员授权
ERC-1155 使用针对整个系列的操作员授权模型。isApprovedForAll 函数
返回值为
细粒度授权扩展
如果用户只想授权特定代币 ID 或数量,ERC-1155 的广泛授权模型可能并不合适。其他标准或自定义合约可以提供范围更窄的权限。ERC-5216 授权额度扩展规定了针对特定 ERC-1155 代币 ID 的授权数量。
是否支持此类扩展由实现方自行决定,不能默认其一定存在。钱包必须明确区分针对有限代币 ID 的授权额度与标准的全系列授权。ERC-1155 接收方接口
通过标准安全转账接收 ERC-1155 代币的智能合约必须实现相应的接收方函数。接收方接口包括用于单笔转账的
接收方接口的 ERC-165 标识符为
单笔转账接收方回调
单笔转账时,接收方余额更新后会调用
预期的接受值为
批量转账接收方回调
预期的接受值为
接收方回调与重入
ERC-1155 接收方回调会在原转账交易完成前执行外部合约代码。接收合约可以在回调期间再次调用代币合约或其他应用。这可能形成重入路径。ERC-1155 规范要求在调用接收方钩子前更新余额和转账事件。应用合约仍需保护自身的记账和授权逻辑。当预期逻辑允许时,开发者应遵循 Solidity 安全指南,在外部交互前完成检查和重要状态变更。
开发者应使用尝试同函数和跨函数重入的恶意合约,测试这两个接收方函数。ERC-1155 事件
核心标准定义了
TransferSingle 事件
TransferBatch 事件
ApprovalForAll 事件
ERC-1155 接口检测
ERC-1155 要求支持 ERC-165 接口检测标准。ERC-1155 核心接口 ID 为
兼容合约在使用该值调用
ERC-165 标准规定了智能合约如何公布和检测受支持的接口。
接口检测有助于应用避免调用不受支持的函数。合约可能虚报支持或错误实现函数,因此返回肯定结果并不能完全保证安全。ERC-1155 元数据
ERC-1155 包含可选的元数据 URI 扩展。该扩展增加了
其接口 ID 为
与 ERC-20 和 ERC-721 元数据接口不同,ERC-1155 核心设计不要求链上提供
{id} 元数据替换
ERC-1155 元数据 URI 可以包含占位符
该值必须包含 64 个字符,包括前导零,且不能包含
元数据存储风险
ERC-1155 元数据可以存储在传统服务器、内容寻址网络或链上。服务器托管的内容可能被修改或消失。当标识符与文件匹配时,内容寻址存储可以提高完整性,但仍依赖内容持续可用。链上元数据可降低对外部托管的依赖,但会增加存储和部署成本。可变合约 URI 可能在用户获得代币后更改名称、图片、属性或描述。用户应检查哪些主体有权更改元数据,以及所引用内容是否预计会持续可用。铸造 ERC-1155 代币
铸造会创建代币单位并将其分配给某个地址。ERC-1155 核心接口不定义公开铸造函数。每种实现都自行决定谁可以铸造、可以创建哪些 ID,以及是否设有供应量限制。铸造时必须发出
销毁 ERC-1155 代币
根据合约实现,销毁会从余额中永久移除代币单位。核心接口不要求提供公开销毁函数。项目可以允许持有者、获批操作员、管理员或其他协议逻辑销毁资产。销毁时必须发出相应转账事件,并将接收方设为零地址。销毁某个 ID 的全部现有单位,并不一定会阻止合约再次铸造该 ID。结果取决于合约的供应量和访问控制规则。ERC-1155 总供应量
ERC-1155 核心标准没有定义
当前的 ERC-1155 实现 API包含一个可选扩展,可按代币 ID 追踪总供应量。
应用不应假设每个 ERC-1155 合约都提供相同的供应量函数。ERC-1155 枚举
ERC-1155 没有定义用于列出所有代币 ID 或持有者的核心函数。该标准预期链下系统根据
ERC-1155 版税
ERC-1155 核心标准不定义创作者版税。可选的 ERC-2981 版税标准可以为代币销售提供版税接收方和建议支付金额。
ERC-2981 兼容 ERC-1155,并可设置默认版税信息或特定代币的版税信息。该标准会传达付款信息,但不会强制每个应用都支付版税。如果实现赋予管理员相关权限,版税设置也可能被更改。ERC-1155 标准化错误
原始 ERC-1155 标准没有定义现代 Solidity 自定义错误。Final 状态的 ERC-6093 标准为 ERC-1155 实现定义了常见错误。
其中包括余额不足、发送方无效、接收方无效、缺少操作员授权、操作员无效以及数组长度不匹配等错误。标准化错误有助于钱包和开发者以一致方式说明交易失败原因。现有 ERC-1155 合约无须采用这些错误。ERC-1155 与 ERC-20
ERC-20 通常由每个合约代表一种同质化代币。ERC-1155 则可以在一个合约中代表多种同质化和非同质化代币 ID。ERC-20 使用针对单个支出方的数字授权额度,而 ERC-1155 核心功能使用面向整个系列的操作员授权。ERC-1155 支持标准化批量转账和接收方回调。ERC-20 核心标准不提供这两种功能。如果项目只需要一种同质化加密资产,ERC-20 可能仍然更简单。ERC-1155 与 ERC-721
ERC-721 代表由个人持有的非同质化代币 ID。一个有效的 ERC-721 代币 ID 只有一个所有者,而不是为每个账户记录数量余额。ERC-1155 则会为每个账户与代币 ID 的组合记录数量。因此,同一合约中的一个 ID 可以有多个可互换单位,而另一个 ID 的供应量可以为 1。ERC-1155 还支持标准化批量转账,而 ERC-721 通常一次转移一个 NFT。如果每个代币都是独一无二的,ERC-721 可以提供更简单的所有权模型。ERC-1155 的使用场景
区块链游戏可以使用一个 ERC-1155 合约管理货币、材料、角色、武器、土地和限量版道具。活动系统可以通过一个合约发行多个类别和数量的门票。会员项目可以通过不同代币 ID 管理不同访问级别、有效期群组或权益套餐。数字收藏品项目可以为每件作品创建包含多个可互换副本的版本。金融应用可以使用 ID 代表到期日、风险组、索赔或头寸类别。奖励系统可以通过一次批量操作发放多种积分或成就道具。该标准不会验证任何代币是否代表有效的法律权利或现实世界资产。授权钓鱼风险
恶意应用可能会要求用户调用
批量处理风险
批量操作会处理数组,数组元素必须保持正确对应。ID 与数量不匹配时,交易应当失败。索引错误可能导致转移错误数量的资产。批次过大可能超过交易 Gas 限制,或造成拒绝服务问题。接收方在经济上可能接受某些代币 ID,却不接受其他 ID,因此必须在确认接收前验证整个批次。应用应限制批次大小,并根据实现规则测试重复或未排序的代币 ID。接收方与重入风险
安全转账会在余额更新后调用外部接收方代码。恶意接收方可能尝试重入铸造、转账、销售、质押、借贷或提现函数。即使某个函数使用了重入保护,如果其他函数暴露了相关状态,合约仍可能存在漏洞。开发者应确保单笔和批量操作采用一致的状态转换逻辑。接收方回调应验证调用方代币合约,不应自动信任用户提供的数据。安全测试应包括嵌套转账、转发接收方、回滚回调和跨合约交互。供应量与真实性风险
某个 ERC-1155 代币 ID 可能因为当前只有一个单位而看似独一无二。但获授权的铸造者之后仍可能创建更多单位。其他合约也可能复制系列名称、图片或代币 ID。合约地址和网络是资产身份的重要组成部分。在依赖稀缺性声明前,用户应检查铸造权限、供应量扩展、管理员权限和升级控制。符合 ERC-1155 标准并不能证明真实性、背书、稀有度或金融价值。可升级合约风险
ERC-1155 合约可能通过可升级代理运行。获授权管理员可能可以更改铸造、转账、授权、元数据、费用或接收方行为。升级可以修复缺陷,但也可能引入恶意或不安全代码。升级密钥遭到泄露,可能使合约中的所有代币 ID 面临风险。用户应检查升级权限、时间延迟、多重签名要求和紧急控制措施。合约可以支持正确的接口,同时仍保留强大的中心化权限。开发者如何实现 ERC-1155
除非有充分理由,否则开发者应采用经过持续维护和审查的实现,而不是自行重写敏感的余额逻辑。当前的 ERC-1155 开发指南提供了核心合约,并说明多代币余额和批量操作。
铸造和管理函数应采用明确的访问控制。供应量限制应通过合约逻辑执行,而不能只写在项目文档中。开发者应发出所有必需事件,并返回正确的 ERC-165 接口值。测试应覆盖单笔转账、批量转账、授权、销毁、铸造、数组不匹配、无效接收方、恶意回调和元数据变更。用户如何评估 ERC-1155 代币
第一步是验证区块链网络、合约地址和代币 ID。第二步是确认该 ID 设计为同质化、非同质化还是半同质化代币。第三步是检查当前供应量、铸造权限和供应量上限。第四步是检查与钱包关联的操作员授权。第五步是查看元数据的存储方式,并判断其是否可以更改。第六步是确认管理员、暂停、冻结和升级权限。第七步是查看审计和已验证源代码,但不要将其视为安全保证。第八步是确认代币实际提供哪些权利或用途。第九步是了解接收方回调或外部合约是否会带来额外风险。第十步是先用少量资产测试不熟悉的合约,再转移有价值的资产。ERC-1155 批量转账示例
假设 Alice 持有 100 个 ID 为 1 的代币、5 个 ID 为 2 的代币,以及 1 个 ID 为 3 的代币。她想向 Bob 转入 10 个 ID 为 1 的代币、2 个 ID 为 2 的代币,以及 1 个 ID 为 3 的代币。她的钱包会调用
合约会发出一个
如果 Bob 是智能合约,代币合约会调用
常见 ERC-1155 错误
一个常见错误是认为每个 ERC-1155 代币 ID 都是 NFT。另一个错误是认为某个代币 ID 的最大供应量为 1。第三个错误是在不了解授权涵盖合约内所有 ID 的情况下授予操作员权限。第四个错误是认为断开钱包连接就会移除链上授权。第五个错误是把元数据可用视为代币存在的证明。第六个错误是认为 ERC-1155 为每个 ID 定义了总供应量函数。第七个错误是在处理批量数组时没有检查数组长度和位置是否对应。第八个错误是忽视外部接收方回调和重入问题。第九个错误是认为版税可以自动强制执行。第十个错误是把接口兼容性视为真实性、稀缺性或安全性的证明。常见问题
ERC-1155 是什么意思?
ERC-1155 是 Ethereum 的多代币标准,可在一个合约中管理多种同质化、非同质化和半同质化代币。ERC-1155 是加密货币吗?
ERC-1155 是一种技术标准,而实现该标准的合约可以创建多种加密资产。ERC-1155 接口 ID 是什么?
ERC-1155 核心接口 ID 为
ERC-1155 接收方接口 ID 是什么?
接收方接口 ID 为
ERC-1155 可以创建同质化代币吗?
可以。一个代币 ID 可以拥有多个可互换单位,并分配给多个账户。ERC-1155 可以创建 NFT 吗?
可以。如果合约将某个代币 ID 的供应量限制为 1,该 ID 就可以作为 NFT 使用。什么是半同质化 ERC-1155 代币?
它是一种在某种情境下具有可互换单位,但之后可能获得不同含义、状态或用途的代币。一个 ERC-1155 合约可以包含多种资产吗?
可以。一个合约可以管理许多拥有不同供应量、元数据和用途的 ID。balanceOf 会返回什么?
它会返回某个账户持有的指定 ERC-1155 代币 ID 的数量。balanceOfBatch 有什么作用?
它可以通过一次调用返回多个账户与代币 ID 组合的余额。什么是 safeBatchTransferFrom?
它可以在一笔交易中转移多个代币 ID 和数量,并在接收方为合约时执行接收方检查。setApprovalForAll 有什么作用?
它会授权操作员管理调用方在一个 ERC-1155 合约中持有的所有代币 ID。用户可以只授权一个代币 ID 吗?
核心授权函数不支持,但可选扩展或自定义合约可以提供范围更窄的权限。ERC-1155 操作员授权会过期吗?
不会。标准授权会一直有效,直到被撤销,或自定义合约逻辑改变其效果。ERC-1155 要求进行安全接收方检查吗?
是。转账给智能合约的标准操作必须遵循相应的单笔或批量接收方回调规则。ERC-1155 接收方可以拒绝代币吗?
可以。接收方可以回滚或返回错误的接受值,使转账失败。ERC-1155 支持元数据吗?
支持。它定义了可选的元数据 URI 扩展,接口 ID 为
每个 ERC-1155 代币都有名称和符号吗?
没有。核心标准不要求链上提供名称或符号函数。ERC-1155 定义 decimals 吗?
不定义。如果需要,应用必须从元数据或项目专用逻辑中获取计量单位信息。ERC-1155 包含 totalSupply 吗?
不包含。查询总供应量需要索引事件,或使用可选的供应量扩展。ERC-1155 元数据可以更改吗?
可以。如果合约或外部存储系统允许更新,元数据就可能更改。ERC-1155 会强制执行版税吗?
不会。版税信息需要单独的标准,而且核心代币合约不会自动强制支付所报告的版税。ERC-1155 批量转账可以节省 Gas 吗?
可以。在一笔交易中转移多个代币 ID,可能减少重复交易开销。ERC-1155 回调会导致重入吗?
会。接收方回调会执行外部代码,并可能在原交易完成前调用其他合约函数。符合 ERC-1155 标准能证明代币安全吗?
不能。兼容合约仍可能存在不安全代码、权限过大、元数据可变、供应量控制薄弱或欺诈性声明。总结
ERC-1155 是 Ethereum 用于通过一个智能合约管理多种代币的标准。每个代币 ID 都可以代表同质化资产、独特 NFT、半同质化道具,或其他基于余额的加密资产。该标准定义了单笔和批量余额查询、安全转账、面向整个系列的操作员授权、接收方回调、事件和接口检测。需要同时查询或转移多个代币 ID 时,批量操作可以减少交易开销。强制接收方回调可以减少代币误转至不兼容合约的情况,但也会带来外部调用和重入风险。核心标准不定义公开铸造、销毁、总供应量、decimals、版税或永久性元数据。这些属性取决于可选扩展和具体合约实现。用户应核实网络、合约地址、代币 ID、供应量控制、操作员授权、元数据系统和管理员权限。开发者应使用持续维护的实现、发出所有必需事件、保护接收方回调、限制批次复杂度,并测试所有授权路径。ERC-1155 提供灵活高效的多代币基础设施,但技术兼容性并不能保证真实性、稀缺性、金融价值或智能合约安全。您可能也喜欢
反恐融资(CTF)
框架
波动性爆发
热门
目前热门备受市场关注的加密货币
最高成交量
按交易量计算交易量最大的加密货币

