概要
此标准描述了一组界面,可用于构建原产于链代码的不可互换令牌实现。
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 包含)。在本文档中还将提及一个基本接口,其实施将将结构分类为 。NFT
NFT
-
NFT ID
: 提到 .该地址可转换为字符串以供参考。必须符合 DID 规范,并在整个链间生态系统中进行重新解决。NFT
NFT ID
-
NFT Wallet
: 一系列对帐户 ID 的引用。NFT ID
-
NFT Classification ID
: 一个类型或类别的标识符。NFT
-
NFT Metadata
: 与 NFT 相关的任何元数据。它是由一个, 和ID
Value
Type
所需属性
标准所有权转让逻辑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 定义的互通接口扩展
示例实现
待定
其他实施
- 初始宇宙 NFT 模块https://github.com/cosmos/modules/tree/master/incubator/nft
- 持久性 SDK 资产模块https://github.com/persistenceOne/persistenceSDK/tree/master/modules/assets
引用
- 威廉·恩特里肯,迪特尔·雪莉,雅各布·埃文斯,纳斯塔西亚·萨克斯2018.ERC-721不可燃令牌标准。从https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md中检索
历史
2020/11/02 - 初稿
版权
此处的所有内容均根据Apache 2.0 获得许可。