买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种区块链节点的并行块同步方法_北京天德科技有限公司_201810327200.6 

申请/专利权人:北京天德科技有限公司

申请日:2018-04-12

公开(公告)日:2021-01-12

公开(公告)号:CN108600353B

主分类号:H04L29/08(20060101)

分类号:H04L29/08(20060101);G06Q40/04(20120101)

优先权:

专利状态码:有效-授权

法律状态:2021.01.12#授权;2019.03.01#实质审查的生效;2018.09.28#公开

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

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

全文数据:一种区块链节点的并行块同步方法技术领域[0001]本发明涉及一种区块链块同步技术,特别是一种区块链节点的并行块同步方法。背景技术[0002]在区块链系统中,我们将一个块在链中所处的位置标记为这个块的高度。在一个正常运行的区块链系统中,不同区块链节点中相同高度对应的块数据应该完全一致。[0003]基于拜占庭共识的区块链系统的建块过程大概包括以下四个阶段:1节点收集交易信息,将交易的hash值广播至其他所有节点;2所有节点将收集到的交易hash值集合取交集,得到的公共交易集合作为本次建块的交易集合,由选出的建块节点进行建块,并将块信息广播至其他所有节点;3各个节点对收到的块进行验证,包括交易范围、块hash值等,将验证是否通过作为投票信息,发送给其他各个节点;4所有节点转发自己收到的投票信息,并将得到所有投票转发结果进行统计,确定本轮建块是否成功。[0004]在整个共识过程中,各个环节所有的节点处理的信息应该位于同一高度,也就是说各个节点己存储了相同数量的块的信息,而当前进行共识的交易与块基于相同的pre-hash,即高度为当前处理高度减1对应的块的hash值。[0005]以下两种场景,某个节点的高度会与其他节点有所区别:1在区块链系统成功运行后,如果有新的节点加入,新节点的高度一定和其他已有节点不一致,新的节点也没有存储历史的交易和块信息,难以参与共识;2在某个区块链节点的网络发生延迟时,该节点也有可能未能参与某一高度的共识建块过程,导致某些块信息的丢失,同时无法及时更新当前节点的块高度信息。[0006]以上两种场景都需要高度与其他节点不一致的节点进行高度和块数据的同步。[0007]块数据的同步有几种可行方案。[0008]第一种方案,所有节点暂停共识,等待数据同步完成后再开启共识,暂停过程中,高度不一致的节点向其他节点申请数据同步,并通过返回值得到需要同步的数据。这种方案会极大地影响整个区块链系统的性能,如果缺失的数据过多会导致长时间的“停机”,影响系统的连贯性,也有可能引发大量的输入数据堆积。[0009]第二种方案,缺少数据的节点在拜占庭算法允许的故障范围内时,其他节点可以继续正常地通过共识建块存储,缺少数据的节点暂停共识,进行数据同步,同步完成后再加入共识建块过程。这种方案一定范围内可以解决系统“停机”的问题,但由于在缺少数据的p点同步数据的过程中,其他节点还在正常地建块,一边更新一边有新的需要同步的数据产生,有可能导致缺少数据的节点永远无法追赶上其他节点的高度,不断地在进行同步更新而无法重新加入到共识中。[0010]为了解决上述两种方案存在的问题,本发明通过使用并行的块同步技术来补全丢失的块信息,当确定要进行数据同步后,并不会暂停任何节点的共识建块流程,而是由异步线程去获取缺失的信息,缺少数据的节点立刻更新当前高度,以便正常参与接下来的共识过程。发明内容[0011]本发明的目的在于解决区块链块数据同步问题,实现在不影响区块链正常共识与建块过程的同时及时同步节点丢失或需要更新的块和交易信息,确保区块链数据的连续性和完整性。[0012]本发明提供一种区块链节点的并行块同步方法,包含以下步骤:1确定同步的高度范围,放入内存队列;2异步线程定时从内存队列获取待同步的块高度,向其他节点发出块同步请求;3收到块同步请求的节点将本地的对应数据取出,发送给请求同步的节点;4节点收集其他节点返回的块信息,通过共识判断是否需要存储;5如果同步成功,删除此高度的待同步标记,如果同步不成功,放回内存队列。[0013]进一步地,步骤⑴具体为:步骤1.1各个节点在建块的第一个步骤中,会将本地的高度信息随交易hash—起发送至其他节点;步骤1.2将某一节点收到的超过三分之二节点数量的最大高度作为标准高度;步骤1.3如果该节点本地高度小于该标准高度,说明这一节点的高度落后于其他节点,需要进行块同步;步骤1.4将本地高度与标准高度进行对比,缺少的这些高度记录到本地内存待同步高度的队列中,然后将本地高度强制更新为标准高度,参与后面的共识过程。[0014]进一步地,步骤2具体为:步骤2.1系统启动时开启异步线程执行定时扫描任务,扫描待同步高度队列;步骤2•2该定时任务扫描到待同步高度队列中存在元素,则从队头取出一个元素,gp需要同步数据的高度,向其他节点发出该高度的数据同步请求。[0015]进一步地,步骤3具体为:步骤3•1收到块同步请求的节点根据请求中的高度信息在本地进行数据查找;步骤3_2查询到数据的节点将对应高度的块数据以及交易数据等发送给待同步的节点。[0016]进一步地,步骤4具体为:步骤4.1待同步的节点接收其他各个节点发来的数据信息;步骤4_2待同步节点收集齐其他节点发来的块和交易数据后,进行数据汇总与对比,根据拜占庭算法,超过三分之二的节点发来的块和交易数据完全一致,则说明获取到了要同步的块信息,否则同步失败。[0017]进一步地,步骤5具体为:步骤5•1同步成功,则将块和交易信息存储到本地的记录中,同时将这些交易从本地的待处理交易数据中清除;同步不成功,则将该高度信息放回待同步的高度队列队尾,等待下次同步处理。[0018]此外,系统对于节点的数量也有所约束:为了容忍f个节点的故障或块丢失,系统需要3f+l个节点,节点出现块信息丢失或高度不同步的情况下,如果节点总数超过故障节点数量的三倍,块同步功能就可以将故障节点数据更新至最新状态,且并行的同步不会影响其余正常节点的共识运作。新节点加入时,也应保证同时新增的节点不要超过现有节点数量的三分之一,即f个。[0019]不同的通信数据用不同的高度标记,每次同步请求收到的返回数据都有可识别的高度信息,保证在块和交易数据对比时不会发生不同高度的数据混入同一组对比中来,影响同步成功。[0020]块同步与正常的建块共识流程并行处理,但由于处于同一进程中,对于系统资源的使用会互相影响,因此,系统设定每次只同步一个高度的数据,避免大量块和交易信息的交互占用过多系统资源和网络带宽,影响正常共识过程,导致区块链本身共识速度的降低。[0021]本发明的有益效果和优点是:提供了一种区块链节点的并行块同步方法,可以达到在不影响区块链正常共识与建块过程的同时及时同步节点丢失或需要更新的块和交易信息,确保区块链数据的连续性和完整性,同时利用并行技术,保证原有的交易处理速度,充分利用计算机的线程资源。附图说明[0022]图1是区块链并行块同步的触发流程示意图。[0023]图2是区块链建块流程与并行块同步之间进行数据传递的示意图。[0024]图3是块同步时节点之间的通信示意图。具体实施方式[0025]以下示例性描述中提出了许多技术细节以便能使读者更好地理解本发明的思路与达到的效果。但所有不局限于以下细节的变化和修改,基于本发明思路的实现,均为本申请各权利要求所要求保护的技术方案。[0026]首先,无论是数据的存储或是数据的传递,块高度作为标识必须存在,实施方案的每个环节中,都包含块高度的传递。[0027]其次,网络数据使用Json格式进行传输,Json对象中包含高度信息。[0028]块同步过程中,无论是待同步高度的线程安全队列,还是一些中间数据,可以使用内存直接存储,或者使用第三方缓存工具如redis等进行存储。[0029]根据拜占庭算法,如果要容忍f个节点的故障或数据丢失,系统需要至少3f+1个节点。[0030]我们以最小节点数量4举例:4个节点进行区块链的共识建块流程,节点1发生了故障,未能及时参与一段时间的共识建块流程。[0031]节点1修复后,从中断的高度hi重新启动共识建块。[0032]在等待其他节点交易hash数据的期间,有可能收到多个不同高度的数据信息。节点1将这些信息的高度进行统计,在数量超过三分之二节点数量的高度中,取最大的高度作为标准高度,记录h2。[OO33]节点1目前准备创建高度为hi的块,而有超过三分之二的节点在准备创建高度为h2的块,hl,hl+l,……h2_l为当前节点1缺失的块,将高度hi到h2-1依次放入待同步高度的线fe女全队列队尾,该队列由另一线程负责处理,而节点丨直接将当前高度置为h2,参与到h2的建块流程中。[0034]系统使用间隔1秒的定时作业处理块同步流程。节点丨的定时任务从待同步队列的队头获取一个元素,如果该元素非空,则将此元素,即需要同步的某一个高度,封装成块同步请求信息,发送给其他节点。[°035]节点2、3、4接收到块同步的请求信息,从信息中解析出高度。根据此高度在本地进行查询,将获取到的块和交易的数据封装成块同步信息,发送给节点u[0036]节点1将收到的块同步信息解析,记录高度和对应的块与交易数据。[0037]所有节点发送的同步信息接收完毕后,节点1将此高度的所有数据进行对比。[0038]如果有超过三分之二的节点,g卩3个节点发送的块和交易信息完全一致,那么这个一致的数据作为节点1要存储的数据。如果没有超过三分之二的节点达成一致,那么这个高度的块同步失败。[0039]如果同步成功,节点1将块和交易分别存到本地对应的数据库中。同时,为了避免已入块的交易再次进入共识建块流程,对流程造成干扰,节点丨需要将同步到的交易从待处理交易池中删除。[0040]如果同步不成功,该高度重新进入待同步高度队列的队尾,等待下次处理。[0041]定时任务不断扫描待同步队列,经过h2_hl轮同步后,节点1缺失的hi到h2-1高度的块同步完成。[0042]需要说明的是,本领域的技术人员应该明白,在形式上和细节上可以对本发明进行修改,但不可偏离本发明的思路和范围。

