基于区块链的区块并发同步方法与流程

文档序号:26193591发布日期:2021-08-06 18:47阅读:263来源:国知局
基于区块链的区块并发同步方法与流程

本发明属于区块链技术领域,具体涉及一种基于区块链的区块并发同步方法。



背景技术:

区块同步是区块链技术中非常重要的流程,区块同步从功能上分为交易同步和状态同步,其中,交易同步是在交易提交时执行,优先保证交易能发往所有的节点被打包处理,区块状态同步是让区块链节点的数据状态保持在最新,而只有拥有最新状态的节点,才能参与到共识中去,进行下一个新区块的共识。

一些情况下,某些节点的区块状态不是最新的,比如,在区块链运行过程中,当一个全新的节点加入到区块链上,或一个已经断网的节点恢复了网络,此节点的区块状态就不是最新的,此时就需要进行区块状态同步。

判别某节点区块状态是否同步的重要标识之一就是区块高度,目前,当某节点区块高度落后于其它节点,区块状态同步过程为:(1)当该节点发现自己区块高度落后于全网时,通过状态同步快速追回到全网最高的高度,在区块状态同步过程中,该需要进行区块状态同步的节点会主动向其它节点请求下载区块,整个下载过程会将网络请求负载分散到多个节点上;(2)该节点建立一个本地缓冲队列,对从其他节点下载来的区块进行缓冲和排序,排序完成的区块会依次被本地节点验证和执行,验证通过后,更新本地的数据状态,让区块链的块高增加,直至更新到最新块,块高达到最高。

现有的这种区块状态的同步方法有个显而易见的性能瓶颈,那就是区块是按序逐个被节点处理的,即便本地缓冲队列长度非常高,但无法加速节点对于整个区块账本的同步速度,而若某个区块的处理时间是其他区块的好几倍,那么,整个区块同步的时间也会随之拉长,导致区块状态同步的效率较低。

现有技术中,公开号为cn107918666a的中国专利文献记载了一种区块链上的数据同步方法和系统,其通过设置中间件来获取智能合约对应的数据结构定义,能够避免编写和调用大量仅用于数据同步的智能合约接口,能够提高获取待同步数据的速度,但是该专利文献仅仅是提高了待同步数据的获取速度,不能提高这些待同步数据的处理速度。



技术实现要素:

本发明旨在提供一种基于区块链的区块并发同步方法,解决现有技术中区块状态同步效率低下的技术问题。

为解决上述技术问题,本发明采用以下技术方案:

提供一种基于区块链的区块并发同步方法,包括以下步骤:

(1)建立区块数据缓冲堆,该区块数据缓冲堆的长度在该节点当前可用的逻辑cpu数量范围内;

(2)该节点查询本地区块高度,并向其它节点发出请求,下载高于本地区块高度的区块,且请求下载的区块数量与该节点当前可用的逻辑cpu数量相同;

(3)该节点收到下载的区块后,执行所下载区块内的交易验证,验证过程中:

(3.1)若某区块验证成功,且该验证成功的区块高度与本地区块高度差大于1,则将该区块插入所述区块数据缓冲堆,验证成功后的区块以最小堆的组织形式储存在所述区块数据缓冲堆中;

(3.2)若某区块验证成功,且该验证成功的区块高度与本地区块高度差正好为1,且所述区块数据缓冲堆为空,则执行更新本地区块操作;

(3.3)若某区块验证成功,且该验证成功的区块高度与本地区块高度差正好为1,且所述区块数据缓冲堆不为空,则执行更新本地区块操作后,将所述区块数据缓冲堆中区块依次出堆,出堆过程中,若本地当前区块高度与待出堆的区块高度差正好是1,则待出堆的区块执行出堆操作,并提交此出堆的区块更新至本地区块,否则,停止出堆;

(4)重复所述步骤(2)-步骤(3),直至完成本地区块状态同步工作。

优选的,在所述步骤(1)中,所述区块数据缓冲堆长度为该节点当前可用的逻辑cpu数量一致。

优选的,在所述步骤(3)中,该节点对获取的各区块进行同步交易验证。

