【MOVE】ts前端调用move合约function极简教程

不废话,直接上最干的干货。首先,默认你已经在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

我已将其发布在测试网,packageid0x9f78084ec9c0314248abf3c6d53747ad09a2648e371d531db535e6f7f007c624

现在,我想在前端调用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所能接受参数的具体内容得翻阅文档。

  • 原创
  • 学分: 4
  • 分类: Sui
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
LewisGao
LewisGao
0xd2e9...333f
江湖只有他的大名,没有他的介绍。