链上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-alphahttps://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中如果没有基金会权限,参考 ,使用如下命令得到基金会账号权限

使用如下命令

基金会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

 

加入执行队列

 

参考文档