聊聊即将过审的多权限NFT管理协议EIP-5496
对于整个 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提供了可共享的多重权限,已经进入到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都做了什么事,以及他的设计原则是什么,代码比较多我摘录一些核心内容为大家讲解。
首先在合约中它将权益全部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的阶段,下一个叙事到底要由什么开启,有待于基础设施和上层应用的创新带来下一次破圈后的增量用户涌入。
Scan QR code with WeChat