默认SM2版本
cd cita_recover
$ cargo install --path .
如果想要编译secp256k1-keccak版本,需要修改types/Cargo.toml
文件中的features
default = ["secp256k1", "sha3hash"]
cd cita_recover
$ docker build -t cita/cita_recover:sm .
$ cita_recover --help
cita-recover
yubo
CITA Block Chain Node powered by Rust
USAGE:
cita_recover [OPTIONS] [SUBCOMMAND]
OPTIONS:
-d, --data <data_direction> Set data dir [default: ./data]
-h, --height <height> Sets the destination height
--help Print help information
SUBCOMMANDS:
full_mode_recover recover full mode node from state snapshot
help Print this message or the help of the given subcommand(s)
- -d 指定CITA 的data目录地址
- -h 指定希望到达的高度h (消去比h 高度高的块)
$ cita_recover -d test-chain-0/data -h 100
该程序用于离线恢复 CITA 的链故障,需要修改 CITA 的chain,executor 的KV数据库,以及修改bft 的WAL 文件
- 修改chain 的current hash 指向目的高度块的hash
- 修改bft 的wal 的index 文件指向相应的高度,并且从chain 的db 中抽取proof 和 previous hash 到目标高度的wal 日志中
- 修改executor的 current hash 指向目的块的hash
$ cita_recover full_mode_recover --help
recover full mode node from state snapshot
USAGE:
cita_recover full_mode_recover [OPTIONS]
OPTIONS:
-b, --backup <backup_direction> Sets the snapshot backup direction [default: ./backup]
-d, --data <data_direction> Set data dir [default: ./data]
-h, --height <height> Sets the destination height to recover
--help Print help information
- -d 指定CITA 的data目录地址
- -h 指定希望到达的高度h (消去比h 高度高的块)
- -b 指定备份状态快照的数据目录,该目录必须有与块高h同名的快照数据目录
$ cita_recover full_mode_recover -d ./test-chain-0/data -h 100 --b ./backup
以example设置的数据为例
- 修改chain 的current hash 指向目的高度块的hash
- 修改bft 的wal 的index 文件指向相应的高度,并且从chain 的db 中抽取proof 和 previous hash 到目标高度的wal 日志中
- 删除就有的statedb目录,将备份的状态./backup/10拷贝到./test-chain-0/data中并重命名为statedb
- 希望该程序永远不要用到
- 从节点自身数据库可以理解为使节点块高数据以及状态数据回退;从快照恢复则是仅作块高数据回退而未做状态数据回退,状态数据statedb是直接替换的
- 亲测可用