不废话,直接上最干的干货。首先,默认你已经在ts或js环境中安装了所有关于sui的sdk。我也假设你已经有了一个合约,里面有一个方法(function)。我写了一个非常简单的不是NFT的NFT,里面只有一个mint方法。modulelibrarynft::librarynft{
不废话,直接上最干的干货。
首先,默认你已经在ts或js环境中安装了所有关于sui的sdk。
我也假设你已经有了一个合约,里面有一个方法(function)。
我写了一个非常简单的不是NFT的NFT,里面只有一个mint方法。
module librarynft::librarynft {
use std::string::{String, utf8};
use sui::package;
use sui::display;
use sui::table::{Self, Table};
use sui::event;
use std::hash::sha3_256;
use std::bcs;
public struct LIBRARYNFT has drop {}
public struct LibraryNFT has key,store {
id:UID,
nft_id:vector<u8>,
name:String,
image:String,
description:String,
creator:address,
}
fun init(otw: LIBRARYNFT, ctx: &mut TxContext){
let publisher = package::claim(otw, ctx);
transfer::public_transfer(publisher, ctx.sender());
}
public entry fun mint(name:String,image:String,description:String,ctx: &mut TxContext){ //这个方法谁都可以调用,不用非得是发布者
let mut nft_id = sha3_256(bcs::to_bytes(&name));
let newnft = LibraryNFT{
id:object::new(ctx), // 创建含有key属性的object就用这个方法
nft_id:nft_id,
name:name,
image:image,
description:description,
creator:ctx.sender(),
};
transfer::public_transfer(newnft, ctx.sender()); // 创建一个object本身是没有所有者的,必须紧跟transfer语句来规定其所有者
}
}
// packageid: 0x9f78084ec9c0314248abf3c6d53747ad09a2648e371d531db535e6f7f007c624
我已将其发布在测试网,packageid
为0x9f78084ec9c0314248abf3c6d53747ad09a2648e371d531db535e6f7f007c624
现在,我想在前端调用mint函数。你只需要执行如下步骤:
const tx = new Transaction();
// const account = useCurrentAccount();
// tx.setSender(account.address);
tx.moveCall({
target: "0x9f78084ec9c0314248abf3c6d53747ad09a2648e371d531db535e6f7f007c624::librarynft::mint",
arguments: [tx.pure.string("yanjiuyixia"), tx.pure.string("https://pic.imgdb.cn/item/6756fd88d0e0a243d4e0b50d.webp"), tx.pure.string("yanjiuyixia")],
});
const result = await signAndExecuteTransaction({ transaction: tx, chain: "sui:mainnet" },
{
onError: (error: any) => { // 为 error 参数指定类型
console.error("Transaction failed:", error);
},
});
alert(result);
console.log(result);
第一步:构建交易const tx = new Transaction();
第二步:调用合约tx.moveCall
。target参数设置为packageid::模块名::函数名,arguments设置为函数的参数。
第三步:执行signAndExecuteTransaction
。
整体框架就这三步。但这三部每一步的api所能接受参数的具体内容得翻阅文档。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!