概要

此标准描述了一组界面,可用于构建原产于链代码的不可互换令牌实现。

NFT 或不可燃令牌是指广泛的数据结构类别,大多数标准都针对智能合同实施进行了定义。在定义本地链代码级别的 NFT 结构时,目前没有基本的 NFT 接口,该字型可以实现为 NFT 结构。此外,智能合同级别的 NFT 定义用于处理合同级别的 NFT 所有权,没有可用于代表不同 NFT 实施的账户所有权的钱包的共同定义。

此标准定义了一个非常基本的 NFT 接口与一组最小方法,所有 NFT 如数据结构可以实现,并定义一个钱包界面,以表示这些 NFT 的帐户所有权。该标准还定义了 NFT 和 NFT 钱包界面的基本方法签名,以便通过链间通信协议创建、变异元数据、更改所有权、燃烧和链间所有权转移。

动机

当前一组常见的 NFT 定义以ERC721接口定义为主,这些定义偏向于 NFT 基于合同的智能定义。NFT 的链式应用代码原生定义未必受 NFT 智能合同定义的限制,从而使界面变得更简单,同时添加更多本地实施相关方法。此外,基于合同的 NFT 实施智能方法不考虑一个通用的本地钱包,该钱包可能持有多个 NFT 实施的所有权表示,并允许单一转让 NFT 所有权交易实施。

该标准的主要动机是:

  • 定义一个非常基本的 NFT 接口,所有数据结构必须实现才能归类为 NFT 和 NFT 钱包界面,该界面可以保留所有此类 NFT 实施帐户的所有权。
  • 定义 NFT 和 NFT 钱包接口方法签名的基本实现,包括薄荷、变异元数据和燃烧交易,用于基础 NFT 钱包实现和所有权转让。
  • 定义元数据界面以维护 NFT 元数据。此接口还可用于存储来自其他数据结构的对象的元数据。
  • 扩展基础 NFT 钱包实现的传输 NFT 功能,以定义数据包数据结构、应用逻辑和编码,用于链间 NFT 所有权转移,并定义 ICS 规范。

这将使链间生态系统中的所有项目能够:

  • 使用自定义薄荷、突变和燃烧交易逻辑在其应用链中维护,定义自己对 NFT 结构的实现。
  • 对于所有 NFT 实施,有一个通用的钱包实现,它可以将来自多个链条的多种 NFT 的所有权信息保存在一个帐户的单个钱包中。
  • 无需获得许可的桥梁或象征性的转换/固定,即可通过链条将 NFT 的所有权通过链条发送。

定义

  • NFT: NFT 或不可互换令牌是代表唯一实体或实体本身属性的结构化数据单元(如果是数字资产,其所有属性均由 NFT 包含)。在本文档中还将提及一个基本接口,其实施将将结构分类为 。NFTNFT

  • NFT ID: 提到 .该地址可转换为字符串以供参考。必须符合 DID 规范,并在整个链间生态系统中进行重新解决。NFTNFT ID

  • NFT Wallet: 一系列对帐户 ID 的引用。NFT ID

  • NFT Classification ID: 一个类型或类别的标识符。NFT

  • NFT Metadata: 与 NFT 相关的任何元数据。它是由一个, 和IDValueType

所需属性

标准所有权转让逻辑NFT 的整体功能分为两个对象,NFT 和 NFT 钱包。NFT 对象处理薄荷、突变和燃烧逻辑,NFT 钱包对象处理所有权转移。这两个对象都可以在不同的链条上独立操作。

单数表示/表示NFT 通过不变属性的相同哈希处理,跨链条强制执行 NFT 的单一表示/表示。

单个钱包实现NFT 钱包对象实现钱包和转移逻辑,并且与与基础 NFT 实现相关的其他自定义逻辑不可知,允许所有定义的 NFT 界面实现单一的钱包实现。

实现灵活性NFT 接口实施必须允许 NFT 的所有基本功能要求,只要实施符合 NFT 接口,则对功能扩展没有限制,以考虑更复杂的应用逻辑。

减少对链间协议的负载/依赖两个对象包括 NFT 功能,NFT 和 NFT 钱包灵魂不需要相互通信,以同步其状态在每个交易。它们必须独立运作,只需进行少数需要依赖链间协议(链间发送、燃烧交易)的交易。

商品化所有 NFT 都采用类别或分类表示,允许交易通过类别而不是直接地址解决 NFT,从而允许 NFT 商品化。

可信的薄荷、突变和燃烧执行以及与私人链的互操作性薄荷、突变和燃烧逻辑在发证链上自然而然地实现,并且始终由同一链处理,而不是在 NFT 所有权转让中将突变逻辑交给接收链。这允许私人和私人验证的连锁店也与其他连锁店交换其 NFT,同时确保执行环境的信任和逻辑隐私(如果需要)。

本地实现性和互操作性NFT 模块在本地链应用逻辑级别而不是智能合同级别上实施,利用链条的本地互操作性协议在链之间传输 NFT,而不是许可的桥式智能合约。NFT 的基本接口和功能可以通过智能合约扩展,以允许更复杂的应用逻辑。

技术规范

ID 界面

服务器作为其他对象/s 标识符的任何类型的界面都可以在空间保护数据格式(如六角形或 base64)中表示,如果使用案例需要,则可以制作为可人读格式。

ID interface{

   // String returns representation of the ID in a human-readable string
  String() string

   // Bytes return the byte array of the ID
  Bytes() []bytes

  // Compare compares the ID to the given ID returning the integer difference between the bytes of the identifier, for sorting or matching
  Compare(ID) int
  }

NFT 接口

可归类为 NFT 的任何结构实施的裸骨界面

NFT interface {

   // GetID returns the identifier for the NFT as an ID interface. Stored as KVStore index
  GetID() ID

  // GetClassificationID returns the classification/type/denomination for the NFT as an ID interface
  GetClassificationID() ID

}

NFT 钱包界面

用于实现 NFT 接口的结构的钱包的基本接口

Wallet interface {
   // GetAccountAddress returns the accountAddress of the account which the NFTWallet belongs to. Stored as KVStore index
  GetAccountAddress() AccountAddress

  GetNFT(ID) NFT
  // GetNFTIDs returns the identifier, for all the NFTs stored in the wallet, as an ID interface
  GetNFTIDs() []ID

  // ReceiveNFT adds the given array of NFT to the wallet and returns an error if the receive operation is conflicted
  ReceiveNFT([]NFT) error

  // SendNFT removes the given array of NFT from the wallet and returns an error if the send operation is conflicted
  SendNFT([]NFT) error
}

元数据接口

在此例中存储 NFT 元数据的元数据对象的接口

Metadata interface{
  // GetID returns the identifier for the Metadata as an ID interface. Stored as KVStore index. In the case of NFT, it's a composite key of the structure AssetID+MetadataID.
  GetID() ID
  GetType() string
  GetValue() string
}

向后兼容性

不適用。

转发兼容性

此接口定义由 nft-rfc-004 定义的互通接口扩展

示例实现

待定

其他实施

引用

  1. 威廉·恩特里肯,迪特尔·雪莉,雅各布·埃文斯,纳斯塔西亚·萨克斯2018.ERC-721不可燃令牌标准。从https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md中检索

历史

2020/11/02 - 初稿

版权

此处的所有内容均根据Apache 2.0 获得许可。