权利要求: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该定时任务扫描到待同步高度队列中存在元素,则从队头取出一个元素,gp需要同步数据的高度,向其他节点发出该高度的数据同步请求。4.根据权利要求1所述的一种区块链节点的并行块同步方法,其特征在于:所述步骤3具体为:步骤3.1收到块同步请求的节点根据请求中的高度信息在本地进行数据查找;步骤3•2查询到数据的节点将对应高度的块数据以及交易数据等发送给待同步的节点。5.根据权利要求1所述的一种区块链节点的并行块同步方法,其特征在于:所述步骤4具体为:步骤4.1待同步的节点接收其他各个节点发来的数据信息;步骤4.2待同步节点收集齐其他节点发来的块和交易数据后,进行数据汇总与对比,根据拜占庭算法,超过三分之二的节点发来的块和交易数据完全一致,则说明获取到了要同步的块信息,否则同步失败。6.根据权利要求1所述的一种区块链节点的并行块同步方法,其特征在于:所述步骤5具体为:步骤5•1同步成功,则将块和交易信息存储到本地的记录中,同时将这些交易从本地的待处理交易数据中清除;同步不成功,则将该高度信息放回待同步的高度队列队尾,等待下次同步处理。7.根据权利要求1至6所述的一种区块链节点的并行块同步方法,其特征在于:系统共有3f+l个节点,而需要同步数据的节点不应超过f•个。8.根据权利要求1至6所述的一种区块链节点的并行块同步方法,其特征在于:不同高度的数据同步请求以及对应返回的数据用不同的高度标记,多个高度的同步可以同时进行,而数据互相之间不会发生混淆。

百度查询: 北京天德科技有限公司 一种区块链节点的并行块同步方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。