主网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成功

相关推荐
Sakuyu434683 分钟前
C语言基础(三)
c语言·开发语言
郝学胜-神的一滴5 分钟前
深入epoll反应堆模型:从libevent源码看高性能IO设计精髓
linux·服务器·开发语言·c++·网络协议·unix·信息与通信
XS0301067 分钟前
Java 基础(十)异常
java·开发语言·oracle
和小潘一起学AI7 分钟前
Python导入私有模块(企业级方案)
开发语言·python
!停12 分钟前
C++入门STL容器Vector使用基础,深挖 Vector替代 C 语言繁琐容器的利器
开发语言·c++
小何code24 分钟前
【Python零基础入门】第4篇:Python变量与数据类型详解
开发语言·python
xiaoshuaishuai833 分钟前
C# 数字资源分发
开发语言·c#
techdashen33 分钟前
用自家产品构建自家产品:Cloudflare Images 的工程架构解析
开发语言·架构·rust
笑不语41 分钟前
从共病网络到可解释 AI:同济医院 10 分 SCI 全流程复现(R 语言)
开发语言·人工智能·r语言
yu859395843 分钟前
利用MATLAB进行木材图像去噪
开发语言·算法·matlab