【Sui】 前端共学笔记(2)

sui前端共学week_2笔记

sui前端共学week_2笔记

f64fe68af0012c1fe3bf341b10a3ae7.jpg 请关注 sui 前端共学营及其社区,在这里你可以学到前端和 move 合约语言的知识。

week_tow合约部分

新增核心功能,用户create_profile创建的profile下可再create_folder创建多个folder,通过vector来进行存储,folder下还可以add_coin_to_folder<T>添加管理有多种不同的coin,通过动态字段存储。而实现扩展资源管理系统

关于Token,Coin还有Balance

Sui上代币的标准一般就有这三种。Token结构功能只有key,限制用户在合约外不能进行自由传输。 这三者的转化关系如下:

      to_coin ==>        to_balance ==>
Token               Coin                 Balance
      <== from_coin     <== from_balance

Type

type/index.ts 中定义了一系列 type 类型,用于管理与 Sui 区块链 相关的数据。具体来说,这些类型包括:

  • Profile:表示用户资料。
  • DisplayProfile:用于展示用户资料。
  • Folder:表示文件夹,用于管理用户的代币或资源。
  • SuiObject:各类 Sui 区块链上的对象。
  • Event :包括与用户资料、文件夹和代币相关的事件类型,例如 EventProfileCreatedEventFolderCreatedEventCoinWrapped

这些type类型帮助系统更好地组织数据、实现用户管理功能、处理代币和文件夹操作,以及触发相关的事件。

数据处理

contracts/index.ts中核心目的是通过一系列的query方法查询Sui区块链上的数据,获取原始信息,并将其解析处理成在type/index.ts预定义的 type 类型。具体来说,这些操作是为了将Sui区块链上返回的原始数据转换成应用中定义的结构化数据类型,便于进一步的操作和展示。

操作管理

前端可以直接调用合约中create_profilecreate_folderadd_coin_to_folder<T>等方法实现资源的管理扩展。 前端调用合约方法:

export const createProfileTx = async (name: string, description: string) => {
    const tx = new Transaction();
    tx.moveCall({
        package: networkConfig.testnet.packageID,
        module: "week_two",
        function: "create_profile",
        arguments: [
            tx.pure.string(name),
            tx.pure.string(description),
            tx.object(networkConfig.testnet.state)
        ]
    })
    return tx;
}

export const createFolderTx = async (name: string, description: string, profile: string) => {
    if (!isValidSuiAddress(profile)) {
        throw new Error("Invalid profile address");
    }
    const tx = new Transaction();
    tx.moveCall({
        package: networkConfig.testnet.packageID,
        module: "week_two",
        function: "create_folder",
        arguments: [
            tx.pure.string(name),
            tx.pure.string(description),
            tx.object(profile)
        ]
    })
    return tx;
}

export const addCoinToFolderTx = async (folder: string, coin: string, coin_type: string,amount: number) => {
    if (!isValidSuiAddress(folder) || !isValidSuiAddress(coin)) {
        throw new Error("Invalid folder or coin address");
    }
    const tx = new Transaction();
    const [depositCoin] = tx.splitCoins(tx.object(coin), [tx.pure.u64(amount)]);
    tx.moveCall({
        package: networkConfig.testnet.packageID,
        module: "week_two",
        function: "add_coin_to_folder",
        arguments: [
            tx.object(folder),
            tx.object(depositCoin)
        ],
        typeArguments: [coin_type]
    })
    return tx;
}

这样,前端应用能够通过这些交易操作,创建profile、folder,并管理foder中的coin,从而扩展了 Sui 区块链上的资源管理功能。

  • 原创
  • 学分: 0
  • 分类: Sui
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
yuanchengjiayu
yuanchengjiayu
江湖只有他的大名,没有他的介绍。