一张 NFT 装多版本:ERC-5606 多元宇宙 NFT 的 bundle 与 unbundle 图 1
一张 NFT 装多版本:ERC-5606 多元宇宙 NFT 的 bundle 与 unbundle · 图 1

一张 NFT 装多版本:ERC-5606 多元宇宙 NFT 的 bundle 与 unbundle

场景

同一件作品常常在几条链上各有一枚 NFT,或者在一处铸造、别处也有对应版本。想“整体持有”就得各链各持一份,想打包卖掉时,很难用一个操作表达“这些是我的同一件作品的各版本”。ERC-5606(Multiverse NFTs,2022 年提出,已定稿)给出的办法是:铸造一张“主 NFT”,由它持有那些分散版本;想要单独处理某个版本时再把它拆回来。标准文档对动机的表述正是“同一数字资产在不同平台上拥有多个版本,希望作为一个整体使用”。

一张 NFT 装多版本:ERC-5606 多元宇宙 NFT 的 bundle 与 unbundle 图 2
一张 NFT 装多版本:ERC-5606 多元宇宙 NFT 的 bundle 与 unbundle · 图 2

结构:delegate 与三个动作

标准用 DelegateData 这个结构描述被装的代币,三个字段:目标合约地址、代币编号、数量。也就是说,一张多元宇宙 NFT 记录的是“我在这些合约里各持有多少份编号这些的代币”。

四个关键动作与事件:

  • initBundle:初始化一个组合,铸造一张新的多元宇宙 NFT 并分配给调用者。文档同时注明:初始化时传入的 delegate 清单只是记录信息,此时新铸的主 NFT 还是空的,不含任何 delegate NFT;被装代币的合约地址与编号在初始化时设定,之后不可更改,这样能避免不相关 NFT 被误装进来的边界情况。
  • bundle:把 delegate 代币转入多元宇宙 NFT 合约。文档特别提醒,调用前必须先从持有人那里拿到对这些 delegate 代币的授权;这个函数会调用外部合约,因此实现方应当做重入防护。
  • unbundle:把 delegate 代币从合约转回调用者,仅当调用者是这张多元宇宙 NFT 的主人时生效。
  • delegateTokens:查询某个主 NFT 当前装着哪些 delegate 代币,返回 DelegateData 数组。

对应的 BundledUnbundled 事件记录每次装入与拆回。

它能说明什么、不能说明什么

能说明的是所有权组织方式:主 NFT 是这些 delegate 代币的当前持有人,这些关系都在链上,可以通过查询接口和事件核验;主 NFT 易主,装着的那些版本跟着易主。

不能说明的是各链上的技术互通。标准只是把这些代币“放在同一个持有人名下”,并没有把它们变成同一条链上的资产,delegate 代币仍然静静待在各自合约里。所以:跨链展示与交易仍需各链工具;如果某个 delegate 版本所在链或合约出了问题,主 NFT 里的这一格只是相应失效,主 NFT 本身不会自动补偿。

使用与核验清单

持有者一侧:用 delegateTokens 查主 NFT 里装了哪些版本(合约地址、编号、数量),再分别去对应合约核验这些代币是否真在该主 NFT 地址名下——主 NFT 与 delegate 分处不同合约时,两边的状态要各查一次。

操作一侧:bundle 前必须逐项授权 delegate 代币,授权是 ERC-721 与 ERC-1155 各自的授权机制,操作前确认授权对象地址正确;unbundle 只能由主 NFT 主人执行。

需要交代实现现状:这条标准已定稿但生态采用度有限,主流市场能否把一张主 NFT 展示成“含多个版本”的组合视图,取决于该工具是否理解这个接口。看不到 delegate 信息时,先回链上查,别急着下结论。

标准文档的动机与兼容姿态

文档的动机部分把痛点说得很直白:同一件可穿戴道具或游戏道具,发行方往往要在多个平台分别铸成 ERC-721 或 ERC-1155 代币,而这些代币之间没有任何标准层面的关系——想证明“它们其实是同一件东西”非常困难。多元宇宙 NFT 就是给这堆散落版本补一个链上关系的办法。兼容性姿态也写得明确:这套标准完全兼容 ERC-721 与 ERC-1155,不支持本标准的第三方应用照常使用原来的代币标准,不会被强制升级。对照着读还能发现一个边界:文档举的例子是同一份资产在多个平台的多个版本,delegate 代币可以是 721 也可以是 1155——quantity 字段的真正用武之地正在 1155 一侧,对 721 代币它通常就是 1。持有者做组合核验时,数量字段的含义要按 delegate 合约采用的标准分开解读。

风险提示:本文为标准机制科普,不构成任何投资建议;跨链资产状态以各链上合约实际状态为准。