链上Move字节码版本号配置升级
这里以halley的版本号从v4升级到v6为例
背景介绍
starcoin中starcoin-framework中有两个比较重要的版本号,一个是LanguageVersion这里就是Move字节码的版本号,新的字节码版本号一般会添加新的字节码 参考这里https://github.com/starcoinorg/move/blob/dev_v6/language/move-binary-format/src/file_format_common.rs#L404-#L407
一个是StdlibVersion这里代表使用的不同版本的starcoin-framework标准库,提供了不同的内容
这里有两个相关的release版本https://github.com/starcoinorg/starcoin/releases/tag/halley-v1.13.1-alpha 和https://github.com/starcoinorg/starcoin/releases/tag/v1.13.0-alpha
halley每次会使用最新版本的StdlibVersion, 参考
pub static G_HALLEY_CONFIG: Lazy<GenesisConfig> = Lazy::new(|| {
let stdlib_version = StdlibVersion::Latest;
由于要模拟从v4到v6升级所以这里使用starcoin-framework的v11,也就是
starcoin-framework = { git = "https://github.com/starcoinorg/starcoin-framework", rev = "cf1deda180af40a8b3e26c0c7b548c4c290cd7e7" }
而v1.13.0-alpha使用的是
starcoin-framework = { git = "https://github.com/starcoinorg/starcoin-framework", rev = "a7eff4fa3e08cecfed09edf3dbf9d216832d7414" }
后者与前者之间的区别就是https://github.com/starcoinorg/starcoin-framework/commit/a7eff4fa3e08cecfed09edf3dbf9d216832d7414
相关操作
1.查看当前move字节码版本
2.发起升级提案
在console下使用如下命令
这里0xed9ea1f3533c14e1b52d9ff6475776ba
是提案的发起者,这里实际上调用了starcoin-framework的OnchainConfigScripts.move里面的函数
这里指升级版本为6
返回类似这样
这里返回proposal_id为0,代表这是第1个提案(提案号从0开始)。实际上可以看到proposal_id生成是来自starcoin-framework的Dao.move的DaoGlobalInfo
3.查看投票状态
使用如下命令
这里返回是这样
返回2是ACTIVE定义在Dao.move的
这里代表投票已经开启
这里实际上调用了Dao.move下面的函数
上面提到的各种Proposal state的状态变化需要使用查看投票状态命令手动触发
这里在starcoin的config/genesis_config.rs里面可以看到 DaoConfig的几个参数
voting_delay 提案开始后多长时间可以投票,voting_period 投票窗口期多长,
min_action_delay投票通过后多长时间后可以执行交易, voting_quorum_rate 投票赞成超过多少百分比代表成功
,后面回提到这些和状态转换有些关系
4.投票
这里在console中使用基金会账号投票,一定能保证结果超过%4,
在console中如果没有基金会权限,参考https://starcoin.atlassian.net/wiki/spaces/WESTAR/pages/1933320 ,使用如下命令得到基金会账号权限
使用如下命令
基金会STC有159256698999279320
,取10分之一能保证一定成功
投票使用如下命令
这里调用了DaoVoteScripts.move的如下函数
5. 查看投票结果
使用命令
这里调用了Dao.move的
返回结果如下
返回分别是Proposal_id,投票开始时间,投票结束时间,赞成票数,反对票数 (这里时间使用的毫秒)
实际结束时间是1676308487775
/ 1000 = 1676308487
, 使用date -r 1676308487
看到结束时间是
Tue Feb 14 01:14:47 CST 2023
等到这个时间过后, 查看投票状态
返回如下
4是AGREE代表成功, 3是DEFEATED
代表失败
6.投票成功后将提案加入执行队列
(main使用poll.starcoin.org网页,这步会自动执行)
命令如下
这里调用的是Dao.move的
使用查看投票状态命令可以看到状态变成5 QUEUE,
这里状态变化都是之前提到Dao.move的proposal_state驱动,具体如下
使用查看投票状态命令直到变成6 EXECUTABLE可以执行下一步
7.执行提案
使用命令
这里调用的是OnChainConfigScripts.move的
8.取回质押的Token
使用下面命令
9.清理完成提案
10.查看move版本字节码
11. 主网投票时间
2023年2月22日12:00 转换为毫秒 1677038400000, voting_delay 36000000, 发起投票使用STC 0.00159053 360000
加入执行队列
参考文档
https://starcoin.org/zh/developer/cli/modify_onchain_config/