与现有技术相比,本发明的有益效果是:该基于区块链的区块并发同步方法能够并发处理在同步过程中获取的区块数据,不拘泥于对区块进行逐个同步,该基于区块链的区块并发同步方法可以预先处理当前区块之后的其他不相邻的区块,等到轮到本区块处理时,可迅速的跳过已完成的区块验证阶段,直接提交数据并入区块链,提高了对获取的区块的处理速度,能够对区块链网络中节点的区块状态同步流程进行加速,解决了传统区块同步数据中同步区块速度过慢,可能被某个区块处理时间过长而陷入拖慢整体节奏的问题。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明基于区块链的区块并发同步方法一实施例的流程图。

图2为在区块数据缓冲堆中储存的数据结构图之一。

图3为在区块数据缓冲堆中储存的数据结构图之二。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

一种基于区块链的区块并发同步方法,请参阅图1。

如图1所示,该基于区块链的区块并发同步方法包括以下步骤:

步骤s100:建立区块数据缓冲堆,该区块数据缓冲堆的长度在该节点当前可用的逻辑cpu数量范围内。

该步骤中所建立的区块数据缓冲堆是为了在后续步骤中缓存已验证过的但未被节点处理的区块。在该步骤中,该节点当前可用的逻辑cpu数量代表了该节点可以并行处理的最大协程数,本实施例中所建立的区块数据缓冲堆的长度与该节点当前可用的逻辑cpu数量相同,如此,该节点在处理后期下载的区块数据过程中的协程数可为最大并发数,亦即该节点系统能够以同时处理数据的最大数量来处理区块数据。

步骤s200:该节点查询本地区块高度,并向其它节点发出请求,下载高于本地区块高度的区块,且请求下载的区块数量与该节点当前可用的逻辑cpu数量相同。

在该步骤中,由于区块高度高于本地区块高度的区块才可能是比本地区块更新的,因此,本步骤中仅请求下载高于本地区块高度的区块。而由于请求下载的区块数量与该节点当前可用的逻辑cpu数量相同,这样,该节点系统能够对所下载的区块数据进行同步处理。

步骤s300:该节点收到下载的区块后,执行所下载区块内的交易验证。

在本步骤中,对所下载区块内的交易进行验证的目的是识别该区块是否属于该区块链,由于区块哈希值可以唯一、明确地标识一个区块,并且任何节点通过对区块头进行哈希计算都可以独立地获取该区块哈希值,因此能够对获取的区块进行验证。

在验证过程中,会出现以下几种情况:

步骤s301:若某区块验证成功,且该验证成功的区块高度与本地区块高度差大于1,则将该区块插入区块数据缓冲堆,验证成功后的区块以最小堆的组织形式储存在区块数据缓冲堆中。

在该步骤中,由于区块链中的区块组织是链条形式的,如果缺少前面的区块,后面的区块是插入不进去的,后一区块的高度比前一区块的高度大1,因此,当某区块与本地区块的高度差大于1,只能暂存在区块数据缓冲堆中。

这里,通过将验证成功后的区块以最小堆的组织形式储存在区块数据缓冲堆中,比如,若当前可用逻辑cpu数量是4,待处理的区块高度为3,2,1,4,则这些区块在区块数据缓冲堆中储存的数据结构为如图2中的数据结构。

这样,能够确保后续步骤中,每次出堆的都是该区块数据缓冲堆中所有数据的最小值,即,出堆的区块为堆中高度最低的区块。

步骤s302:若某区块验证成功,且该验证成功的区块高度与本地区块高度差正好为1,且区块数据缓冲堆为空,则执行更新本地区块操作。

在该步骤中,对于所验证成功并与本地区块高度差正好为1的区块,说明该区块为与本地区块相邻的区块,能够插入区块链,因此,可执行更新本地区块操作。

步骤s303:若某区块验证成功,且该验证成功的区块高度与本地区块高度差正好为1,且区块数据缓冲堆不为空,则执行更新本地区块操作后,将区块数据缓冲堆中区块依次出堆,出堆过程中,若本地当前区块高度与待出堆的区块高度差正好是1,则待出堆的区块执行出堆操作,并提交此出堆的区块更新至本地区块,否则,停止出堆。

