1. 介绍
ERC-6059介绍了一个NFT拥有另一个NFT的概念,而无需外部帐户(EOA)或智能合约。该标准扩展了基本的NFT标准,以允许NFT之间的嵌套和亲子关系。用更简单的话来说,NFT可以拥有和管理其他NFT,从而创建Token的层次结构。
2. 基础特性
- 父类NFT拥有另一个NFT
- 子类NFT被其他NFT拥有(纯属废话)
- 一个NFT可以同时是父类NFT也可以是子类NFT
父母NFT的所有者不仅可以管理直接的孩子代币,还可以管理其子女,将控制扩展到多个层次结构。
3. 潜在的应用案例
3.1 捆绑销售(Bundling)
将多个NFT分组为一个包装,使收藏家在一次交易中购买一组相关的NFT。
3.2 收藏(Collecting)
根据所有者的喜好在藏品中组织NFT,例如将NFT分组为同一艺术家或主题。
3.3 会员(Membership)
为拥有特定的NFT(父类Token)授予其他NFT(子类Token)等特定的NFT(父类Token)等特定的NFT(父母令牌),例如俱乐部创建独家会员资格。
3.4 授权 (delegate)
通过使用嵌套的非同质化代币(NFT)作为投票代币或权威代表,在分散式组织内实施投票系统或委托决策权。
4. 代码
4.1 说明书(Specification)-函数说明
-
function ownerOf(uint256 tokenId) external view returns (address owner);
用于检索给定令牌的 * root *所有者。
-
function directOwnerOf(uint256 tokenId) external view returns ( address, uint256, bool )
用于检索给定Token的直接所有者。
-
function burn(uint256 tokenId, uint256 maxRecursiveBurns) external returns (uint256)
用于燃烧给定的Token
@maxRecursiveBurns 最大递归删除的NFT数量
-
function addChild(uint256 parentId, uint256 childId) external;
将子Token添加到给定的父类Token中。
-
function acceptChild( uint256 parentId, uint256 childIndex, address childAddress, uint256 childId)
接受给定父类Token的正在pending中的子类Token。(从pending child tokens 数组中移动到活跃数组中)
-
function rejectAllChildren(uint256 parentId, uint256 maxRejections) external;
拒绝给定父类Token中的子类Token
-
function transferChild( uint256 tokenId, address to, uint256 destinationId, uint256 childIndex, address childAddress, uint256 childId, bool isPending
从给定的父类中转移子类Token
前提:如果此时的子类Token是激活的,或者是pending中的,必须异常
-
function childrenOf(uint256 parentId) external view returns( Child[] memory)
获取当前父类Token激活的子类Token列表
-
function pendingChildrenOf(uint256 parentId) external view returns (Child[] memory)
获取当前父类Token正在pending的子类Token 列表
-
function childOf(uint256 parentId, uint256 index) external view returns (Child memory)
retrieve a specific active child token for a given parent token.
获取给定父类Token的子类处于激活状态的Token
-
function pendingChildOf(uint256 parentId, uint256 index) external view returns (Child memory)
获取给定父类Token中特定在Pending 中的子类Token
-
function nestTransferFrom( address from, address to,uint256 tokenId,uint256 destinationId) external
transfer the token into another token. (不能是其子类,或者孙子类Token)
ID MUST never be a 0 value, as this proposal uses 0 values do signify that the token/destination is not an NFT.
5. 使用
仓库地址: github.com/yuanshanhsh…