让Neo节点的同步速度再快些

前言

当咱们新安装一个Neo节点时,首先要作的就是同步这个节点到最新的区块高度。由于只有这样,你的节点才会拥有和链上相吻合的数据,才能正确的从这个节点接受发送交易。因为区块链数据庞大,有同步节点经验的小伙伴确定深有体会,初次同步时等待时间一般好久。若是不使用任何快速同步方案,须要耗时几天才能完成,这个等待的过程是很是磨人的。git

Neo推出了一种快速同步方案,采用离线同步包进行同步。离线同步包是一个打包了链上数据的压缩文件。当节点检测到本地有离线同步包时会直接从离线同步包中获取数据,减小了节点从网络上获取数据的消耗,加快了同步速度。使用这种同步方案能够将整个同步时间缩短到几个小时。虽然有了明显的提高,可是对于想快速体验Neo节点或者想快速横向拓展节点数量的开发者来讲仍是太慢了。github

在下文中会介绍一种更快捷的同步方式,而且会贴上具体的使用教程。数据库

正文

Neo节点同步数据的时候,本质上是获取一个一个块(block)的数据,并对块数据分析验证,将数据按照“块”、“交易”、“资产”、“合约”等分类存储进leveldb。若是能保证节点的leveldb存储内容和链上种子节点的存储内容同样,就能确保这个节点的数据安全可靠。更进一步说,若是每一次的数据库操做都是正确无误,没有遗漏,那该节点所同步到的数据就是正确可靠的。json

若是可以将数据验证分类这一步骤去除,直接操做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就能够运行节点。spa

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启动节点,能够看到以下:

静心等待一段时间直到出现下图,表明数据已经恢复完成,节点已经开始从链上获取其他数据。

相关文章
相关标签/搜索