本文在此将会把目光聚焦在与 NFT 相关的并且处于 Last call 和最近 Final 阶段的 EIP 提案。
作者:zf857.eth,R3PO
EIP 的全称是以太坊改进提案 (Ethereum Improvement Proposals),以太坊社区中的任何人都可以创造一个 EIP。以太坊改进提案编写准则在 EIP-1 中提供。以太坊改进提案的创作者负责在社区内建立共识并记录不同意见。从历史上看,大多数以太坊改进提案的创作者通常是应用程序或协议开发者,因为提交高水平的以太坊改进提案需要很强的技术能力,EIP 经过初审后会按照时序给予一个编号,并经由下图所示的审核流程进行讨论。
EIP 有很多种类型,其中包括有 Core、Networking 、Interface 、ERC、Meta、Informational,每一类解决的问题都不一样,我们耳熟能详的 ERC-20、ERC-721、ERC-1155,属于应用级的标准协议,目前绝大多数 NFT 产业应用都是围绕着这几种主流协议展开的。EIP 就像是一部以太坊的编年史,记录了其诞生至今所有的发展脉络,同时也有着预见整个以太坊生态前进方向的能力,见微知著,一个 EIP 的改动可能蕴含着颠覆整个行业的巨大机会。本文在此将会把目光聚焦在与 NFT 相关的并且处于 Last call 和最近 Final 阶段的 EIP 提案。
EIP-4955 元数据标准扩展
该 EIP 建议规范 NFT 元数据 (metadata) 的模式,为 EIP-721 和 EIP-1155 标准 NFT 的 JSON 模式中添加一个新字段命名空间 (namespaces)。主要代码如下图所示:
EIP-4955 采用了直接扩展 EIP-721 元数据的方式,背后的想法是为了向后兼容。使得那些不能修改元数据响应(schema)的现有项目,能够创建一个新的智能合约,基于 tokenId 返回更新的元数据模式。鉴于以太坊上的大多数项目都使用不可升级的合约。如果这个 EIP 需要对这些合约进行全新的实现,就必须重新部署。这样既浪费时间又浪费钱。而利用 EIP-721 现有的元数据字段,可以最大限度地减少必要的变化数量。
有许多项目需要自定义 NFT 属性。每个项目可能有自己的方式来渲染 NFT,因此他们需要不同的元数据值。例如像 Decentraland 或 TheSandbox 这样的元宇宙项目,他们需要不同的 3D 模型来渲染 NFT,基于每个项目的视觉/引擎。像 Cryptopunks、Bored Apes 等 NFTs 项目可以创建每个项目所需的 3d 模型。
有了新字段命名空间 (namespaces),每个项目方或者供应商都可以通过 namespaces 来直接调用 NFT 资产 (如上图代码所示),这将允许开发人员在单个智能合约或应用程序中使用多个 NFT 元数据时避免命名冲突。并且 NFT 的元数据将允许钱包、市场、元宇宙等 NFT 相关应用程序与任何 NFT 互相操作。这项提案对需要支持多种元数据模式的 NFT 市场很有用,即使多个卖家使用不同的元数据模式,该 EIP 将使得市场运营商能够确保元数据密钥是唯一的同时自由储存特定的 JSON 数据。该建议的解决方案甚至可以有更广泛的应用,如大型 Gamefi 和元宇宙中的大量 NFT 可以通过自定义元数据来呈现不同属性,同时可以避免命名冲突,极大的提高了 NFT 的互操作性。
NFT 租赁使用扩展 从 EIP-4907 到 EIP-5006
EIP-5006 该提案是由 NFT 租赁市场 Double Protocol 提出针对 ERC-1155 型 NFT 的租赁标准,这个标准是对 ERC-1155 标准的延伸。该提案建议在 NFT 元数据中增加一个额外的新字段用户(user),可以被授予代表资产用户(user)而不是所有者的地址(owner)。
早在去年 6 月 29 日,同样由 NFT 租赁市场 Double Protocol 推出的 EIP-4907 正式通过以太坊审核,成为了第一个可租赁 NFT 的 ERC 标准。EIP-4907 作为 ERC-721 的扩展,增加了一个用户信息(UserInfo)变量,变量包涵用户(User)地址以及 “出租到期时间(userExpires)”, 当时间超过出租时间,租赁关系中止。主要代码如下图所示:
不同于 EIP-4907 对于 ERC-721 的简单扩展,EIP-5006 中基于 ERC-1155 的特殊数据结构 (ERC-1155 本身是一种多重代币管理标准,他的 ID 可以对应多个地址以及 token 数量),增加了 Userrecord 以及 usableBalance 函数,可以便捷地批量管理租赁状态。主要代码如下图所示:
EIP-4907 和 EIP-5006 标准的核心价值
不管是 ERC-721 还是 ERC-1155 标准代币都需要这样一种新效用。即” 使用 “ 令牌的人可能与拥有令牌的人不同(如在租赁中)。因此,为 “ 所有者 “ 和 “ 使用者 “ 设置不同的角色是有必要的,这样 “ 使用者 “ 就不能采取所有者可以采取的行动(例如,转移所有权)。EIP4907 和 EIP-5006 的提出明确了 NFT 的权利分配,有利于解决 NFT 流动性短缺。有了双重的 “ 所有者 “ 和 “ 使用者 “ 角色,就能实现 NFT 的所有权和使用权的分离,这是解决 NFT 流动性短缺问题的关键基础设施,为一些链上的使用场景如租赁提供了技术支持。使得管理 NFT 贷款人和借款人可以和不可以对 NFT 做什么(换句话说,他们的权利)变得非常容易。例如,对于转让所有权的权利,项目只需要检查采取该行动的地址是代表所有者的地址(owner)还是用户(user),如果是用户(user),则阻止该交易。此外,所有者可以控制谁是用户,其他项目也很容易将自己的权益明确分配给所有者或用户。
与此同时,在无许可互操作性的基础上,该标准使得第三方协议更容易管理 NFT 的使用权,而无需获得 NFT 发行方或 NFT 应用的许可。一旦一个项目采用了额外的用户角色,任何其他项目都可以直接与这些功能互动,并实现他们自己的交易类型。例如,使用该标准的 PFP 类 NFT 可以被整合到一个租赁平台,用户可以租用 NFT 30 天,同时也可以整合到一个抵押贷款平台,用户可以使用 NFT,同时最终通过分期付款购买 NFT 的所有权。这一切都将在不需要原始 PFP 项目的许可下完成。
EIP-4907 与 EIP-5006 的推出无疑将进一步明确 NFT 扩大应用价值的方向,将会涌现更多丰富的玩法、应用场景和衍生品。例如租赁 NFT 的普及将会让 GameFi 生态玩法更加丰富,资金周转率会大幅提升。像 Axie 等大型 Gamefi 中真正能够贡献在线时长的这些海量基础玩家们,需要一种比较低信任成本的方式(非强制性转移型租赁)去租到游戏里的装备或资源权益等。很多 NFT 将更具有实用性。像是元宇宙中的虚拟土地可以被 “ 使用 “,代表游戏资产的 NFT 可以在游戏中被 “ 使用”。在某些情况下,所有者和使用者可能并不总是相同。可能有一个 NFT 的所有者,将其出租给一个 “ 用户”。一个 “ 用户 “ 应该能够对 NFT 采取的行动将不同于 “ 所有者”(例如,” 用户 “ 通常不能出售 NFT 的所有权)。在这些情况下,有单独的角色来识别一个地址是代表 “ 所有者 “ 还是 “ 用户”,并相应地管理执行行动的权限,是非常有意义的。
EIP-5007 给 NFT 赋予时间属性
该提案建议在 ERC-721 代币标准基础上增加一个新的属性,包含初始时间到期时间(startTime, endTime)。从而使得 NFT 在链上的时间管理更简单高效。一些 NFT 有明确的使用期限,在该期限之外不能使用。对于不包含时间信息的传统 NFT,如果你想把一个令牌标记为无效或在特定时间启用,你需要主动提交交易– 这个过程显然既麻烦又昂贵。并且其时间函数的接口不一致,会给第三方开发平台带了一些困难,而通过引入这些函数(startTime, endTime),就可以实现在链上自动启用和禁用 NFT。主要代码如下图所示:
这个功能还可以给 NFT 带来很多新的使用场景,比如以 NFT 为媒介的访问服务或基于 NFT 的订阅内容应用,因为 EIP-5007 将允许开发者在设定的时间段后自动撤销对服务或内容的访问。除此之外协议的扩展也可以应用于数字艺术或收藏品,其中 NFT 的价值可能随着时间的推移而减少。指定到期时间的能力可以帮助防止 NFT 随着时间的推移变得 “ 陈旧 “ 或贬值。
另外值得一提的是,如果到期时间没有得到正确执行,或如果恶意行为者试图篡改到期日字段,拟议的解决方案可能会产生安全问题。因此我们认为可能还需要额外的措施,以确保到期日得到正确执行,并确保 NFT 所有者不会被不公平地锁定其资产。
EIP-5496 NFT 多权益管理扩展
EIP-5496 提出了对 EIP-721 代币标准的扩展,允许 NFT 的多权益管理。该提案定义了一个扩展 EIP-721 的接口,为 NFT 提供可共享给多人的权益。权益可以是链上的(投票权、要求空投的许可)或甚至是链上以外的(网上商店的优惠券、当地餐馆的折扣、进入机场贵宾室)。每个 NFT 可能包含许多权益,而权益的持有者可以将该权益转让给其他人。权益可以是不可共享的或可共享的。可共享的权益可以被克隆复制,提供者可以根据传播路径调整细节。也可以为每个特权设置过期时间。主要代码如下图所示:
具体的权益数据管理过程使用了两个结构体做双层嵌套,首先定义了 PrivilegeRecord,里面存储了用户地址(address user)和到期时间(expiresAt)两个字段,然后又定义了 PrivilegeStorage,里面存储了最新一次的到期时间(LastExpiresAt),并用 mapping 的方式去将权益 ID 和 PrivilegeRecord 进行了绑定。这种权益 ID 化的方式非常聪明,权益 ID 化后对于验证权益会非常的方便,不需要特别的去逐字匹配校验权益,只需要校验权益 ID 即可,权益的内容变通常比较频繁,将权益内容放在链下,只将权益 ID 放在链上,项目方对于权益进行改变时则不需要花 gas 费。但权益 ID 化之后问题是无法直观的看到这个 NFT 到底都有什么权益,可能还需要第三方产品去单独做一个权益内容的设置和查询功能去索引到对应 ID。主要代码如下图所示:
该协议可以达到实时有效地管理附加在 NFT 上的权益。许多 NFT 的功能不仅仅是作为个人资料图片或艺术收藏品,它们可能在不同的场景中具有真正的效用。例如,一家时装店可能会给自己的 NFT 持有者打折;DAO 成员 NFT 持有者可以对如何使用他们的国库的提议进行投票;一个 DApp 可能会创建一个空投事件来吸引某一群人,比如一些蓝筹 NFT 持有者来认领;杂货店可以在链上发行其会员卡(作为 NFT),当会员在杂货店购物时给予某些特权,等等。作为发行方对于 NFT 的权益赋能可能会有很多,而拥有 NFT 的人不一定想使用他们的权益,而传统的 EIP-721 协议只支持记录 NFT 的所有权和转让过程,NFT 的权益是不被记录在链上的,EIP-5496 的扩展将允许商家/项目将权益写入链上,并授予特定人群,并且权益拥有者可以独立管理每个权益,从而对于项目方和 holder 均具有权益的管理能力,释放了 NFT 在权益实用性领域的价值,促进了 NFT 大型实际应用落地的可能。
EIP-5606 多元宇宙 NFT
EIP-5606 定义了一个接口为数字资产(如可穿戴设备和游戏中的物品)创建一个 Multiverse NFT(多元宇宙 NFT)标准,同时可以索引这种资产在每个平台上的委托的 NFT。这些平台可以是 metaverses,Gamefi 或 NFT 市场。该标准还允许在多元宇宙 NFT 中对这些委托 NFT 进行 “ 捆绑 “ 和 “ 解绑”,因此持有者可以单独或作为捆绑物进行交易。主要代码如下图所示:
EIP-5606 引入的多元宇宙 NFT 概念,它代表了一个跨越多个平台的数字资产。多元宇宙 NFT 合约定义了一种新的代币,保持了独特的数字资产与其相关的平台对应物之间的关系(EIP 将它们称为委托代币)。该标准引入了 bundle 捆绑物的简单概念。捆绑物本质上是一组由唯一的 ID 号(多元宇宙代币 ID)标识的委托 NFT。DelegateData 结构包含每个平台上的委托 NFT 代币的信息。它包含的变量有:contractAddress、tokenId、数量,以区分 NFT(遵循 ERC-721 标准或 ERC-1155 标准)。捆绑和解绑函数接受一个 DelegateData 结构数组,因为需要满足部分捆绑和解绑。他们还需要委托 NFT 的单独的 token ID 来有选择只有多元宇宙 NFT 的所有者(或具有 bundler 角色的地址)可以调用捆绑函数。
在 web3 生态系统中,NFT 已经发展到代表多种类型的独特和不可替代的资产。一种类型的资产包括一组相互关联的 NFT。例如,如果一个品牌在不同的平台上发布了一款新的运动鞋,它将在每个平台上被铸成一个单独的 NFT。然而,实际上,它是同一款运动鞋。NFT 缺乏跨平台的互操作性成了一个亟待解决的问题。创建一个多元宇宙 NFT 标准,允许在不同的平台上对数字资产进行索引和所有权,这将是实现跨平台的互操作性和真正的所有权的第一步。在这个方向上,EIP-5606 提案是解决 NFT 和跨平台 “ 真正 “ 所有权的互操作性方面的第一个切实的尝试。
EIP-6150 层级化 NFT 标准诞生
EIP-6150 该协议在 EIP-721 的基础上进行延伸。它提出了一个类似文件系统的多层分层 NFT 结构。本协议在 EIP-721 及合约基础上添加了获取父 NFT 或子 NFT 以及 NFT 是叶节点还是根节点的新接口,并且保持它们之间的层次关系。所谓 NFT 之间的层级关系是指所有的 NFT 将组成一个分层关系树。每个 NFT 都是树上的一个节点,可能是根节点或叶节点,也可能是父节点或子节点。主要代码如下图所示:
本提案中先对 Minted 事件进行了标准化,以表明在铸造一个新节点时的父子关系。在每一个一个分层树中,本提案规范了函数 parentOf 用于查询指定 tokenId 的 NFT 的父节点 NFT,规范了函数 childrenOf 来查询出指定 tokenId 的 NFT 的所有子节点 NFT。以此来方便查询上层和下层节点。此外函数 isRoot 和 isLeaf 则分别可查询指定 tokenId 在整个 NFT 层级树中是不是根节点或叶子节点。
另外值得一提的是本提案非常周密的添加了三个可选的扩展接口
可枚举扩展(IERC6150Enumerable)
本提案将三个函数标准化,作为支持涉及子节点的可枚举查询的扩展。每个函数都有 param parentId,为了兼容,当 parentId 指定为 0 时意味着查询根节点。
销毁节点扩展(IERC6150Burnable)
层级关系的转移扩展 (IERC6150ParentTransferable) 在某些情况下,比如文件系统,一个目录或一个文件可以从一个目录移动到另一个目录。所以本提案增加了 ParentTransferable 扩展来支持这种情况。
访问控制(IERC6150AccessControl)
在一个层次结构中,通常有一个以上的账户有权限操作一个节点,比如铸币厂的子节点,转移节点,燃烧节点。本建议增加了一些标准功能来检查访问控制的权限。
由于目前的 NFT 几乎都是扁平化的,不同 NFT 之间不存在关联关系。而层级化标准的 NFT,则可以将所有 NFT 串联起来组成树状结构,就像文件系统一样。层级化的 NFT 可用于多种不同的应用场景,比如:组织架构、社交关系图谱、电商商品类目结构以及层级评论系统等等。
可以说,任何具有层级结构的场景都可以适用这个 EIP-6150 协议标准。层级结构的 NFT 在去中心化社交、去中心化电商等领域都将可能产生广泛应用。在以太坊生态系统内,单个智能合约可以是根,管理每个目录/类别作为单独的 NFT 和 NFT 的层次关系。每个 NFT 的 tokenURI 可以是另一个合同地址,网站链接,或任何形式的元数据。只需要一个合约来管理和操作分层关系,在不远的未来,随着以太坊的数据可用性解决方案和外部无权限数据保留网络的发展,用于管理组织结构的链上公司将成为可能,从而实现完全去中心化的应用。
以上就是近期以太坊 NFT 协议的最新内容,截止本稿之前,EIP-5007 与 EIP-5496 还处在 Last Call 阶段,EIP-4955、EIP-5006 、EIP-5606 、EIP-6150 协议已经由 Last Call 转到 Final 阶段。总体的来说这些新协议的通过对于 NFT 在创新性以及实用性角度是做出很大贡献的,如今 NFT 已经过去了 PFP 的阶段,而 Web3 的征途是星辰大海,创新无时无刻不在上演,NFT 的下一个叙事到底要由什么开启,我们从这些协议中可以窥见 NFT 的未来正越来越朝向更实际,更具有应用性的方向发展。在不远的未来 NFT 技术本身将改变游戏、保险、房地产买卖、付费广告、投票、社交平台、视频媒体…… 我们生活的方方面面. NFT 将不仅仅是加密的 “一部分”。在接下来的几年里,它们将可能成为加密领域中唯一与现实世界紧密相关的实际应用。
References:
EIP-4955:
https://eips.ethereum.org/EIPS/eip-4955
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4955.md
EIP-5006
https://eips.ethereum.org/EIPS/eip-5006
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5006.md
EIP-5007
https://eips.ethereum.org/EIPS/eip-5007
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5007.md
EIP-5496
https://eips.ethereum.org/EIPS/eip-5496
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5496.md
EIP-5606
https://eips.ethereum.org/EIPS/eip-5606
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5606.md
EIP-6150
https://eips.ethereum.org/EIPS/eip-6150
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6150.md