背景
运行OKC主网节点时,代码版本不一致或者不是使用make mainnet(如果是测试网: make testnet)编译的代码,可能会导致节点状态数据损坏,该帖子提供修复状态数据的方法。
问题
运行节点状态数据损坏,报以下错误
- wrong Block.Header.AppHash
panic: Failed to process committed block (5355801:EDB99CC2643279770CD3A06CDA5169BE5F3A8943D5644A5A6A147A29AB598372): wrong Block.Header.AppHash. Expected 3F21CC5D5F6B91AED7D7FFD87D809218AF8B996029896BEF033419C779603214, got F674BA0BDB959E9288AB52F574AB4037FF5CB28FAF28FA442640D867A4E232ED
- wrong Block.Header.LastResultsHash
error during handshake: error on replay: wrong Block.Header.LastResultsHash. Expected DBC62DB6E38E211BFCF82A96CCCEE5C98C42AC0DD10D733E386C096ACF58EE22, got F0AF8B8E9B498F68631DF986F69BD41A9F97A3FD436CAD709C97A470AD28EDCA
- 丢失状态数据
failed to load acc Store: wanted to load target 15439037 but only found up to 15439021
解决方案
下载编译最新release版本代码
export EXCHAIND_PATH=~/.okexchaind #(如果您的--home目录不是~/.okexchaind,请指定您自己的--home目录)
cd ${EXCHAIND_PATH}
rm -rf exchain
git clone -b latest_version https://github.com/okx/exchain.git # latest_version可以通过链接 https://github.com/okx/exchain/releases/latest 查看
cd exchain
make mainnet # 务必使用 (如果是测试网: make testnet)
使用exchaind repair-state命令修复状态数据,修复命令如下:
exchaind repair-state --home ${EXCHAIND_PATH} --db_backend=rocksdb
备注:如果命令行出现类似报错:wanted to load target 15417699 but only found up to 15417600
,修复参数带上--start-height=15417500 重新再执行一下
使用修复后的数据重新启动节点,观察是否正常同步区块