跳到主要内容

如何更快地同步块和状态。

通常,启动一个新的 main 网络节点,就会自动同步区块数据,而这个过程是非常漫长的。

接下来将介绍如何通过 Starcoin 工具链提供的数据导出工具来加快新节点同步区块数据的速度,以及如何同步链的状态。

下载和安装

根据你所使用的系统下载相应预编译的 Starcoin 工具链,如果你已经完成了 starcoin下载和安装,那么可以跳过这一步。

# 以 Ubuntu 为例
wget https://github.com/starcoinorg/starcoin/releases/download/v1.11.10/starcoin-ubuntu-latest.zip

# 解压
unzip starcoin-ubuntu-latest.zip

# 进入解压目录,检查
cd starcoin-artifacts/
./starcoin_db_exporter -h

提示:如果经常使用,推荐添加到 PATH 环境变量中。

同步区块数据

如果启动一个新的全节点,通常是下载其他节点的主网区块数据到新节点,并以下载的区块数据启动节点。 下载(导出)的区块数据存储在 CSV 文件上,方便数据交换和存储。

导出块

export-block-range 子命令用于导出区块数据。

# 创建一个目录用于存放从节点导出的区块数据
mkdir ~/bak

# 导出区块
./starcoin_db_exporter export-block-range -i ~/.starcoin/main/ -s 1 -e 10000 -n main -o ~/bak
  • -i 指定节点的数据目录。
  • -s 指定区块数据的起始高度。
  • -e 指定区块数据的结束高度。
  • -n 指定网络。
  • -o 指定存放导出数据的目录。

导出结束后,在 ~/bak 目录下可以看到导出文件为 ~/bak/block_1_10000.csv

导入块

apply-block 子命令用于导入区块数据。

./starcoin_db_exporter apply-block -i block_1_10000.csv -n main -o ~/.starcoin/main/
  • -i 指定导入区块数据的 CSV 文件路径。
  • -n 指定网络。
  • -o 指定节点的数据目录。

使用脚本导入区块数据(推荐)

starcoin 的仓库中提供了 import_block.sh 脚本,预编译版本也打包有相应的脚本。 使用脚本导入区块数据会更加便利,而不必手动导出和导入。

./import_block.sh main ~/.starcoin/main

这个脚本接收两个参数,参数1指定网络名称,例如 main, barnard, proximahalley,参数2指定数据存储的目录,例如 ~/.starcoin/main 或任意自定义的路径。 这个脚本会跳过已经有的区块,每获取一个区块都会自动更新进度,中断脚本后再执行会接着原来的高度继续导入。

执行脚本后,就会自动下载主网区块数据到 ~/.starcoin/main 目录并导入。 等待下载并导入完成,就可以使用这些区块数据运行新的节点了。

注意:使用这个脚本必须保证 starcoin_db_exporterimport_block.sh 在同一路径下。

同步链的状态

starcoin_db_exporter 命令提供了离线导出导入 main, barnard, proxima, halley 网络的快照功能,便于快速的搭建区块链网络。

导出快照

export-snapshot 子命令用于导出快照。

正常导出:

# 创建一个目录用于存放从节点导出的快照数据
mkdir ~/snapshot

# 导出快照
./starcoin_db_exporter export-snapshot -i ~/.starcoin/main -n main -o ~/snapshot
  • -i 指定节点的数据目录。
  • -n 指定网络。
  • -o 指定存放导出快照的目录。

增量导出:

./starcoin_db_exporter export-snapshot -i ~/.starcoin/main -n main -o ~/snapshot -t true

通过 -t 选项指定是否使用增量导出,true 启用,false 禁用。 如果要使用增量导出,需要保证 ~/snapshot 目录下有旧的快照,比如原来 ~/snapshot 目录下的快照高度为 1-400w,现在需要导 1-500w 高度的快照。 如果使用了增量导出,则先会把后面 400w-500w 高度的快照导出,再与原来的快照合并,以此来节省时间。

导入快照

apply-snapshot 子命令用于导入快照。

./starcoin_db_exporter apply-snapshot -i ~/snapshot -n main -o ~/.starcoin/main
  • -i 指定存放快照的目录。
  • -n 指定网络。
  • -o 指定节点的数据目录。

使用脚本导入快照

starcoin 的仓库中提供了 import_snapshot.sh 脚本,预编译版本也打包有相应的脚本。

./import_snapshot.sh main ~/snapshot/ ~/.starcoin/main

这个脚本需要传递3个参数,参数1指定网路的名称,参数2指定快照的存储路径,参数3指定节点的数据目录。

注意:使用这个脚本必须保证 starcoin_db_exporterimport_snapshot.sh 在同一路径下。