一种区块链节点的并行块同步方法技术

技术编号:19068037 阅读:121 留言:0更新日期:2018-09-29 14:56
本发明专利技术涉及一种区块链块同步技术,特别是一种区块链节点的并行块同步方法。其特征包含以下几个方面:(1)确定同步的高度范围,放入内存队列;(2)异步线程定时从内存队列获取待同步的块高度,向其他节点发出块同步请求;(3)收到块同步请求的节点将本地的对应数据取出,发送给请求同步的节点;(4)节点收集其他节点返回的块信息,通过共识判断是否需要存储;(5)如果同步成功,删除此高度的待同步标记,如果同步不成功,放回内存队列。本发明专利技术提供了一种区块链节点的并行块同步方法,可以达到在不影响区块链正常共识与建块过程的同时及时同步节点丢失或需要更新的块和交易信息,确保区块链数据的连续性和完整性。利用并行技术,保证原有的交易处理速度,充分利用计算机的线程资源。

【技术实现步骤摘要】
一种区块链节点的并行块同步方法
本专利技术涉及一种区块链块同步技术,特别是一种区块链节点的并行块同步方法。
技术介绍
在区块链系统中,我们将一个块在链中所处的位置标记为这个块的高度。在一个正常运行的区块链系统中,不同区块链节点中相同高度对应的块数据应该完全一致。基于拜占庭共识的区块链系统的建块过程大概包括以下四个阶段:(1)节点收集交易信息,将交易的hash值广播至其他所有节点;(2)所有节点将收集到的交易hash值集合取交集,得到的公共交易集合作为本次建块的交易集合,由选出的建块节点进行建块,并将块信息广播至其他所有节点;(3)各个节点对收到的块进行验证,包括交易范围、块hash值等,将验证是否通过作为投票信息,发送给其他各个节点;(4)所有节点转发自己收到的投票信息,并将得到所有投票转发结果进行统计,确定本轮建块是否成功。在整个共识过程中,各个环节所有的节点处理的信息应该位于同一高度,也就是说各个节点已存储了相同数量的块的信息,而当前进行共识的交易与块基于相同的pre-hash,即高度为当前处理高度减1对应的块的hash值。以下两种场景,某个节点的高度会与其他节点有所区别:(1)在区块链系统成功运行后,如果有新的节点加入,新节点的高度一定和其他已有节点不一致,新的节点也没有存储历史的交易和块信息,难以参与共识;(2)在某个区块链节点的网络发生延迟时,该节点也有可能未能参与某一高度的共识建块过程,导致某些块信息的丢失,同时无法及时更新当前节点的块高度信息。以上两种场景都需要高度与其他节点不一致的节点进行高度和块数据的同步。块数据的同步有几种可行方案。第一种方案,所有节点暂停共识,等待数据同步完成后再开启共识,暂停过程中,高度不一致的节点向其他节点申请数据同步,并通过返回值得到需要同步的数据。这种方案会极大地影响整个区块链系统的性能,如果缺失的数据过多会导致长时间的“停机”,影响系统的连贯性,也有可能引发大量的输入数据堆积。第二种方案,缺少数据的节点在拜占庭算法允许的故障范围内时,其他节点可以继续正常地通过共识建块存储,缺少数据的节点暂停共识,进行数据同步,同步完成后再加入共识建块过程。这种方案一定范围内可以解决系统“停机”的问题,但由于在缺少数据的节点同步数据的过程中,其他节点还在正常地建块,一边更新一边有新的需要同步的数据产生,有可能导致缺少数据的节点永远无法追赶上其他节点的高度,不断地在进行同步更新而无法重新加入到共识中。为了解决上述两种方案存在的问题,本专利技术通过使用并行的块同步技术来补全丢失的块信息,当确定要进行数据同步后,并不会暂停任何节点的共识建块流程,而是由异步线程去获取缺失的信息,缺少数据的节点立刻更新当前高度,以便正常参与接下来的共识过程。
技术实现思路
本专利技术的目的在于解决区块链块数据同步问题,实现在不影响区块链正常共识与建块过程的同时及时同步节点丢失或需要更新的块和交易信息,确保区块链数据的连续性和完整性。本专利技术提供一种区块链节点的并行块同步方法,包含以下步骤:(1)确定同步的高度范围,放入内存队列;(2)异步线程定时从内存队列获取待同步的块高度,向其他节点发出块同步请求;(3)收到块同步请求的节点将本地的对应数据取出,发送给请求同步的节点;(4)节点收集其他节点返回的块信息,通过共识判断是否需要存储;(5)如果同步成功,删除此高度的待同步标记,如果同步不成功,放回内存队列。进一步地,步骤(1)具体为:步骤1.1各个节点在建块的第一个步骤中,会将本地的高度信息随交易hash一起发送至其他节点;步骤1.2将某一节点收到的超过三分之二节点数量的最大高度作为标准高度;步骤1.3如果该节点本地高度小于该标准高度,说明这一节点的高度落后于其他节点,需要进行块同步;步骤1.4将本地高度与标准高度进行对比,缺少的这些高度记录到本地内存待同步高度的队列中,然后将本地高度强制更新为标准高度,参与后面的共识过程。进一步地,步骤(2)具体为:步骤2.1系统启动时开启异步线程执行定时扫描任务,扫描待同步高度队列;步骤2.2该定时任务扫描到待同步高度队列中存在元素,则从队头取出一个元素,即需要同步数据的高度,向其他节点发出该高度的数据同步请求。进一步地,步骤(3)具体为:步骤3.1收到块同步请求的节点根据请求中的高度信息在本地进行数据查找;步骤3.2查询到数据的节点将对应高度的块数据以及交易数据等发送给待同步的节点。进一步地,步骤(4)具体为:步骤4.1待同步的节点接收其他各个节点发来的数据信息;步骤4.2待同步节点收集齐其他节点发来的块和交易数据后,进行数据汇总与对比,根据拜占庭算法,超过三分之二的节点发来的块和交易数据完全一致,则说明获取到了要同步的块信息,否则同步失败。进一步地,步骤(5)具体为:步骤5.1同步成功,则将块和交易信息存储到本地的记录中,同时将这些交易从本地的待处理交易数据中清除;同步不成功,则将该高度信息放回待同步的高度队列队尾,等待下次同步处理。此外,系统对于节点的数量也有所约束:为了容忍f个节点的故障或块丢失,系统需要3f+1个节点,节点出现块信息丢失或高度不同步的情况下,如果节点总数超过故障节点数量的三倍,块同步功能就可以将故障节点数据更新至最新状态,且并行的同步不会影响其余正常节点的共识运作。新节点加入时,也应保证同时新增的节点不要超过现有节点数量的三分之一,即f个。不同的通信数据用不同的高度标记,每次同步请求收到的返回数据都有可识别的高度信息,保证在块和交易数据对比时不会发生不同高度的数据混入同一组对比中来,影响同步成功。块同步与正常的建块共识流程并行处理,但由于处于同一进程中,对于系统资源的使用会互相影响,因此,系统设定每次只同步一个高度的数据,避免大量块和交易信息的交互占用过多系统资源和网络带宽,影响正常共识过程,导致区块链本身共识速度的降低。本专利技术的有益效果和优点是:提供了一种区块链节点的并行块同步方法,可以达到在不影响区块链正常共识与建块过程的同时及时同步节点丢失或需要更新的块和交易信息,确保区块链数据的连续性和完整性,同时利用并行技术,保证原有的交易处理速度,充分利用计算机的线程资源。附图说明图1是区块链并行块同步的触发流程示意图。图2是区块链建块流程与并行块同步之间进行数据传递的示意图。图3是块同步时节点之间的通信示意图。具体实施方式以下示例性描述中提出了许多技术细节以便能使读者更好地理解本专利技术的思路与达到的效果。但所有不局限于以下细节的变化和修改,基于本专利技术思路的实现,均为本申请各权利要求所要求保护的技术方案。首先,无论是数据的存储或是数据的传递,块高度作为标识必须存在,实施方案的每个环节中,都包含块高度的传递。其次,网络数据使用Json格式进行传输,Json对象中包含高度信息。块同步过程中,无论是待同步高度的线程安全队列,还是一些中间数据,可以使用内存直接存储,或者使用第三方缓存工具如redis等进行存储。根据拜占庭算法,如果要容忍f个节点的故障或数据丢失,系统需要至少3f+1个节点。我们以最小节点数量4举例:4个节点进行区块链的共识建块流程,节点1发生了故障,未能及时参与一段时间的共识建块流程。节点1修复后,从中断的高度h1重新启动共识建块。在等待其本文档来自技高网
...

