折腾之:编译&测试 hived(v1.26.0rc?)
之所以标题中写着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的兼容性
相关链接
Leave 折腾之:编译&测试 hived(v1.26.0rc?) to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.