1.什么是nft?
NFT:Non-fungible-token
 非同质化货币
2.新建suimove项目
使用sui move new 项目名命令新建sui move项目
sui move new nft_qyx
 
项目结构如下:
 
3.写nft合约
module qyx123::nft{
    use sui::object::{Self, UID};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};
    use sui::display;
    use sui::package;
    use std::string::utf8;
    struct NFT has drop {}
	//我的nft结构体,属性id和tokenid
    struct MyNFT has key,store{
        id: UID,
        tokenId: u64
    }
    struct State has key {
        id: UID,
        count: u64
    }
    fun init(witness: NFT, ctx:&mut TxContext){
    	//键值对,键名和值一一对应
    	//键名
        let keys = vector[
            utf8(b"name"),
            utf8(b"collection"),
            utf8(b"image_url"),
            utf8(b"description")
        ];
		//value值
        let values = vector[
            utf8(b"MyNFT #{tokenId}"),
            utf8(b"MyNFT Collection"),
            utf8(b"自己的头像地址"),
            utf8(b"This is My NFT")
        ];
        
		//使用 packge和display发布地址
		
		//创建发布者
        let publisher = package::claim(witness,ctx);
        //创建display
        let display = display::new_with_fields<MyNFT>(&publisher, keys, values, ctx);
        display::update_version(&mut display);
        
        transfer::public_transfer(publisher, tx_context::sender(ctx));
        transfer::public_transfer(display, tx_context::sender(ctx));
		//计数器
        transfer::share_object(State{
            id: object::new(ctx),
            count: 0
        });
    
    }
    entry public fun mint( state:&mut State, ctx: &mut TxContext){
        let sender = tx_context::sender(ctx);
        //计数器
        state.count = state.count + 1;
        let nft = MyNFT {
            id: object::new(ctx),
            tokenId: state.count,
        };
        transfer::public_transfer(nft, sender);
    }
}
 
4.引入图片
找到一张图片,转为base64,代码放到上面的value中的图像地址中
		//value值
        let values = vector[
            utf8(b"MyNFT #{tokenId}"),
            utf8(b"MyNFT Collection"),
            utf8(b"自己的头像地址"),//此处
            utf8(b"This is My NFT")
        ];
 
5.发布到开发网testnet
5.1列出当前所有网络别名和当前网络:
sui client envs
 
此处显示我目前为devnet
 
5.2切换网络命令可以切换到对应网络
切换网络:
sui client switch --env [network alias]
 
5.3编译代码
跳过拉取最新git依赖
sui move build --skip-fetch-latest-git-deps
 
编辑不通过记得在mint函数前加上
  #[lint_allow(self_transfer)]
 
编译通过
 
5.4发布到testnet
sui move test  --skip-fetch-latest-git-deps
sui client publish --skip-fetch-latest-git-deps --skip-dependency-verification --gas-budget 500000000
 
不成功在init函数前加上
    #[allow(unused_function)]
 
发布成功
 
 通过sui浏览器查询packageID
 https://suiexplorer.com/
 
6.mint

复制计数器id到mint处执行
 支付后mint成功



















