ERC6059(NFT)-ERC6551的先驱

311 阅读3分钟

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…

6. 哔站讲解

哔站:ERC6059