折腾之:编译&测试 hived(v1.26.0rc?)

之所以标题中写着v1.26.0rc?,是因为最初我测试的版本是v1.26.0rc3,然后当我进行了大部分测试之后,发现版本已经更新到v1.26.0rc5,不得不说团队工作效率超高啊。

image.png
(图源 :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_

显示如下:

image.png

升级测试机至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

完成时的提示信息:

5be916787ca9b8fc2e087b7c1b04797.png

全部完成耗时4249秒,然后会提示:

chain_plugin.cpp:641 check_data_consisten ] Replaying is not finished. Synchronization is not allowed. { "block_log-head": 68534173, "state-head": 0 }

hived自动关闭:

17525c8c5085973ce1e1caedee6d19c.png

也就是说,hived_v1.26.0.rc3 使用block_log.artifacts替代了原来的block_log.index

两者体积对比(撰写本文时), block_log.artifacts占1.6G空间,block_log.index占523M空间:

1665156638877.png

block_log.artifacts机制尚未研究,不清楚。不过可以确定的是,我之前研究的修复破损block_log的方法(基于block_log.index),肯定是不好用啦。😭

测试执行(非压缩,replay)

在我机器上进行replay (非压缩,/dev/shm)

hived_v1.26.0.rc3 --replay-blockchain

开始replay:

2e74d2366707a9983485c3bd776158a.png

replay从开始到完成,大概耗时10个小时左右。(我本地机比较强大)。

一个显著的区别,就是程序运行时,打印的信息比较繁多:

ef661c14132d5ab036e7b54764f5cb0.png

这对于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

image.png

结论

尽管对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,编译一切正常:

image.png

对比一下两个版本的库依赖:

Ubuntu 20.04 LTS 下编译v1.26.0rc3

image.png

Ubuntu 22.04 LTS 下编译v1.26.0rc5

image.png

看来后者运行时依赖更少更简洁。

在测试机上运行

将Ubuntu 22.04 LTS 下编译v1.26.0rc5复制到测试机,并运行,提示如下信息:

5782eb5476c2a69c58862a70acaf3af.png

因为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的兼容性

相关链接

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center