前言
当我们新安装一个Neo节点时,首先要做的就是同步这个节点到最新的区块高度。因为只有这样,你的节点才会拥有和链上相吻合的数据,才能正确的从这个节点接受发送交易。由于区块链数据庞大,有同步节点经验的小伙伴肯定深有体会,初次同步时等待时间通常很久。如果不使用任何快速同步方案,需要耗时几天才能完成,这个等待的过程是非常磨人的。
Neo推出了一种快速同步方案,采用离线同步包进行同步。离线同步包是一个打包了链上数据的压缩文件。当节点检测到本地有离线同步包时会直接从离线同步包中获取数据,减少了节点从网络上获取数据的消耗,加快了同步速度。使用这种同步方案可以将整个同步时间缩短到几个小时。虽然有了明显的提升,但是对于想快速体验Neo节点或者想快速横向拓展节点数量的开发者来说还是太慢了。
在下文中会介绍一种更快捷的同步方式,并且会贴上具体的使用教程。
正文
Neo节点同步数据的时候,本质上是获取一个一个块(block)的数据,并对块数据分析验证,将数据按照“块”、“交易”、“资产”、“合约”等分类存储进leveldb。如果能保证节点的leveldb存储内容和链上种子节点的存储内容一样,就能确保这个节点的数据安全可靠。更进一步说,如果每一次的数据库操作都是正确无误,没有遗漏,那该节点所同步到的数据就是正确可靠的。
如果能够将数据验证分类这一步骤去除,直接操作leveldb,对leveldb进行数据的增删改,就必定能够加快同步的速度。首先NEL将节点对leveldb操作都记录下来。例如在高度1时put了什么数据,delete了什么数据。新的节点可以根据这些有序的操作重新操作一次leveldb,这样就能保证两个leveldb数据的一致性。 这虽然牺牲了一定的安全性,但是在确保数据源可靠的情况下,这个用安全性换来的快捷还是有意义的。
这种同步方式相比较官方推出的快速同步包要更快捷一点,它同步速度的瓶颈在于你硬盘的读写速度,初次同步到最新高度的耗时一般在十几分钟。NEL将新的同步功能做成了插件,并将数据库操作打包成了压缩文件以供开发者使用。只要使用NEL定制改版的节点(neo-cli-nel),就能添加这个插件并实现快速同步。暂时官方原版的节点不能使用此插件。
使用流程(测试网为例)
0x01 下载neo-cli-nel
由于快速同步中的一些功能在原版的节点中(neo-cli)并不支持,所以目前只能使用NEL改版之后的节点(neo-cli-nel)。改版的节点只是增加了部分定制功能,和原版一样可靠安全,相关请求接口也没有变化。这里贴上github的地址:https://github.com/NewEconoLab/neo-cli-nel.git 。编译后可以看到如下的目录接口:
config.json和protocol.json都是默认的测试网环境。打开startUp.bat就可以运行节点。
0x02 下载快速同步的插件
NEL插件的github地址是:https://github.com/NewEconoLab/Plugins.git
插件名为:RestoreDB
在0x01中节点的目录下新建两个文件夹,一个名为Plugins,另一个名为NEL_Plugins。如下图:
将编译好的Restore插件移到NEL_Plugins目录下,如下图:
这里需要提示的是,如果使用了NEL定制的节点,那么所对应的插件也需要使用NEL提供的。Restore插件和RecordToMongo插件需要放在NEL_Plugins目录下。其余都放在Plugins目录下。
0x03 下载快速同步的数据包
下载地址: http://nel-acc.oss-cn-hangzhou.aliyuncs.com/release.0-2400000.zip
将下载好的数据包放在neo-cli.dll所在的目录。如下图:
点击startUp.bat启动节点,可以看到如下:
静心等待一段时间直到出现下图,代表数据已经恢复完成,节点已经开始从链上获取其余数据。