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

相关推荐
程序猿编码5 分钟前
用C++从零开始造一个微型GPT,不借助任何第三方库
开发语言·c++·gpt·模型推理
普通网友21 分钟前
pytest一些常见的插件
开发语言·python·pytest
苦瓜花26 分钟前
【Kotlin】初入门
android·开发语言·kotlin
cndes1 小时前
给Miniconda换源,让包下载更迅速
开发语言·python
LuminousCPP1 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水1 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
铅笔侠_小龙虾2 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust
tiana_2 小时前
写了个零依赖的 Go 版本管理器,curl | bash 完事
开发语言·golang·bash
嘘嘘出差2 小时前
Python 爬虫入门实战:爬取豆瓣电影 Top 250
开发语言·爬虫·python
爱写代码的倒霉蛋2 小时前
实现协程的三种方式
开发语言·python