Aptos Move NFT发行代码剖析

背景

Move的NFT和Solidity 721/1155相比,相差非常远。所以我觉得挺有必要重新研究一下如何在Aptos发行NFT。我下面的文章的重点是:Aptos Move是面向资源的编程。所以NFT无疑也是一种资源存储在Aptos网络里。

核心

整个Aptos NFT的核心要掌握3个用户:

  1. creator(创建者):设计/创建这些NFT的设计者

  2. rolayty(收税收的人):用户mint的过程中,rolayty可以收取版税

  3. mint(mint NFT的用户):mint NFT的用户

用户发行Aptos NFT的大概步骤是:

  1. creator提前注册好NFT的资源(或者说注册好这个NFT类型的版权)。(token::create_collection)

  2. minter触发mint_nft,记录/传入creator的签名,通过token::create_tokendata方法进行发行NFT

所以,关键是要吃透两个方法:0x3::token::create_collection,和0x3::token::create_tokendata

0x3::token::create_collection

create_collection是发行NFT先决的一个函数:总共有6个参数:

  1. &singer:这里传入creator的&singer引用,推荐使用pda的引用,因为后续也要使用creator的引用。

  2. name: 这里定义NFT系列的名称。

  3. description: 这里定义NFT系列的描述

  4. uri: NFT系列的URI(这里不是展示具体的NFT,而是一个系列图)

  5. maximun: 这里定义NFT的最大供应量

  6. mutate_setting:这里传入3个bool数组,对应的是定义配置是否可修改:分别是描述是否可修改、URI是否可修改、最大NFT供应量是否可修改

我们接下来看一下create_collection的内部实现,create_collection主要是为creator创建了2个资源:

  1. 用户全局唯一的Collectoins资源,这个资源管理着全部创建的NFT。

  2. 对应单个系列的CollectionData资源,这个资源管理着单个系列的NFT资源。

调用完这个函数,就已经为creator和该系列创建了必要的资源空间了。

0x3::token::create_tokendata

调用完create_collection之后,就可以调用create_tokendata了。这里需要13个参数,我们可以把参数分为3类:

  1. base argument: 这里主要是一些基本的参数类型(account, collection, name, descriptoin, maximum和uri)。

  2. royalty argument: 这里可以定义版税,但是这里的版税和nft market的版税不一样,nft market会定义另外一套版税,或者会读这个版税参数。完全取决于nft market。

  3. property: 这里定义NFT的属性,对于GameFi来说挺有用,比如定义攻击力/防御力之类

第一步是通过creator, collection和name,这三个参数组装成token_data_id。所以,每一个nft的name都不可以相同,一般用加上id隔开。

第二步是读取collection_data里的collection,往collection_data表里新增token_data。这里的token_data定义就是新增的NFT描述,会通过资源的形式写入到collection_data.token_data里。最后完成NFT创建,然后返回TokenDataId

完整代码

最后展示一下完整的NFT发行代码:

  1. 运行create_collection,创建好NFT系列的资源之后,

  2. 运行mint_nft,mint出nft,最后通过token:mint_token_to方法,把token id转移给to地址,完成mint nft。

Subscribe to shaneson.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.