该步骤中,由于在获取与本地区块高度差正好为1的区块之前,不可避免的可能会遇到比本地区块高度差大于1的区块,这些区块缓存在区块数据缓冲堆中,当本地区块更新后,需要对这些缓存在区块数据缓冲堆中的区块进行再次比对,以及时处理区块数据缓冲堆中的区块数据,并及时腾退区块数据缓冲堆,便于后续区块数据的处理。

步骤s400:重复步骤s200-步骤s300,直至完成本地区块状态同步工作。

该步骤中,通过循环处理,直至对全网中属于该区块链的全部高于本地的区块进行处理,并更新到该节点后,即获取最新的区块状态。

下面结合实例对该基于区块链的区块并发同步方法进行进一步说明:

比如,若该节点可用逻辑cpu数量是4,则建立长度与该节点的可用逻辑cpu数量一致的区块数据缓冲堆;检测到本地区块高度是2,收到并验证通过的区块高度依次为3,5,4,6,则:

当所建立的区块数据缓冲堆为空,则对于高度为3的区块,提交本地区块更新,此时,本地区块高度更新为3,这是由于,本地区块高度是2,并且最开始同步时,区块数据缓冲堆是刚刚通过步骤s100初始化的,区块数据缓冲堆中是没有数据的,而此时并发请求并处理完成的区块顺序依次是3,5,4,6,因此先处理高度为3的区块,而高度为3的区块的高度比本地区块的高度2大1,因此直接执行本地区块更新操作,更新后,本地区块高度为3。

接下来:

对于高度为5的区块,由于此时本地区块高度为3,则将该高度为5的区块插入区块数据缓冲堆,这里,由于区块数据缓冲堆仅插入了一个高度为5的区块,若还插入有其他高度的区块,则对区块数据缓冲堆中的区块的高度进行排序,保证每次出堆的都是区块高度最小的一个区块。

接下来:

对于高度为4的区块,由于其高度比本地目前区块的高度3刚好大1,因此,可将该高度为4的区块提交到本地进行区块更新,此时,由于区块数据缓冲堆中缓存有区块数据,因此,需检查区块数据缓冲堆中的区块,发现出堆的区块高度是5,正好与本地目前区块的高度相差为1,则将区块数据缓冲堆中高度为5的区块出堆,并提交至本地进行区块更新,此时,本地区块高度为5,而区块数据缓冲堆为空,停止出堆。

接下来:

对于高度为6的区块,由于其高度比本地目前区块的高度5刚好大1,因此,可将该高度为6的区块提交到本地进行区块更新。

该轮区块数据更新处理完毕后,比如,若此时步骤s200中又收到4个已验证成功的区块高度依次为10,9,8,7,由于本地当前区块高度为6,则,高度为10,9,8的区块依次进入区块数据缓冲堆,高度为10,9,8的区块在区块数据缓冲堆中的数据结构为如图3所示的数据结构。

当处理到高度为7的区块,由于比本地当前区块的高度6刚好大1,因此可提交区块高度为7的区块进行本地更新,此时本地区块高度为7,并依次出堆高度为8,9,10的区块提交进行本地区块更新,至此,本地区块高度为10。

按照步骤s200-s300继续下一轮区块数据更新处理,直至完成本地区块状态更新。

在区块状态更新过程中,若某组获取的区块高度不连续,部分区块缓存在区块数据缓冲堆中不能被用于更新,则在处理下一轮获取的区块之前,对区块数据缓冲堆进行初始化处理。

可见,该基于区块链的区块并发同步方法能够并发处理在同步过程中获取的区块数据,不拘泥于对区块进行逐个同步,该基于区块链的区块并发同步方法可以预先处理当前区块之后的其他不相邻的区块,等到轮到本区块处理时,可迅速的跳过已完成的区块验证阶段,直接提交数据并入区块链,提高了对获取的区块的处理速度,能够对区块链网络中节点的区块状态同步流程进行加速,解决了传统区块同步数据中同步区块速度过慢,可能被某个区块处理时间过长而陷入拖慢整体节奏的问题。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1