层级化NFT标准诞生:EIP-6150
前言
因为一些机缘,我最近和几个同行朋友一起提交了一个新的 EIP 协议标准,EIP-6150,这是一个支持层级结构的 NFT 协议标准,撰写此文时处在 Review 状态,改为 Last Call 状态的 PR 还在等待通过。
该协议标准有 4 位作者:Keegan Lee、msfew、Kartin 和 qizhou。Keegan Lee 就是我,主要负责了接口的定义和实现代码的编写。Kartin 是这个 EIP 的发起人,也是 Hyper Oracle 的创始人。msfew 则是 Hyper Oracle 的研究员,主要帮忙做一些辅助性的工作,包括完善文档、提交 PR、跟进讨论区的 QA 等。qizhou 是 EthStorage 的创始人,之前就提交过其他 EIP,熟悉申请 EIP 的流程,也对以太坊基金会的人比较熟悉,为这个协议提供了很多指导。以下是该 EIP-6150 的 github 地址:
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6150.md
Hierarchical NFTs
目前的 NFT 几乎都是扁平化的,不同 NFT 之间不存在关联关系。而层级化的 NFT,则可以将所有 NFT 串联起来组成树状结构,就像文件系统一样。
如上图所示,可以想象成每个文件夹都是一个单独的 NFT,不同文件夹之间的层级关系也就是 NFT 之间的层级关系。
层级化的 NFT 可用于多种不同的应用场景,比如:
- 组织架构
- 社交关系图谱
- 电商商品类目结构
- 层级评论系统
可以说,任何具有层级结构的场景都可以适用这个 EIP-6150 协议标准。层级结构的 NFT 在去中心化社交、去中心化电商等领域都将可能产生广泛应用。
接口定义
EIP-6150 总共定义了 5 个接口文件:
- IERC6150
- IERC6150Enumerable
- IERC6150Burnable
- IERC6150ParentTransferable
- IERC6150AccessControl
IERC6150
IERC6150是规定必须实现的接口,最小化定义了一个事件和四个函数,且要求继承 IERC165 和 IERC721 接口,接口定义如下:
Minted事件需在铸造一个新的 NFT 时发出,记录了新 NFT 的铸造者(minter)、接收者(to)、父节点 NFT 的 ID(parentId)、新 NFT ID(tokenId)。当铸造一个根节点 NFT 时,那 parentId 则记为 0,即 0 表示一个无效的空节点,因此,有效的节点 NFT 的 tokenId 就不可以为 0。
parentOf函数用于查询指定 tokenId 的 NFT 的父节点 NFT。
childrenOf函数则查询出指定 tokenId 的 NFT 的所有子节点 NFTs。
isRoot和isLeaf函数则分别可查询指定 tokenId 在整个 NFT 层级树中是不是根节点或叶子节点。
IERC6150Enumerable
IERC6150Enumerable是可选的扩展接口,主要补充了几个跟层级相关的 Enumerable 的查询接口,接口定义如下:
继承IERC721Enumerable也是可选的,但为了更好地兼容 ERC721,最好可以继承。childrenCountOf函数用于查询指定节点下有多少个子节点,如果参数 parentId 为 0,则表示查询根节点的数量。childOfParentByIndex函数则是从指定的父节点下的所有子节点数组中找出指定索引位置的子节点的 tokenId,比如指定父节点 parentId = 110,其下有 10 个子节点,找出索引位置为 5 的子节点 tokenId = 1105,则查询结果返回 1105。indexInChildrenEnumeration函数则是查询指定的 tokenId 在指定父节点下的子节点数组中所在的索引位置,比如指定 tokenId = 1105,父节点 parentId = 110,1105 在子节点数组中的索引位置为 5,则查询结果返回 5。如果指定 tokenId 并不在指定父节点 parentId 下面,则需要抛出错误。
IERC6150Burnable
IERC6150Burnable也是可选的扩展接口,定义了销毁节点的操作,接口定义如下:
只定义了两个函数,safeBurn用于安全销毁单个节点,但要求只有指定节点为叶子节点时才允许销毁。就和 Linux 的文件系统一样,如果某目录下存在其他文件或文件夹,是不允许直接删除的。若强制删除,则目录下的所有文件和文件夹都会被级联式全部删除。当前协议没有定义级联式删除的函数,若有这个需求,可以自己再额外去添加函数实现。safeBatchBrun函数则是用于批量销毁多个叶子节点。
IERC6150ParentTransferable
IERC6150ParentTransferable也是一个可选的扩展接口,支持层级关系的转移,就和文件夹可以从一个目录移动到另一个目录一样,接口定义如下:
接口定义了两个函数和一个事件,支持单节点的转移,也支持多节点的批量转移。每个节点发生层级关系转移时,需要抛出ParentTransferred事件,记录下所转移的 tokenId、旧的父节点 ID 和新的父节点 ID。transferParent将指定的 tokenId 转移到指定的父节点下,若指定的父节点为 0,则表示指定节点改为了根节点。batchTransferParent则可以指定多个 tokenId,批量将这些节点都转移到指定的父节点下。
IERC6150AccessControl
最后一个接口IERC6150AccessControl也是可选的,提供了几个权限控制的函数,接口定义如下:
总共定义了三个函数,isAdminOf用于查询指定的 account 对指定的 tokenId 是否有管理员权限。在 ERC721 中,每个 NFT 都只有唯一的 owner 并拥有管理权限。但在层级式的结构中,一个 NFT 是可以有多个管理员的,就和文件系统中可以有多个管理员一样。这个扩展接口就提供了支持多管理员的模式,但对于怎么设置多个管理员,则难以定义通用函数,所以就没做标准化的定义。不过,需要保证,NFT 的 owner 同时也是管理员。
canMintChildren则用来判定某个 account 对指定的 parentId 是否具有铸造子节点的权限。
canBurnTokenByAccount则用来检查某个 account 对指定的 tokenId 是否具有销毁的权限。
参考实现
EIP 的 github 上,我对每个接口都提供了对应的参考实现代码,代码地址如下:
https://github.com/ethereum/EIPs/tree/master/assets/eip-6150/contracts
但这里我不打算对每个实现代码都一一讲解,我只讲最核心的ERC6150.sol的实现。因为代码相对有点长,就不贴代码出来了,大家可以点击链接进去看代码。我主要讲讲实现的一些逻辑和思路。
存储上,用了三个 mapping:_parentOf、_childrenOf、_indexInChildrenArray,分别用来存储指定节点的:父节点、子节点数组、所在子节点数组里的索引位置。有了这三个 mapping 之后,几个查询函数的实现就非常简单了,我就不细说了。核心是_safeMintWithParent和_safeBurn函数,分别是铸造 NFT 和销毁 NFT 的内部函数。
铸造函数的代码如下:
实现逻辑其实也很简单,有两个校验需要注意下,一是要铸造的新 NFT 的 tokenId 需要大于 0,正如前面所说的,0 为无效节点;二是当 parentId 不为 0 时,需保证 parentId 是存在的,当 parentId 为 0 时,则表示铸造的是根节点 NFT。_beforeMintWithParent和_afterMintWithParent是为了增加扩展性而增加的,可由继承此合约的上层合约根据需求再去实现。中间代码就是对几个 mapping 进行赋值了,然后调用了 ERC721 的_safeMint函数实现底层的铸造,接着就发送 Minted 事件了。
这个铸造函数是 internal virtual 的,上层合约可以重载该函数,且上层的实现合约需要再根据具体需求自己添加开放的铸造函数。
接着看看销毁函数,代码如下:
销毁时,要求 tokenId 是存在的且需是叶子节点才允许销毁。另外,销毁时,需要从子节点数组中移除,而为了节省 gas,同时把子节点数组中的最后一个元素移到了销毁的索引位置。
另外,实现代码中,也封装了批量铸造的内部函数,方便扩展支持批量铸造多个子节点的需求。
其实,整个协议并不复杂,但已经足以覆盖到很多应用场景,后续我会结合一些具体的应用场景,再增加示例代码作为案例,以促进该协议的落地应用。
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
您可能感兴趣
-
解读CKB版 “闪电网络” Fiber Network:比特币可编程性扩展的另一种思路
作者:NingNing行业周期与宏观金融周期共振,加密行业正处在与 2019 年相似的整体性迷茫之中,现阶段不仅流动性枯竭,叙事貌似也在枯竭。市场不但对 VC 叙事兴趣阙如,对反 VC 的 Meme 叙事也已经疲倦。就像每次哲学危机,人们都会回归柏拉图寻找出路,当加密行业危机时,我们也需要回归比特币、回归中本聪。正如 CKB 生态 RGB++ 协议创始人 Cipher 在最新 Blog 里所阐述的,加密行业需要对以太坊 “链上计算” 的路径依赖进行反思,回归P2P经济学,让计算归于链下,让验证归于链上。因
-
面对NFL球员工会起诉,“退圈”的DraftKings竟主动承认NFT是证券?
作者:Zen,PANews近日,美国国家橄榄球联盟球员协会 (NFLPA) 指控数字体育娱乐和游戏公司DraftKings 逃避了其 NFT 球员许可协议的付款义务。在放弃NFT业务后,涉嫌出售未注册证券而遭到集体诉讼的DraftKings又背上了一起官司。而有趣的是,在与NFLPA的纠纷中,DraftKings的立场似乎已从反驳转变为积极承认“NFT就是证券”。放弃NFT业务:驳回集体诉讼的动议遭到否决今年7月底,Draftkings在给用户的电子邮件中表示:“经过慎重考虑,DraftKings 决定终
-
简析两种最新比特币智能合约实现方案:OP_NET与Arch有何区别?
作者:Cookie过去半个月,OP_NET 与 Arch 这两个比特币主网上的智能合约实现方案引发了较多的讨论。有意思的事情是,OP_NET 这个名字与大家熟悉的 OP_CAT 很像,都以「OP_」开头,具有很强的、让大家认为这哥俩差不多的迷惑性。所以,在开篇要和大家先提一嘴 OP_CAT。首先,OP_CAT 是比特币操作码,从去年开始有以「量子猫」Quantum Cats,也就是「大巫师」Taproot Wizards 的创始人 Udi Wertheimer 为首的社区力量一直在呼喊要「复活」OP_CA
-
争议不断,以太坊正在失去“万链之王”的权威
作者:Climber,金色财经近期围绕以太坊的话题和争议越来越多,不仅 Vitalik 本人需要下场解释观点,就连以太坊基金会也要发布公告来平息社区的质疑声。在本轮牛市周期中,以太坊的表现可谓平平。而美国以太坊现货 ETF 的通过也并未让 ETH 走势如投资者期待般爆发,相反却在币价方面越走越低。这就不免让有着「万链之王」美誉的以太坊逐渐失去投资者和社区的尊重,进而质疑起有关以太坊的方方面面。争议不断,以太坊亟需重塑权威最近一段时间以来社区成员对 Vitalik 言论观点、以太坊基金会乃至以太坊生态系统的
-
从《黑神话:悟空》谈起,GameFi何时能取得真经?
作者:YBB Capital Researcher Zeke前言本文是市场垃圾时间中的一些闲聊,需要对传统游戏市场有一定程度了解。大家可以把这篇文章当作日记或者随想观看,这些只是我在游玩《黑神话:悟空》之后对GameFi的一些粗浅思考,以及对这个赛道未来的看法。一、游戏科学的九九八十一难三天全网销量破千万、Steam玩家同时在线峰值破235万、多家品牌联名周边销售爆火、国家级媒体多次采访、多个游戏取景地可凭游戏通关记录终身免费进入、86版《西游记》YouTube观看量超400万。以上,是《黑神话:悟空》上
-
Gavin Wood:如何防止女巫攻击进行有效空投?
演讲:Gavin WoodGavin 近期一直在关注的女巫攻击(civil resistance)的问题,PolkaWorld 回顾了 Gavin Wood 博士在 Polkadot Decoded 2024 上的主题演讲,想要探究 Gavin 在如何防止女巫攻击上的一些见解。什么是女巫攻击?你们可能知道,我一直在研究一些项目,我在编写灰皮书,专注于 JAM 项目,也在这个方向上做了一些代码的工作。实际上,在过去的两年时间里,我一直在思考一个非常关键的问题,这个问题在这个领域中非常重要,那就是如何防止女巫
-
市场热议,链抽象将成加密新叙事?
2024年,加密货币领域的技术创新持续加速,链抽象(Chain Abstraction)逐渐成为行业内的焦点。链抽象技术的核心在于通过隐藏底层技术的复杂性,让用户能够更加便捷地在多个区块链之间进行操作。传统的区块链技术通常要求用户掌握不同链的操作流程,并需要应对跨链操作中的技术难题,这极大地吸引了新用户的进入。而链抽象的出现,则为这些问题提供了有效的解决方案,成为Web3建设不可忽视的重要一环。01、什么是链抽象及其作用链抽象能够将不同的区块链之间的差异整合在一个统一的操作界面中,使得用户只需一个账户即可
-
今日日报|马斯克和特斯拉赢得“被指控操纵狗狗币”的诉讼;稳定币支付平台Bridge完成5800万美元融资
今日要闻提示:马斯克和特斯拉赢得驳回指控他们操纵狗狗币的诉讼OpenAI和Anthropic已同意将其主要新AI模型在发布前共享给美国政府OKX将上线Hamster Kombat(HMSTR)现货交易X平台纽约总部将于9月13日关闭,预计将迁往得州萨尔瓦多总统布克尔成为《时代》杂志最新一期封面人物稳定币支付公司Bridge完成5800万美元融资数据:MATIC、SHIB、UNI代币头部地址持仓均超50%网龙今年上半年通过出售2.9亿元的加密货币,获利5100万元人民币监管消息美国众议院计划在9月举行多场加
- 成交量排行
- 币种热搜榜