赞
踩
NFT:Non-fungible-token
非同质化货币
使用sui move new 项目名
命令新建sui move项目
sui move new nft_qyx
项目结构如下:
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); } }
找到一张图片,转为base64,代码放到上面的value中的图像地址中
//value值
let values = vector[
utf8(b"MyNFT #{tokenId}"),
utf8(b"MyNFT Collection"),
utf8(b"自己的头像地址"),//此处
utf8(b"This is My NFT")
];
sui client envs
此处显示我目前为devnet
切换网络:
sui client switch --env [network alias]
跳过拉取最新git依赖
sui move build --skip-fetch-latest-git-deps
编辑不通过记得在mint函数前加上
#[lint_allow(self_transfer)]
编译通过
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/
复制计数器id到mint处执行
支付后mint成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。