主网NFT的发布合约

1.什么是nft?

NFT:Non-fungible-token

非同质化货币

2.新建suimove项目

使用sui move new 项目名命令新建sui move项目

rust 复制代码
sui move new nft_qyx

项目结构如下:

3.写nft合约

bash 复制代码
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中的图像地址中

bash 复制代码
		//value值
        let values = vector[
            utf8(b"MyNFT #{tokenId}"),
            utf8(b"MyNFT Collection"),
            utf8(b"自己的头像地址"),//此处
            utf8(b"This is My NFT")
        ];

5.发布到开发网testnet

5.1列出当前所有网络别名和当前网络:

bash 复制代码
sui client envs

此处显示我目前为devnet

5.2切换网络命令可以切换到对应网络

切换网络:

bash 复制代码
sui client switch --env [network alias]

5.3编译代码

跳过拉取最新git依赖

rust 复制代码
sui move build --skip-fetch-latest-git-deps

编辑不通过记得在mint函数前加上

bash 复制代码
  #[lint_allow(self_transfer)]

编译通过

5.4发布到testnet

bash 复制代码
sui move test  --skip-fetch-latest-git-deps

sui client publish --skip-fetch-latest-git-deps --skip-dependency-verification --gas-budget 500000000

不成功在init函数前加上

bash 复制代码
    #[allow(unused_function)]

发布成功

通过sui浏览器查询packageID

https://suiexplorer.com/

6.mint

复制计数器id到mint处执行

支付后mint成功

相关推荐
郝学胜-神的一滴1 分钟前
Qt QPushButton 样式完全指南:从基础到高级实现
linux·开发语言·c++·qt·程序人生
沐知全栈开发5 分钟前
R MySQL 连接
开发语言
tryxr13 分钟前
变量捕获相关内容
java·开发语言·jvm
百锦再24 分钟前
大型省级政务平台采用金仓数据库(KingbaseES)
开发语言·数据库·后端·rust·eclipse
biter down40 分钟前
C 语言17:位操作符 & | ^:从二进制编码到大小端
c语言·开发语言
mjhcsp1 小时前
C++ map 容器:有序关联容器的深度解析与实战
开发语言·c++·map
将编程培养成爱好1 小时前
C++ 设计模式《账本事故:当备份被删光那天》
开发语言·c++·设计模式·备忘录模式
黑咩狗夜.cm1 小时前
Aspose.word实现表格每页固定表头、最后一行填满整个页面
开发语言·c#·word
饼干,1 小时前
第5天python内容
开发语言·python
froginwe111 小时前
Ruby 发送邮件 - SMTP
开发语言