【原创】HPB 数据同步之快速同步基本流程(零)


#1

区块链的数据随着挖矿的进行,数据量会越来越大,不论是BTC,ETH,还是HPB都存在这样的问题。那新节点的加入,为了保持账本的一致,就需要将网络中的数据同步到本地。本文就了解下HPB是如何同步数据的。

在HPB的启动参数中有一个参数是–syncmode [full|fast|light] ,syncmode是同步模式,可以使用 全同步模式full,快速同步模式fast,轻量模式light,在不指定模式的情况下,默认为fast。快速同步模式介于全同步与轻量同步之间,本文重点介绍快速同步模式的处理流程。

1、节点self启动的时候根据参数设置同步模式,这里采用默认的fast模式。

2、节点self启动后连接网络中的节点peer,连接成功后启动同步,从第3步开始就是同步的处理流程

3、向节点peer请求区块链的高度height。节点peer收到请求后返回自己的最新块号。

4、查找共同祖先origin。为了保证与网络中节点的链是一致的,节点self查找自己的最新blockNumber并根据blockhash与节点peer找到共同的区块,该区块即为共同祖先。

5、确定好共同祖先后origin,随机生成一个pivot(快速同步的终止点)。比如peer发过来的height为1000,因为self是新节点,找到的origin为0,pivot随机为888。(如果采用full模式同步,则pivot为0)

6、从origin+1块开始同步数据。

以上流程说明了 以下问题:

要同步的数据从哪里来?(连接成功的peer那里)

从哪里开始同步?(origin+1)

同步到哪个块?(height)

到这里需要考虑下,同步数据的几个问题

a、同步哪些数据?

b、如何同步这些数据?

c、数据同步下来如何处理?

同步哪些数据主要还是看链上会产生哪些数据。区块,这是区块链网咯中各个节点产生并需要互相转发的唯一数据。所以,同步哪些数据的问题解决了,同步的数据就是区块,进行拆分,则是分别同步header和body。

7、同步header(从origin+1开始,以192个块为单位,请求数据)

8、同步body(处理header时,触发body的同步)

9、处理同步下来的数据,将同步的数据插入到链中

至于是如何同步header与body的,以及之后的数据处理将以源码的方式解析。


#2

大神,能否结合代码,详解同步这部分流程,想深入学习这块,多谢