# Aptos Move NFT发行代码剖析 **Published by:** [shaneson.eth](https://paragraph.com/@shaneson-eth/) **Published on:** 2022-11-13 **URL:** https://paragraph.com/@shaneson-eth/aptos-move-nft ## Content 背景Move的NFT和Solidity 721/1155相比,相差非常远。所以我觉得挺有必要重新研究一下如何在Aptos发行NFT。我下面的文章的重点是:Aptos Move是面向资源的编程。所以NFT无疑也是一种资源存储在Aptos网络里。 https://mirror.xyz/0xaaE7a1AD2764626d09a233a9bC06C38b413637cf/aaMa0nhHcv6JN-AuN64HpUll3tdWXCTbLj929EhqvDM核心整个Aptos NFT的核心要掌握3个用户:creator(创建者):设计/创建这些NFT的设计者rolayty(收税收的人):用户mint的过程中,rolayty可以收取版税mint(mint NFT的用户):mint NFT的用户用户发行Aptos NFT的大概步骤是:creator提前注册好NFT的资源(或者说注册好这个NFT类型的版权)。(token::create_collection)minter触发mint_nft,记录/传入creator的签名,通过token::create_tokendata方法进行发行NFT所以,关键是要吃透两个方法:0x3::token::create_collection,和0x3::token::create_tokendata0x3::token::create_collectioncreate_collection是发行NFT先决的一个函数:总共有6个参数:&singer:这里传入creator的&singer引用,推荐使用pda的引用,因为后续也要使用creator的引用。name: 这里定义NFT系列的名称。description: 这里定义NFT系列的描述uri: NFT系列的URI(这里不是展示具体的NFT,而是一个系列图)maximun: 这里定义NFT的最大供应量mutate_setting:这里传入3个bool数组,对应的是定义配置是否可修改:分别是描述是否可修改、URI是否可修改、最大NFT供应量是否可修改我们接下来看一下create_collection的内部实现,create_collection主要是为creator创建了2个资源:用户全局唯一的Collectoins资源,这个资源管理着全部创建的NFT。对应单个系列的CollectionData资源,这个资源管理着单个系列的NFT资源。调用完这个函数,就已经为creator和该系列创建了必要的资源空间了。0x3::token::create_tokendata调用完create_collection之后,就可以调用create_tokendata了。这里需要13个参数,我们可以把参数分为3类:base argument: 这里主要是一些基本的参数类型(account, collection, name, descriptoin, maximum和uri)。royalty argument: 这里可以定义版税,但是这里的版税和nft market的版税不一样,nft market会定义另外一套版税,或者会读这个版税参数。完全取决于nft market。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发行代码:运行create_collection,创建好NFT系列的资源之后,运行mint_nft,mint出nft,最后通过token:mint_token_to方法,把token id转移给to地址,完成mint nft。 ## Publication Information - [shaneson.eth](https://paragraph.com/@shaneson-eth/): Publication homepage - [All Posts](https://paragraph.com/@shaneson-eth/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@shaneson-eth): Subscribe to updates