NFT
Last updated
Last updated
x/nft
是根据 实现的 Cosmos SDK 模块,允许您通过集成该模块来创建 NFT 分类、创建 NFT、转移 NFT、更新 NFT,并支持各种查询。它完全兼容 ERC721 规范。
NFT 的全称是 Non-Fungible Tokens(非同质化代币)。由于 NFT 的不可替代性,它可以用来表示独特的事物。该模块实现的 NFT 完全兼容以太坊 ERC721 标准。
Class 主要由 id、name、symbol、description、uri、uri_hash 和 data 组成,其中 id 是该类别的唯一标识符,类似于以太坊 ERC721 合约地址,其余字段为可选字段。
Class: 0x01 | classID | -> ProtocolBuffer(Class)
NFT 主要由 class_id、id、uri、uri_hash 和 data 组成。其中,class_id 和 id 是标识 NFT 唯一性的二元组,uri 和 uri_hash 为可选字段,用于标识 NFT 的链下存储位置,而 data 是 Any 类型。使用 Any 的 x/nft 模块链可以通过扩展此字段进行定制。
NFT: 0x02 | classID | 0x00 | nftID |-> ProtocolBuffer(NFT)
NFTOfClassByOwner 主要实现使用 classID 和 owner 查询所有 NFT 的功能,不含其他冗余功能。
NFTOfClassByOwner: 0x03 | owner | 0x00 | classID | 0x00 | nftID |-> 0x01
由于 NFT 中没有额外的字段来指示 NFT 的所有者,因此使用额外的键值对来保存 NFT 的所有权。随着 NFT 的转移,键值对会同步更新。
OwnerKey: 0x04 | classID | 0x00 | nftID |-> owner
TotalSupply 负责跟踪某一类别下所有 NFT 的数量。在该类别下执行铸造操作时,供给增加 1;执行销毁操作时,供给减少 1。
OwnerKey: 0x05 | classID |-> totalSupply
在本节中,我们描述 NFT 模块的消息处理。
:::warning ClassID 和 NftID 的验证留给应用开发者处理。 SDK 不对这些字段提供任何验证。:::
您可以使用 MsgSend 消息来转移 NFT 的所有权。这是 x/nft 模块提供的一个功能。当然,您也可以使用 Transfer 方法实现自己的转移逻辑,但需要格外注意转移权限。 消息处理在以下情况下应失败:
提供的 ClassID 不存在。
提供的 Id 不存在。
提供的 Sender 不是 NFT 的所有者。
x/nft 模块定义了一个结构体 Class,用于描述一类 NFT 的共同特性。在该类别下,您可以创建各种 NFT,这相当于以太坊上的 ERC721 合约。该设计在 中定义。
NFT 模块发出在 中定义的 proto 事件。