技术教程 | MOAC节点数据同步的模式

2019-10-21 12:07:03 6
1.同步模式简介


下载moac节点文件之后,运行moac --help, 你就可以看到下面的命令行说明:


D:\nuwa1.0.11\nuwa1.0.11.win\win\vnode>moac-windows-4.0-amd64 --help
Start MOAC nuwa 1.0.11-rc ...
...
MOAC CORE OPTIONS:
...
  --syncmode "fast"         Blockchain sync mode ("fast", "full", or "light")
...
MISC OPTIONS:
  --fast      Enable fast syncing through state downloads
  --light     Enable light client mode

从这里我们可以看出什么呢?


节点提供了 "fast", "full", "light" 三种数据同步模式。


当指定同步模式为"fast"时,节点会从网络同步所有的区块头,区块体以及状态数据,但不对区块中的交易进行重放,只会对区块中的数据进行校验。


当指定同步模式为"full"时,节点会从网络同步所有的区块头,区块体并重放区块中的交易以生成状态数据。


当指定同步模式为"light"时,节点仅从网络中同步所有区块头,不去同步区块体,也不去同步状态数据,仅在需要相应区块和状态数据时从网络上获取。


当不指定任何模式时,默认为"fast"模式。


2.提供三种模式的原因


随着区块数据的越来越多,全节点同步,也就是"full"这种数据同步模式实在是太慢了,往往需要一周甚至更多时间。但区块链网络又需要这些全节点去保存可追溯的历史数据。


运行轻节点,也就是"light"这种数据同步模式,因为只需要同步区块头数据,数据同步在几个小时就可以完成,但很多操作都需要这些轻节点去网络上其它全节点去请求数据,显然仅仅靠轻节点去组成区块链网络是不现实的。


“fast” 这种同步模式就是"full"模式和"light"模式的一个折衷,通过直接从网络同步状态数据而不是通过重放交易生成状态数据的方式,节省了很多时间,一般来说机器配置合理的话1天就可以完成主网数据同步。


3.三种模式的安全性


毋庸置疑,全节点"full"模式是最安全的,在这种模式下,所有区块和区块中的交易都会被逐一验证。


在"fast"这种数据同步模式下,比较靠近现在的区块和其中包含的交易也都会被逐一验证。但不会验证比较老的区块数据。


在 ”light“ 这种轻节点模式下,不会对区块和区块中的交易进行交易。但在需要处理特定区块相关交易或需要读取某个区块中相关的状态数据时,会通过区块头中的哈希值对区块和状态数据进行校验。



4.该用什么模式


自己搭节点,没有特别需求的话,使用默认的"fast"同步模式就好了。


如果要在树莓派等低配置设备中,可以使用"light"同步模式。使用"light"模式时,本地签名并发送交易一般没什么问题,但要获取区块数据或账户余额时,对网络情况就有更多的要求了。


如果特别注重安全性,并且想获取所有区块链历史数据,只能使用全节点模式了。


使用全节点"full"模式的命令如下:


D:\nuwa1.0.11\nuwa1.0.11.win\win\vnode>moac-windows-4.0-amd64 --syncmode full        //全节点

 


5."light"节点与"full"节点的交互


首先,"light"节点会维护多个与"full"节点的 p2p 连接。然后,当"light"节点需要与"full"节点交互时,会将需要发送的请求放到一个请求队列中。"light"节点会启动一个 goroutine 不断从请求队列里获取请求,然后从 p2p 节点列表里选一个当前最好用的节点,将请求发出去。请求得到的结果会发到本地数据库和缓存里。



(转自墨客区块链

电话咨询
社区服务
产品展示