星航计划 - 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