【技术保护点】
1.一种区块链节点的并行块同步方法,其特征在于,包含以下几个步骤:(1)确定同步的高度范围,放入内存队列;(2)异步线程定时从内存队列获取待同步的块高度,向其他节点发出块同步请求;(3)收到块同步请求的节点将本地的对应数据取出,发送给请求同步的节点;(4)节点收集其他节点返回的块信息,通过共识判断是否需要存储;(5)如果同步成功,删除此高度的待同步标记,如果同步不成功,放回内存队列。

【技术特征摘要】
1.一种区块链节点的并行块同步方法,其特征在于,包含以下几个步骤:(1)确定同步的高度范围,放入内存队列;(2)异步线程定时从内存队列获取待同步的块高度,向其他节点发出块同步请求;(3)收到块同步请求的节点将本地的对应数据取出,发送给请求同步的节点;(4)节点收集其他节点返回的块信息,通过共识判断是否需要存储;(5)如果同步成功,删除此高度的待同步标记,如果同步不成功,放回内存队列。2.根据权利要求1所述的一种区块链节点的并行块同步方法,其特征在于:所述步骤(1)具体为:步骤1.1各个节点在建块的第一个步骤中,会将本地的高度信息随交易hash一起发送至其他节点;步骤1.2将某一节点收到的超过三分之二节点数量的最大高度作为标准高度;步骤1.3如果该节点本地高度小于该标准高度,说明这一节点的高度落后于其他节点,需要进行块同步;步骤1.4将本地高度与标准高度进行对比,缺少的这些高度记录到本地内存待同步高度的队列中,然后将本地高度强制更新为标准高度,参与后面的共识过程。3.根据权利要求1所述的一种区块链节点的并行块同步方法,其特征在于:所述步骤(2)具体为:步骤2.1系统启动时开启异步线程执行定时扫描任务,扫描待同步高度队列;步骤2.2该定时任务扫描到待同步高度队列中存在元素,则从队头取出一个元素,即需要同步数据的高度,向其他节点发出该高度的...

【专利技术属性】
技术研发人员:蔡维德
申请(专利权)人:北京天德科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1