星航计划 - DeTask找活网 0基础开发入门到精通 (10)

115 阅读2分钟

星航计划 - DeTask找活网 0基础开发入门到精通 (10)

智能合约部分的升级具体步骤和实施

升级前的准备

packageid : 0x07619...c4e06

发布者 账号: 0xb324...5e328

UpgradeCap: 0x4c1...f7a13b 这个保留好,一直用着的

首先确认环境

sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet  │ https://fullnode.devnet.sui.io:443  │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │        │
│ testnet │ https://fullnode.testnet.sui.io:443 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

其次确认合约发布者的账号

sui client active-address
0xb3...e328

[package]的version字段升级数字

version = "0.0.3"

升级命令

sui client upgrade --skip-dependency-verification --gas-budget 100000000 --upgrade-capability 0x4c1c...a13b

升级后存储 新的packgeid 0xca...f69664e2b67aa

在Move.toml文件里修改

[package]
published-at 字段
published-at = "0xca6e9...4e2b67aa"

升级后进行测试 在浏览器里web3的钱包记得切换至testnet

否则会遇见问题

We were unable to locate the packageID. Please try selecting a different network or reach out to the website owner to confirm the existence of the requested package.

type类型里packageid不变

无论升级多少次 packageid改过很多次 建立的任务的类型,还是初始包名,这个始终不变的。 例: 0x1dd7…6d17::detaskmv::Detask

合约增加结构体的删除测试

最近在研究共享对象是否可以删除的问题,发现原结构有点问题

struct Detask has key,store{
   taker_list: table::Table<address,ListingLog>,//task log

原本计划作为一个记录使用,但发现设计的时候

struct ListingLog has key,store{
        id:UID,
        taskid:ID,
        user:address,
        tst:u64,
        logs:String,
    }

这个 ListingLog 结构体未带有drop能力,导致无法删除. 所以重新写了一个结构

struct ListingLog2 has store,drop{
        taskid:ID,
        user:address,
        tst:u64,
        logs:String,
    }

这样就可以方便删除共享Object了 在测试代码里运行通过了

let ListingLog2{
            taskid,
            user:_,
            tst:_,
            logs:_
        } = bag::remove(&mut detask.baglist,detaskId);

然后测试通过

let Detask2{
            id:nUid, //object id
            ........
        } = detask;

        table::drop(taker_list);
        bag::destroy_empty(baglist);
        object::delete(nUid);

bag结构一定要清空了才能删除 table倒是可以直接drop

星航伴随着各位学员一同成长

telegram: t.me/move_cn

QQ群: 79489587