之所以标题中写着v1.26.0rc?
,是因为最初我测试的版本是v1.26.0rc3,然后当我进行了大部分测试之后,发现版本已经更新到v1.26.0rc5,不得不说团队工作效率超高啊。
(图源 :pixabay)
有个好消息就是从v1.26.0rc3到v1.26.0rc5,不需要重新replay,嗯,这么想,只是需要一些编译的时间,还不错。
编译
之前在Ubuntu 18.04 LTS上使用既往的编译流程编译v1.26.0rc3,编译无法通过
出现类似如下错误:
‘variant’ in namespace ‘std’ does not name a template type
怀疑std::variant是c++17之后的特色,应该和编译器版本或者参数有关。最终确定HIVED 1.26要求使用Ubuntu 20.04 LTS及以后的版本。
升级编译用的VPS至Ubuntu 20.04 LTS,编译成功。
值得提下的是,除了hived, client_wallet, 还有一个compress_block_log工具,用于压缩和解压block_log。编译对应指令为:
make -j$(nproc) compress_block_log
(以下测试使用在Ubuntu 20.04 LTS下编译的hived_v1.26.0.rc3,测试机为Ubuntu 22.04 LTS)
测试执行(打印版本号)
尝试在Ubuntu 18.04 LTS 执行,出现如下错误
./hived_v1.26.0.rc3: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ./hived_v1.26.0.rc3)
通过如下指令可以查看支持的GLIBC版本
strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_
显示如下:
升级测试机至Ubuntu 20.04 LTS,后又进一步升级至Ubuntu 22.04 LTS 后,执行hived_v1.26.0.rc3,可以正常显示版本等信息。
执行
hived_v1.26.0.rc3 --version
显示如下信息:
"version":{"blockchain_version":"1.26.0","hive_revision":"64f7389128f3c1a59f2c8107509d5f6de37aa2d9","fc_revision":"64f7389128f3c1a59f2c8107509d5f6de37aa2d9"}
测试执行(新系统上执行旧版程序)
测试机升级至Ubuntu 22.04 LTS后,hived_v1.25.0 可正常执行。
但是命令行钱包(cli_wallet_v1.25.0
) 出现如下错误:
cli_wallet_v1.25.0: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory。
新版命令行钱包,不兼容旧版hived(有待进一步测试)
其它:测试机升级至Ubuntu 22.04 LTS后,导致我cleos
无法执行:
cleos: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
所以,如果打算在系统上同时运行hived_v1.25.0(或者诸如cleos等程序)以及hived_v1.26.0,又不想去解决可能会遇到的奇怪问题,建议使用buntu 20.04 LTS。
测试执行(非压缩,创建artifact)
在测试机上,测试启动hived_v1.26.0.rc3
- shared_memory.bin 放
/dev/shm
- config.ini 中禁用压缩:
enable-block-log-compression=false
首先会提示:
block_log_artifacts.cpp:422 generate_file ] Attempting to generate a block artifact file for block range: 1...68534173
block_log.cpp:741 for_each_block ] Walking over block log starting from block: 68534173...
中途会提示处理进度:
block_log_artifacts.cpp:499 operator() ] Processed block 67000000 at 6928.06 blocks/s, estimated 9670s remaining
完成时的提示信息:
全部完成耗时4249秒,然后会提示:
chain_plugin.cpp:641 check_data_consisten ] Replaying is not finished. Synchronization is not allowed. { "block_log-head": 68534173, "state-head": 0 }
hived自动关闭:
也就是说,hived_v1.26.0.rc3 使用block_log.artifacts替代了原来的block_log.index。
两者体积对比(撰写本文时), block_log.artifacts占1.6G空间,block_log.index占523M空间:
block_log.artifacts机制尚未研究,不清楚。不过可以确定的是,我之前研究的修复破损block_log的方法(基于block_log.index),肯定是不好用啦。😭
测试执行(非压缩,replay)
在我机器上进行replay (非压缩,/dev/shm)
hived_v1.26.0.rc3 --replay-blockchain
开始replay:
replay从开始到完成,大概耗时10个小时左右。(我本地机比较强大)。
一个显著的区别,就是程序运行时,打印的信息比较繁多:
这对于DEBUG很有帮助,但是如果就是见证人,看这一堆信息可能比较头疼。可以使用如下参数关掉相关信息:
--block-stats-report-type arg (=FULL) Level of detail of block stat reports:
NONE, MINIMAL, REGULAR, FULL. Default
FULL (recommended for API nodes).
亦即在配置文件中添加:
block-stats-report-type=NONE
相关代码参考这里:
(https://gitlab.syncad.com/hive/hive/-/blob/master/libraries/chain/block_flow_control.cpp)
测试执行(重启)
多次重启时均出现了如下信息:
1204524ms p2p_plugin.cpp:510 operator() ] Listening to P2P network
1234516ms chain_plugin.cpp:380 operator() ] No P2P data (block/transaction) received in last 30 seconds... peer_count=0
不过,略等待就可以了(几次操作都是如此)
测试出块
切换出块公钥后,轮到我出块时,成功出块。
我在v1.26.0rc3上的第一个块:
947627ms witness_plugin.cpp:443 block_production_loo ] Generated block #68562214 with timestamp 2022-10-07T12:15:48 at time 2022-10-07T12:15:48
在cutehive.com中查看,节点版本已经切换成v1.26.0
结论
尽管对HF26 都进行了哪些共识修改尚不了解,经过测试,实现了这些内容:
- 在VPS(Ubuntu 20.04 LTS)下成功编译 hived_v1.26.0.rc3
- 在本地机器(Ubuntu 22.04 LTS)上使用非压缩方式block_log,成功进行block_log.artifacts重建,区块replay,以及正常运行同步区块等。
- 设置出块密钥后,可以成功在V1.26.0上出块。
更新
在Ubuntu 22.04 LTS 下编译v1.26.0rc5,编译一切正常:
对比一下两个版本的库依赖:
Ubuntu 20.04 LTS 下编译v1.26.0rc3
Ubuntu 22.04 LTS 下编译v1.26.0rc5
看来后者运行时依赖更少更简洁。
在测试机上运行
将Ubuntu 22.04 LTS 下编译v1.26.0rc5复制到测试机,并运行,提示如下信息:
因为v1.26.0rc3到v1.26.0rc5不需要replay,所以可以使用--force-open
参数来启动,即可正常运行。
不过安全起见,我决定还是要replay一遍,毕竟我大机器replay超级快,哈哈哈哈。(不过两小时后,我发现已经正常同步区块了,好像做了什么又好像没做,怪我之前没盯着看,晕)
其它要做的
虽然HIVED编译、replay、运行、出块都很顺利(好吧,就算是顺利吧),但是还有一堆事情要做。
简单列了一下,以免忘记了:
- 解决之前测试过程中遇到的问题
- 升级所有VPS到Ubuntu 22.04 LTS
- 测试使用压缩方式运行hived_v1.26.0.rc? (节省空间)
- 了解V1.26.0共识变化
- 测试自己代码(python库、机器人程序等)对v1.26.0的兼容性