解析即将过审的多权限 NFT 管理协议 EIP-5496
撰文:Jason,Buidler DAO Co-founder
NFT 的下一个叙事
对于整个 Web3 行业来说,我认为一切可以降低普通用户进入的门槛和成本的都是好东西,对于 NFT 赛道来说,我认为一切可以 增强流动性和实用性 的也都是好东西。
在此之前对于可租赁 NFT 协议 4907 也专门写了一篇文章,NFT 发展到后小图片时代 下一个叙事我认为就在于更贴近生活场景的实用型 NFT 。
首先先对于小图片这个事再啰嗦两句,貌似很多人将小图片看作 NFT 的原罪,将 NFT 嘲讽为小图片,但是我不这样认为, 小图片对于 crypto 走向大众视野一定是有不可估量的推动作用 ,不能拿起碗吃饭放下碗骂娘。
在此之前 crypto 其实对于普通人的理解和参与门槛还是非常高的,花花绿绿的 k 线和刺激的涨跌幅度决定了其还是小部分人的金融游戏,但是 NFT 出现后至少贴在上面的那张小图片是实实在在能看得着的东西,就算不懂金融和加密,不知道挖矿和 defi,但是至少能判断图片好不好看,社区有不有趣, 小图片 + 头像带来的社区文化极大的降低了普通用户的理解和参与门槛,极强的推动了大量场外人员的加入 ,所以小图片对于 crypto 的普及绝对有着极大的功劳不可置否。
只是因为 NFT 的低流动性导致产生的僵尸资产远高于 token,这也就是为什么提升 NFT 流动性很重要,其二是 NFT 的资产属性我觉得只释放出了它一半的价值,因它的唯一性和一切皆可 NFT(URI 挂载)所带来的另一半实用价值价值的想象空间远大于 token,但是迄今为止实用价值还没有被完全释放出来,这依赖于基础设施的建设所带来的应用场景探索,另外 实用性的提升也会带来其资产价值的升值 ,这是一个左脚踩右脚 1+1>2 的效果,单有实用性无资产交易价值的 NFT 我觉得也没什么意思。
NFT 实用性的背后即持有者权益的赋能 ,目前最常见的赋能大多集中在资产校验到进入社区这个过程,也能看到逐渐的出现了如阿迪达斯发售的可穿戴 NFT,或是一些可订阅 NFT(我们 BuidlerDAO 社区正在提案中)等。
EIP-5496 提供了可共享的多重权限
本文中的 EIP-5496 提供了可共享的多重权限 ,已经进入到 LastCall 状态即将过审,这里小科普一下 EIP 的流程,它的全称是以太坊改进建议,任何人都可以去提交 EIP,描述你发现以太坊的不足并给出对应解决方案,经过初审后会按照时序给你一个编号,并进行如下图所示的生命周期进行讨论审核。EIP 分为很多类型,包括 Core、Networking 、Interface 、ERC、Meta、Informational,每一类解决的问题都不一样,比如 Core 是涉及到核心的共识分叉等底层内容,耳熟能详的 ERC 就是应用级的标准制定,20、721、3535、4337(账户抽象)、5192(灵魂绑定)都属于这一类,所以 ERC 也是离普通用户最近也最好理解的一层。我平时喜欢看 EIP,它既是一本以太坊的史书,可以了解其从诞生至今所有的问题与建议,同时也是一本预言书, 每个 EIP 背后都可能蕴含着巨大的机会,看 EIP 也是把握市场方向的方式 ,建议大家没事的时候也可以多关注一下: https://eips.ethereum.org/all
它认为 NFT 除了图片和资产属性外,在不同的场景下都有实用性可以拓展 ,权益可能是存在于链上如投票权、浏览权、空投权等,或者在链下如购物优惠、餐厅折扣、机场贵宾室使用权等,在 EIP-5496 的眼里每个 NFT 都可以包含多种权益,并且这个权益应该具备几种可选特性:
-
可验证:权益可以被验证通过
-
可转移:权益可以被转移给他人
-
可共享:权益可以被共享给多人
-
可截止:权益可以被设置有效期
因为作为发行方对于 NFT 的权益赋能可能会有很多,拥有 NFT 的人不一定想使用他们的权益,而传统的 ERC721 只记录 NFT 的拥有权和转让过程,NFT 的权益是不被记录在链上的, EIP-5496 可以让项目方将权益写入链上,并授予特定人群,并且权益拥有者可以独立管理每个权限 ,从而对于项目方和 holder 均具有权益的管理能力,释放了 NFT 在权益实用性领域的价值。
目前对于项目方来说如果想将 NFT 持有者进行多层权益赋能的方式是空投多类 NFT,如一家航空公司向 Crypto Punk 持有者空投了一系列 NFT 并赋以权益,吸引他们加入航空公司的会员,但是新空投的 NFT 和其主 NFT 不是绑定关系,所以如果 Crypto Punk 主 NFT 被转移,空投的 NFT 依然在原主人手里继续享受权益,而新的主 NFT 持有者则不能自动的享受权益,所以 EIP-5496 可以将权益和底层主 NFT 绑定,并允许用户自主的管理权限 。
EIP-5496 核心内容讲解
协议最难的在于如何能够在尽可能简单的程度下,去支持拓展出更多复杂的业务场景,它要求优雅且克制,而不是一昧追求着强大和牛逼,所以接下来我们通过其技术实现看一下到底 EIP-5496 都做了什么事,以及他的设计原则是什么,代码比较多我摘录一些核心内容为大家讲解。
首先 在合约中它将权益全部 ID 化 ,在此之前我以为设置权益的过程,是直接将 NFT 的权益都有什么写入到合约中,比如一个 NFT 有 3 个权益,它并不是通过 string 文本的形式去写【可以打折】【可以使用产品】【可以获得空投】,而是直接设置该 NFT 的权益 ID 为 1、2、3,对没错就在合约里设置好有 3 个权益,而并不会直接将权益内容写进去,这也就是我认为其作为协议优雅和克制之处,权益 ID 化的好处是:
1、我作为协议 只需要你来设置有几个权益,每个权益的 ID 是什么,至于具体的权益内容则交给合约外部即链下来决定 ,就像是一台电脑有 3 个 USB 接口,它可以用来插 U 盘也可以插鼠标,插什么用户自己去决定。
2、权益 ID 化后对于 验证权益会非常的方便 ,比如一个产品要求 NFT 持有者只有具备「可以使用产品」的权益才可以使用,那么当用户打开该产品时,产品代码里需要写一个逻辑去校验用户是否持有该 NFT 且具备对应权限,则需要去做权限名称的逐字匹配少一个字都不行,「可以用产品」和「可以使用产品」对于代码来说就是完全两种不同的权限,但是如果 ID 化,则只需要校验当前 NFT 是否具备「2」权限即可。
3、权益的内容变更是比较频繁的,将权益内容放在链下,只将权益 ID 数量放在链上,若 项目方对于权益进行改变则不会花 gas 费 。
但权益 ID 化之后也同样 带来的问题是无法直观的看到这个 NFT 到底都有什么权益 ,只有 1、2、3 这几个 ID 数字, 还需要第三方产品去单独做一个权益内容的设置和查询功能去索引到对应 ID。
具体的权益数据管理它使用了两个结构体做双层嵌套,首先定义了 PrivilegeRecord,里面存储了用户地址和到期时间两个字段,然后又定义了 PrivilegeStorage,里面存储了最新一次的到期时间,并用 mapping 的方式去将权益 ID 和 PrivilegeRecord 进行了绑定。
_setPrivilegeTotal 函数用于设置全部的权益数量,这个数量会用在赋权的过程中,即只有 3 个数量,那赋权的时候 ID 肯定要小于 3 的。
下图为核心的设置权益的代码,首先设置权限时,需要传入 4 个参数,被设置的 NFT tokenid,要设置的权限 ID,被赋权的用户地址,权限到期时间。在赋权时需要进行 3 个校验条件,分别文是否拥有权限、到期时间是否大于 30 天和权益 ID 是否在总权益范围内,协议对于权益的时间限制必须要超过 30 天的原因我觉得还是比较奇怪的,不知道为什么作为协议要加这么个性化的限制,按理来说应该将这个限制给到项目方自己决定的。
privilegeBook 也是一个 mapping 的数据类型用于管理每一个 NFT 被赋权的情况,代码中对 privilegeBook 进行设置将某个 NFT 的某个权益的某个人设置为被赋权用户地址,然后再更新到期时间。
下图也是很核心的用于判断用户是否持有对应权益的接口,这个接口将作为其他第三方产品验证权益的关键途径,可见传入了三个参数 tokenId、权益 ID 和用户地址,先判断当前权益是否还在有效期内,这里获取了其最新的到期时间来判断是否大于当前区块的时间戳,若存在有效期的话则校验当前 tokenid 的对应权限 ID 的 user 是否为传入的用户地址。
下图为获取某个 NFT 的权益最新的到期时间。
以上就是 EIP-5496 的内容,总体看下来我觉得对于 NFT 在实用性角度是做出了贡献的,但同时它也有自身的局限性,通过上述代码分析可以看到它的权限颗粒度是到了某个具体 NFT 层面,即以 tokenid 为单位,也许是我还没有研究的很透彻,但是如果我想对于某一批甚至整个 collection 的 NFT 均设置权限是非常麻烦的,有 1 万个 NFT 就要设置 1 万次呀,不知道提案人是如何考虑这个问题的,也欢迎大家交流探讨。
总之如文章开头所说,NFT 已经过去了 PFP 的阶段,下一个叙事到底要由什么开启,有待于基础设施和上层应用的创新带来下一次破圈后的增量用户涌入。