用于在区块链网络中同步数据的方法、设备和存储介质与流程

文档序号:16735202发布日期:2019-01-28 12:34阅读:202来源:国知局
用于在区块链网络中同步数据的方法、设备和存储介质与流程

本申请涉及区块链网络,尤其涉及用于在区块链网络中同步数据的方法、设备和存储介质。



背景技术:

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式。

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链技术的两大特性为可追溯以及不可篡改。

为了保持区块链网络中的各个节点处保存的数据之间的一致性,通常需要对区块链网络中的各个节点进行数据同步。



技术实现要素:

根据本申请的第一方面,提供了一种用于在区块链网络中同步数据的方法,包括:确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合;利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,其中,所述同步任务列表保存要同步的各个区块的各个区块标识符和同步状态;以及经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中,其中,所述区块缓存池用于保存所获得的各个区块。

根据本申请的第二方面,提供了一种计算机存储介质,其上存储有计算机指令,当所述计算机指令被计算机执行时使计算机执行如前述各项中任一项所述的用于在区块链网络中同步数据的方法。

根据本申请的第三方面,提供了一种计算机实现的用于在区块链网络中同步数据的设备,包括:存储器,存储有计算机指令;和处理器,耦接到存储器,执行所述计算机指令以执行如前述各项中任一项所述的用于在区块链网络中同步数据的方法。

根据本申请的一些实施例,可以防止在区块链网络中对数据进行重复同步,从而避免网络带宽的降低和计算资源的浪费。另外,根据本申请的一些实施例,可以提高在区块链网络中对数据进行同步的成功率。另外,根据本申请的一些实施例,可以提高在区块链网络中对数据进行同步的效率和正确率。

通过以下参照附图对本申请的示例性实施例的详细描述,本申请的其它特征及其优点将会变得清楚。

附图说明

构成说明书的一部分的附图描述了本申请的实施例,并且连同说明书一起用于解释本申请的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本申请,其中:

图1是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法的流程图。

图2是示意性地示出根据本申请的一些实施例的区块链网络中的节点的配置的示意图。

图3是示意性地示出根据本申请的一些实施例的用于确定要同步的区块的区块标识符集合的过程的流程图。

图4是示意性地示出根据本申请的一些实施例的同步任务列表的配置的示意图。

图5a是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法的流程图。

图5b是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法的流程图。

图6是示意性地示出根据本申请的一些实施例的用于获得要同步的区块的过程的流程图。

图7是示意性地示出根据本申请的一些实施例的用于将获得的区块保存到区块缓存池中并且将获得的交易摘要信息保存到交易摘要信息缓存池中的过程的流程图。

图8是示意性地示出根据本申请的一些实施例的用于获得要同步的区块的过程的流程图。

图9是示意性地示出根据本申请的一些实施例的用于将获得的区块保存到区块缓存池中并且将获得的交易摘要信息保存到交易摘要信息缓存池中的过程的流程图。

图10是示意性地示出根据本申请的一些实施例的用于将区块缓存池中的区块链接到区块链并且将交易摘要信息缓存池中的交易摘要信息保存到当前节点的过程的流程图。

图11是示意性地示出根据本申请的一些实施例的用于检查区块高度的过程的流程图。

图12是示意性地示出根据本申请的一些实施例的用于检查区块有效性的过程的流程图。

图13是示意性地示出根据本申请的一些实施例的用于检查区块标识符的过程的流程图。

图14是示出可用于实施根据本申请的一些实施例的用于在区块链网络中同步数据的方法的信息处理设备的示意性框图。

具体实施方式

现在将参照附图来详细描述本申请的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的模块和步骤的相对布置、数字表达式和数值不限制本申请的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本申请及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法100的流程图。

如图1中所示,在步骤s101中,可以确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合。

区块链网络一般可以包括多个节点,多个节点可以在彼此之间进行通信以同步数据。

下面结合图2来描述根据本申请的一些实施例的区块链网络中的节点的配置。图2是示意性地示出根据本申请的一些实施例的区块链网络中的节点的配置的示意图。

如图2中所示,区块链网络中包括的多个节点可被划分为当前节点和其他节点。当区块链网络中的特定节点要从区块链网络中的其他节点同步数据时,该特定节点可被称为当前节点。当前节点与组件200相关联。组件200可以包括区块标识符集合201、同步任务列表203、区块缓存池205、交易摘要信息缓存池207、区块链209等。

当前节点可以在本地保存有区块链209,该区块链209可以包含一个或多个区块,各个区块可以由区块标识符来标识。当前节点在本地保存的区块链可能不是最新的,也就是说,当前节点在本地保存的区块链可能没有包含某些新的区块。当前节点可以将这些新的区块确定为要同步的区块。当前节点可以分别获取要同步的各个区块的各个区块标识符,并将其保存在区块标识符集合201中,进而可以确定要同步的所有区块的区块标识符的总集合(在本文中也被称为第一集合)。

根据本申请的一些实施例,上述步骤s101例如可以根据当前节点的同步高度、从区块链网络接收的第一节点高度和当前节点存储的第二节点高度来判断是否要执行同步。

当前节点的同步高度可以指的是对与当前节点相关联的区块链进行同步后要达到的目标高度。一般,可以将当前节点的同步高度的初始值设定为0。注意,在本技术领域中,区块链的高度一般指的是区块链中包含的全部区块的个数。

当前节点可以从区块链网络中接收与区块链网络中的其他节点相关联的区块链的高度,该高度在本文中被称为第第一节点高度。例如,当前节点可以从区块链网络中接收由共识算法中的领导者节点发送的心跳高度作为第一节点高度。

当前节点可以在本地存储与该当前节点相关联的区块链的高度,该高度在本文中可被称为第二节点高度。

下面结合图3来详细描述本申请的上述实施例中的步骤s101的示例。图3是示意性地示出根据本申请的一些实施例的用于确定要同步的区块的区块标识符集合的过程300的流程图。

如图3中所示,在步骤s301中,可以将当前节点的同步高度与从区块链网络接收的第一节点高度进行比较。

在步骤s303中,可以判断当前节点的同步高度是否大于或等于从区块链网络接收的第一节点高度。

如果当前节点的同步高度大于或等于第一节点高度(步骤s303中为“是”),则过程300前进到步骤s305。在步骤s305中,可以决定不要执行同步。在步骤s305之后,过程300可以结束,因此方法100也可以结束。

另外,如果当前节点的同步高度小于第二节点高度(步骤s303中为“否”),则过程300前进到步骤s307。在步骤s307中,可以将当前节点的同步高度更新为等于第一节点高度,并且将当前节点存储的第二节点高度与第一节点高度进行比较。

因为在步骤s303中判断当前节点的同步高度小于第一节点高度,所以可以将当前节点的同步高度更新为等于第一节点高度。

在步骤s307之后,过程300可以前进到步骤s309。在步骤s309中,可以判断当前节点存储的第二节点高度是否大于或等于第一节点高度。

如果第二节点高度大于或等于第一节点高度(步骤s309中为“是”),则过程300前进到步骤s311。在步骤s311中,可以决定不要执行同步。在步骤s311之后,过程300可以结束,因此方法100也可以结束。

另外,如果第二节点高度小于第一节点高度(步骤s309中为“否”),则过程300前进到步骤s313。在步骤s313中,可以根据第一节点高度与第二节点高度之间的差,获得当前节点要同步的各个区块的各个区块标识符的第一集合。

假设当前节点的同步高度为0,并且假设从区块链网络接收的第一节点高度为18。由于当前节点的同步高度“0”小于从区块链网络接收的第一节点高度“18”,所以将当前节点的同步高度更新为等于第一节点高度“18”。

另外,假设当前节点存储的第二节点高度为10,并且与当前节点相关联的区块链209中包含的10个区块的区块标识符分别为“区块0”至“区块9”。由于当前节点存储的第二节点高度“10”小于第一节点高度“18”,所以第一节点高度“18”与第二节点高度“10”之间的差为(18-10=8)。因此,可以确定当前节点要同步8个区块,并且这8个区块的区块标识符分别为“区块10”至“区块17”,并且可以将区块标识符“区块10”至“区块17”保存到区块标识符集合201中,进而可以确定当前节点要同步的全部区块的区块标识符分别为的总集合(即第一集合)为{“区块10”,“区块11”,“区块12”,“区块13”,“区块14”,“区块15”,“区块16”,“区块17”}。

本领域技术人员应该理解,上述当前节点的同步高度、第一节点高度和第二节点高度的值仅为示例,各个区块的区块标识符也仅为示例,还可以采用其他的高度值或其他的区块标识符,不申请对此不作具体限制。

在步骤s309之后,用于在区块链网络中同步数据的方法可以去往上述实施例中的步骤s103。

根据本申请的上述实施例,通过根据当前节点的同步高度、从区块链网络接收的第一节点高度和当前节点存储的第二节点高度来判断是否要执行同步,可以提高在区块链网络中对数据进行同步的效率。

返回参考图1,在步骤s103中,可以利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,其中,所述同步任务列表保存要同步的各个区块的各个区块标识符和同步状态。

下面结合图4来描述根据本申请的一些实施例的同步任务列表203的配置的示例。图4是示意性地示出根据本申请的一些实施例的同步任务列表203的配置的示意图。

如图4中所示,同步任务列表203可以包括要同步的各个区块的区块标识符401和同步状态403。例如,在上面的示例中,区块标识符401可以为“区块10”、“区块12”或“区块17”等,而同步状态403可以为“准备开始”、“正在进行”、“已完成”等。

可以利用同步任务列表203中的区块标识符401来确定已决定要同步的那些区块,并且可以利用同步任务列表203中的同步状态403来判断各个区块的同步的状态以及各个区块的同步是否成功,从而可以防止对数据进行重复同步。另外。关于步骤s103的具体细节,将在下文中详细进行描述。

根据本申请的一些实施例,在已从区块链网络中的其他节点获得由各个区块标识符标识的各个区块的情况下,可以获得各个区块中包含的交易的摘要信息并且将所获得的各个区块中包含的交易的摘要信息保存到交易摘要信息缓存池中。

例如,参考图2,在上述步骤s103中,在已从区块链网络中的其他节点获得了区块10的情况下,可以获得该区块10中包含的交易的摘要信息并且可以将所获得的区块10中包含的交易的摘要信息保存到交易摘要信息缓存池207中。

在步骤s103之后,方法100可以前进到步骤s105。在步骤s105中,可以经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中,其中,所述区块缓存池用于保存所获得的各个区块。

参考图2,与当前节点相关联的区块缓存池205可以保存通过上述步骤s103获得的各个区块。因此,可以经由区块缓存池205,将通过上述步骤s103获得的各个区块链接到与当前节点相关联的区块链209中。关于步骤s105的具体细节,将在下文中详细进行描述。

根据本申请的一些实施例,在已将所述区块缓存池中保存的各个区块链接到与当前节点相关联的区块链中的情况下,可以从所述交易摘要信息缓存池中获得所链接的各个区块中包含的交易的摘要信息并且存储到当前节点。

例如,参考图2,在上述步骤s105中,在已将区块缓存池205中保存的区块10链接到区块链209中的情况下,可以从交易摘要信息缓存池207中获得所链接的区块10中包含的交易的摘要信息并且存储到当前节点。

在步骤s105之后,方法100可以结束。

根据本申请的上述实施例,利用同步任务列表,可以防止在区块链网络中对数据进行重复同步,从而避免网络带宽的降低和计算资源的浪费。另外,根据本申请的上述实施例,可以提高在区块链网络中对数据进行同步的成功率。另外,根据本申请的上述实施例,可以提高在区块链网络中对数据进行同步的效率和正确率。

下面结合图5a来描述根据本申请的一些实施例的用于在区块链网络中同步数据的方法500。图5a是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法500的流程图。

如图5a中所示,在步骤s101中,可以确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合。图5a中的步骤s101与图1中所示的步骤s101相同,其具体细节在此不再赘述。

在步骤s101之后,方法500前进到步骤s501。在步骤s501中,可以将第一集合中包括的区块标识符的个数与预定阈值进行比较,以判断是否要将第一集合拆分为多个第二集合。

例如,在上面的示例中,第一集合中包括的区块标识符的个数为8。假设预定阈值为9,则可以将第一集合中包括的区块标识符的个数“8”与预定阈值“9”进行比较,以判断是否要将第一集合拆分为多个第二集合。本领域技术人员可以理解,预定阈值可以根据经验值或实验值来设定,不申请不作具体限制。

在步骤s501之后,方法前进到步骤s503。在步骤s503中,可以判断第一集合中包括的区块标识符的个数是否大于预定阈值。

在第一集合中包括的区块标识符的个数小于或等于预定阈值的情况下(步骤s503中为“否”),方法500可以前进到步骤s505。在步骤s505中,可以决定不拆分第一集合。在步骤s505之后,方法500可以前进到步骤s103。

例如,在上面的示例中,假设预定阈值为9。由于第一集合中包括的区块标识符的个数“8”小于预定阈值“9”,所以可以在步骤s505中决定不拆分第一集合。

另外,在第一集合中包括的区块标识符的个数大于预定阈值的情况下(步骤s503中为“是”),方法500可以前进到步骤s507。在步骤s507中,可以根据能够配置的第一参数,将第一集合拆分为所述多个第二集合,其中,所述能够配置的第一参数指示第二集合中能够包括的区块标识符的个数。

例如,在上面的示例中,假设预定阈值为7。由于第一集合中包括的区块标识符的个数“8”大于预定阈值“7”,所以可以在步骤s507中根据能够配置的第一参数将第一集合拆分为多个第二集合。例如,可以用能够配置的第一参数对第一集合中包括的区块标识符的个数进行取模运算。例如,假设能够配置的第一参数为3,则可以通过用能够配置的第一参数“3”对第一集合中包括的区块标识符的个数“8”进行取模运算而将第一集合拆分为3个第二集合,其中,第二集合a包括3个区块标识符{“区块10”,“区块11”,“区块12”},第二集合b包括3个区块标识符{“区块13”,“区块14”,“区块15”},第二集合c包括2个区块标识符{“区块16”,“区块17”}。本领域技术人员可以理解,预定阈值与能够配置的第一参数可以不相同,也可以相同,本申请不作具体限定。例如,在上面的示例中,也可以将能够配置的第一参数“3”作为预定阈值。另外,本领域技术人员可以理解,能够配置的第二参数可以根据经验值或实验值来调整,不申请不作具体限制。

在步骤s507之后,方法500可以前进到步骤s103。在步骤s103中,可以利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,其中,所述同步任务列表保存要同步的各个区块的各个区块标识符和同步状态。图5a中的步骤s103与图1中所示的步骤s103相同,其具体细节在此不再赘述。

在步骤s103之后,方法500可以前进到步骤s105。在步骤s105中,可以经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中,其中,所述区块缓存池用于保存所获得的各个区块。图5a中的步骤s105与图1中所示的步骤s105相同,其具体细节在此不再赘述。

在步骤s105之后,方法500可以结束。

根据本申请的上述实施例,通过根据能够配置的第一参数将较大的第一集合拆分为较小的多个第二集合,可以提高每次同步的速度,从而可以使得同步更加平滑。

下面结合图5b来描述根据本申请的一些实施例的用于在区块链网络中同步数据的方法500’。图5b是示意性地示出根据本申请的一些实施例的用于在区块链网络中同步数据的方法500’的流程图。

如图5b中所示,在步骤s101中,可以确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合。图5b中的步骤s101与图1中所示的步骤s101相同,其具体细节在此不再赘述。

在步骤s101之后,方法500’可以前进到步骤s509。在步骤s509中,可以根据能够配置的第二参数,将第一集合拆分为多个第二集合,其中,所述能够配置的第二参数指示第二集合的个数。

例如,可以用能够配置的第二参数对第一集合中包括的区块标识符中的区块号进行取模运算,并根据所得到的余数将第一集合中的各个区块标识符分别放入相应的第二集合中。例如,继续上面的示例,假设第一集合为{“区块10”,“区块11”,“区块12”,“区块13”,“区块14”,“区块15”,“区块16”,“区块17”}。另外,假设能够配置的第二参数、即第二集合的个数为4,则可以通过用能够配置的第二参数、即第二集合的个数“4”对第一集合中包括的区块标识符中的区块号“10”至“17”进行取模运算。因为10除以4的余数为2,所以将第一集合中的区块标识符“区块10”放入与余数2对应的第二集合a’中。类似地,因为11除以4的余数为3,所以将第一集合中的区块标识符“区块11”放入与余数3对应的第二集合b’中。类似地,因为12除以4的余数为0,所以将第一集合中的区块标识符“区块12”放入与余数0对应的第二集合c’中。类似地,因为13除以4的余数为1,所以将第一集合中的区块标识符“区块13”放入与余数1对应的第二集合d’中。类似地,因为14除以4的余数为2,所以将第一集合中的区块标识符“区块14”放入与余数2对应的第二集合a’中。类似地,因为15除以4的余数为3,所以将第一集合中的区块标识符“区块15”放入与余数3对应的第二集合b’中。类似地,因为16除以4的余数为0,所以将第一集合中的区块标识符“区块16”放入与余数0对应的第二集合c’中。类似地,因为17除以4的余数为1,所以将第一集合中的区块标识符“区块17”放入与余数1对应的第二集合d’中。所以,可以将第一集合拆分为4个第二集合a’至d’,其中,第二集合a’对应于余数2并且包括2个区块标识符{“区块10”,“区块14”},第二集合b’对应于余数3并且包括2个区块标识符{“区块11”,“区块15”},第二集合c’对应于余数0包括2个区块标识符{“区块12”,“区块16”},第二集合d’对应于余数1并且包括2个区块标识符{“区块13”,“区块17”}。本领域技术人员可以理解,能够配置的第一参数可以根据经验值或实验值来调整,不申请不作具体限制。

在步骤s509之后,方法500’可以前进到步骤s103。在步骤s103中,可以利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,其中,所述同步任务列表保存要同步的各个区块的各个区块标识符和同步状态。图5b中的步骤s103与图1中所示的步骤s103相同,其具体细节在此不再赘述。

在步骤s103之后,方法500’可以前进到步骤s105。在步骤s105中,可以经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中,其中,所述区块缓存池用于保存所获得的各个区块。图5b中的步骤s105与图1中所示的步骤s105相同,其具体细节在此不再赘述。

在步骤s105之后,方法500’可以结束。

下面结合图6来详细描述本申请的上述实施例中的步骤s103的示例。图6是示意性地示出根据本申请的一些实施例的用于获得要同步的区块的过程600的流程图。

如图6中所示,在图5中的步骤s505之后,过程600可以前进到步骤s601。在步骤s601中,可以分别选择第一集合中的相应区块标识符以判断是否要将第一集合中的相应区块标识符添加到所述同步任务列表中。

例如,在上面的示例中,假设第一集合为{“区块10”,“区块11”,“区块12”,“区块13”,“区块14”,“区块15”,“区块16”,“区块17”}。因此,可以选择第一集合中的区块标识符“区块10”,以判断是否要将第一集合中的区块标识符“区块10”添加到同步任务列表203中。以此类推,可以分别对第一集合中的区块标识符“区块11”至“区块17”进行与第一集合中的区块标识符“区块10”相同的处理。

在步骤s601之后,过程600可以前进到步骤s603。在步骤s603中,可以分别判断第一集合中的相应区块标识符是否已存在于所述同步任务列表、所述区块缓存池或所述区块链中。

继续上面的示例,在选择了第一集合中的区块标识符“区块10”的情况下,可以判断第一集合中的区块标识符“区块10”是否已经存在于同步任务列表203、区块缓存池205或区块链209中。

如果相应区块标识符已存在于所述同步任务列表、所述区块缓存池或所述区块链中(步骤s603中为“是”),则过程600可以前进到步骤s605。在步骤s605中,可以决定不要将第一集合中的相应区块标识符添加到所述同步任务列表中,并且从第一集合中删除相应区块标识符。在步骤s605之后,过程600可以返回到步骤s601以选择第一集合中的下一个区块标识符进行处理。

继续上面的示例,假设第一集合中的区块标识符“区块10”已存在于同步任务列表203、区块缓存池205或区块链209中,则在步骤s605中,可以决定不要将第一集合中的区块标识符“区块10”添加到同步任务列表203中,并且从第一集合中删除区块标识符“区块10”。在步骤s605之后,过程600可以返回到步骤s601以选择第一集合中的下一个区块标识符“区块11”进行处理。

如果相应区块标识符未存在于所述同步任务列表、所述区块缓存池和所述区块链中(步骤s603中为“否”),则过程600可以前进到步骤s607。在步骤s607中,可以决定要将第一集合中的相应区块标识符添加到所述同步任务列表中。

继续上面的示例,假设第一集合中的区块标识符“区块11”未存在于同步任务列表203、区块缓存池205和区块链209中,则在步骤s607中,可以决定要将第一集合中的区块标识符“区块11”添加到同步任务列表203中。

在步骤s607之后,过程600可以前进到步骤s609。在步骤s609中,可以将第一集合中的相应区块标识符添加到所述同步任务列表中,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为准备开始状态。

继续上面的示例,在步骤s609中,可以将第一集合中的区块标识符“区块11”添加到同步任务列表203中,并且在同步任务列表中将区块11的同步状态设置为准备开始状态。

在步骤s609之后,过程600可以前进到步骤s611。在步骤s611中,可以随机选择区块链网络中的其他节点以获得由所述同步任务列表中的相应区块标识符标识的相应区块,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为正在进行状态。

继续上面的示例,在步骤s611中,可以随机选择区块链中的其他节点以获得由同步任务列表203中的区块标识符“区块11”标识的区块11,并且在同步任务列表203中将区块11的同步状态设置为正在进行状态。

在步骤s611之后,用于在区块链中同步数据的方法可以去往上述实施例中的步骤s105。

下面结合图7来详细描述图6中所示的步骤s611的示例。图7是示意性地示出根据本申请的一些实施例的用于将获得的区块保存到区块缓存池中并且将获得的交易摘要信息保存到交易摘要信息缓存池中的过程700的流程图。

如图7中所示,在步骤s701中,可以随机选择区块链网络中的其他节点中的一个节点以确定是否能够获得由相应区块标识符标识的相应区块。

例如,继续上面的示例,假设第一集合为{“区块10”,“区块11”,“区块12”,“区块13”,“区块14”,“区块15”,“区块16”,“区块17”},并且假设同步任务列表203中包括区块标识符“区块10”至“区块17”。在步骤s701中,假设选择其他节点中的节点3以确定是否能够从节点3获得区块10至区块17。

在步骤s701之后,过程700可以前进到步骤s703。在步骤s703中,可以判断是否能够从随机选择的这一个节点获得由相应区块标识符标识的相应区块。

继续上面的示例,在步骤s703中,可以判断是否能够从节点3获得区块10至区块17。

如果能够获得由相应区块标识符标识的相应区块(步骤s703中为“是”),则过程700可以前进到步骤s707。在步骤s707中,可以将所获得的相应区块保存到所述区块缓存池中,并且从第一集合和所述同步任务列表中删除所获得的相应区块的相应区块标识符标识以更新第一集合和同步任务列表。

继续上面的示例,假设在步骤s703中判断能够从节点3获得区块10至区块13,则在步骤s707中,可以将从节点3获得的区块10至区块13保存到区块缓存池205中,并且从第一集合和同步任务列表203中删除区块标识符“区块10”至“区块13”。因此,更新后的第一集合为{“区块14”,“区块15”,“区块16”,“区块17”},并且更新后的同步任务列表203’中包括区块标识符“区块14”至“区块17”。

如果不能获得由相应区块标识符标识的相应区块(步骤s703中为“否”),则过程700可以前进到步骤s705。在步骤s705中,可以重新选择区块链网络中的其他节点中的另一个节点以利用更新后的第一集合和同步任务列表确定是否能够获得由相应区块标识符标识的相应区块。在步骤s705之后,过程700可以返回步骤s703。

继续上面的示例,假设在步骤s703中判断不能从节点3获得区块14至区块17,则在步骤s705中,可以重新选择其他节点中的节点6以利用更新后的第一集合{“区块14”,“区块15”,“区块16”,“区块17”}和更新后的同步任务列表203’确定是否能够从节点6获得区块14至区块17。

在步骤s707之后,过程700可以前进到步骤s709。在步骤s709中,可以判断同步任务列表中是否还有区块未同步。如果同步任务列表中没有区块未同步(步骤s709中为“否”),则过程700可以结束。如果同步任务列表中还有区块未同步(步骤s709中为“是”),则过程700可以返回到步骤s701。

根据本申请的一些实施例,在已从区块链网络中的其他节点获得由各个区块标识符标识的各个区块的情况下,可以获得各个区块中包含的交易的摘要信息并且将所获得的各个区块中包含的交易的摘要信息保存到交易摘要信息缓存池中。

下面结合图8来详细描述本申请的上述实施例中的步骤s103的示例。图8是示意性地示出根据本申请的一些实施例的用于获得要同步的区块的过程800的流程图。

如图8中所示,在图5中的步骤s507之后,过程800可以前进到步骤s801。在步骤s801中,对于所述多个第二集合中的每个第二集合,可以分别选择第二集合中的相应区块标识符以判断是否要将第二集合中的相应区块标识符添加到所述同步任务列表中。

例如,在上面的示例中,假设第一集合被拆分为3个第二集合,其中,第二集合a包括3个区块标识符{“区块10”,“区块11”,“区块12”},第二集合b包括3个区块标识符{“区块13”,“区块14”,“区块15”},第二集合c包括2个区块标识符{“区块16”,“区块17”}。因此,对于第二集合a,可以选择第二集合a中的区块标识符“区块10”,以判断是否要将第二集合a中的区块标识符“区块10”添加到同步任务列表203中。以此类推,可以分别对第二集合a中的区块标识符“区块11”和“区块12”进行与第二集合a中的区块标识符“区块10”相同的处理。另外,以此类推,可以对第二集合b和第二集合c进行与第二集合a相同的处理。

在步骤s801之后,过程800可以前进到步骤s803。在步骤s803中,可以分别判断第二集合中的相应区块标识符是否已存在于所述同步任务列表、所述区块缓存池或所述区块链中。

继续上面的示例,在选择了第二集合a中的区块标识符“区块10”的情况下,可以判断第二集合a中的区块标识符“区块10”是否已经存在于同步任务列表203、区块缓存池205或区块链209中。

如果相应区块标识符已存在于所述同步任务列表、所述区块缓存池或所述区块链中(步骤s803中为“是”),则过程800可以前进到步骤s805。在步骤s805中,可以决定不要将第二集合中的相应区块标识符添加到所述同步任务列表中,并且从第二集合中删除相应区块标识符。在步骤s805之后,过程800可以返回到步骤s801以选择第二集合中的下一个区块标识符进行处理。

继续上面的示例,假设第二集合a中的区块标识符“区块10”已存在于同步任务列表203、区块缓存池205或区块链209中,则在步骤s805中,可以决定不要将第二集合a中的区块标识符“区块10”添加到同步任务列表203中,并且从第二集合a中删除区块标识符“区块10”。在步骤s805之后,过程800可以返回到步骤s801以选择第二集合a中的下一个区块标识符“区块11”进行处理。

如果相应区块标识符未存在于所述同步任务列表、所述区块缓存池和所述区块链中(步骤s803中为“否”),则过程800可以前进到步骤s807。在步骤s807中,可以决定要将第二集合中的相应区块标识符添加到所述同步任务列表中。

继续上面的示例,假设第二集合a中的区块标识符“区块11”未存在于同步任务列表203、区块缓存池205和区块链209中,则在步骤s807中,可以决定要将第二集合a中的区块标识符“区块11”添加到同步任务列表203中。

在步骤s807之后,过程800可以前进到步骤s809。在步骤s809中,可以将第二集合中的相应区块标识符添加到所述同步任务列表中,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为准备开始状态。

继续上面的示例,在步骤s809中,可以将第二集合a中的区块标识符“区块11”添加到同步任务列表203中,并且在同步任务列表中将区块11的同步状态设置为准备开始状态。

在步骤s809之后,过程800可以前进到步骤s811。在步骤s811中,可以随机选择区块链网络中的其他节点以获得由所述同步任务列表中的相应区块标识符标识的相应区块,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为正在进行状态。

继续上面的示例,在步骤s811中,可以随机选择区块链中的其他节点以获得由同步任务列表203中的区块标识符“区块11”标识的区块11,并且在同步任务列表203中将区块11的同步状态设置为正在进行状态。

在步骤s811之后,用于在区块链中同步数据的方法可以去往上述实施例中的步骤s105。

根据本申请的一些实施例,在所述多个第二集合之间,按顺序地或并行地执行所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块的步骤。

继续上面的示例,例如对于第二集合a、第二集合b和第二集合c,可以按照第二集合a、第二集合b和第二集合c的顺序依次执行本申请的上述实施例中的步骤s103,也可以在第二集合a、第二集合b和第二集合c之间并行地执行本申请的上述实施例中的步骤s103。

下面结合图9来详细描述图8中所示的步骤s811的示例。图9是示意性地示出根据本申请的一些实施例的用于将获得的区块保存到区块缓存池中并且将获得的交易摘要信息保存到交易摘要信息缓存池中的过程900的流程图。

如图9中所示,在步骤s901中,可以随机选择区块链网络中的其他节点中的一个节点以确定是否能够获得由相应区块标识符标识的相应区块。

例如,继续上面的示例,假设第一集合被拆分为3个第二集合,其中,第二集合a包括3个区块标识符{“区块10”,“区块11”,“区块12”},第二集合b包括3个区块标识符{“区块13”,“区块14”,“区块15”},第二集合c包括2个区块标识符{“区块16”,“区块17”}。在步骤s901中,假设选择其他节点中的节点3以确定是否能够从节点3获得区块10至区块12。

在步骤s901之后,过程900可以前进到步骤s903。在步骤s903中,可以判断是否能够从随机选择的这一个节点获得由相应区块标识符标识的相应区块。

继续上面的示例,在步骤s903中,可以判断是否能够从节点3获得区块10至区块12。

如果能够获得由相应区块标识符标识的相应区块(步骤s903中为“是”),则过程900可以前进到步骤s907。在步骤s907中,可以将所获得的相应区块保存到所述区块缓存池中,并且从所述多个第二集合中的每个第二集合和所述同步任务列表中删除所获得的相应区块的相应区块标识符标识以更新所述多个第二集合和同步任务列表。

继续上面的示例,假设在步骤s903中判断能够从节点3获得区块10和区块11,则在步骤s907中,可以将从节点3获得的区块10和区块11保存到区块缓存池205中,并且从第二集合a和同步任务列表203中删除区块标识符“区块10”和“区块11”。因此,更新后的第二集合a为{“区块12”},并且更新后的同步任务列表203’中包括区块标识符“区块12”。

如果不能获得由相应区块标识符标识的相应区块(步骤s903中为“否”),则过程900可以前进到步骤s905。在步骤s905中,可以重新选择区块链网络中的其他节点中的另一个节点以利用更新后的所述多个第二集合和同步任务列表确定是否能够获得由相应区块标识符标识的相应区块。在步骤s905之后,过程900可以返回步骤s903。

继续上面的示例,假设在步骤s903中判断不能从节点3获得区块12,则在步骤s905中,可以重新选择其他节点中的节点6以利用更新后的第二集合a{“区块12”}和更新后的同步任务列表203’确定是否能够从节点6获得区块12。

在步骤s907之后,过程900可以前进到步骤s909。在步骤s909中,可以判断同步任务列表中是否还有区块未同步。如果同步任务列表中没有区块未同步(步骤s909中为“否”),则过程900可以结束。如果同步任务列表中还有区块未同步(步骤s909中为“是”),则过程900可以返回到步骤s901。

根据本申请的一些实施例,在已从区块链网络中的其他节点获得由各个区块标识符标识的各个区块的情况下,可以获得各个区块中包含的交易的摘要信息并且将所获得的各个区块中包含的交易的摘要信息保存到交易摘要信息缓存池中。

根据本申请的一些实施例,经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中还包括:将区块缓存池中保存的相应区块链接到与当前节点相关联的区块链中。

下面结合图10来描述根据本申请的一些实施例的用于将区块缓存池中的区块链接到区块链并且将交易摘要信息缓存池中的交易摘要信息保存到当前节点的过程1000。图10是示意性地示出根据本申请的一些实施例的用于将区块缓存池中的区块链接到区块链并且将交易摘要信息缓存池中的交易摘要信息保存到当前节点的过程1000的流程图。

如图10中所示,在步骤s1001中,可以分别选择区块缓存池中保存的相应区块。

根据本申请的一些实施例,选择区块缓存池中保存的区块的步骤可以与上述实施例中的将所获得的区块保存到区块缓存池中的步骤同时执行。

例如,假设区块缓存池205中已保存了区块10至区块17。可以分别从区块缓存池205中选择区块10至区块17中的各个区块。

在步骤s1001之后,过程1000可以前进到步骤s1003。在步骤s1003中,可以分别对从区块缓存池中选择的相应区块进行检查以判断是否要将从区块缓存池中选择的相应区块链接到与当前节点相关联的区块链中。

从区块缓存池中选择的区块可能不符合链接到与当期节点相关联的区块链的条件。因此,可以对从区块缓存池中选择的区块进行检查,以判断是否能够将从区块缓存池中选择的区块链接到与当前节点相关联的区块链中。

通过对从区块缓存池中选择的区块进行检查,可以提高在区块链网络中对数据进行同步的正确率。

根据本申请的一些实施例,在已将从区块缓存池中选择的各个区块链接到与当前节点相关联的区块链中的情况下,可以从交易摘要信息缓存池中获得所链接的各个区块中包含的交易的摘要信息并且存储到当前节点。

继续上面的示例,假设通过对从区块缓存池205中选择的区块11进行检查,确定可以将从区块缓存池205中选择的区块11链接到区块链。因此,在已将从区块缓存池205中选择的区块11链接到区块链的情况下,可以从与当前节点相关联的交易摘要信息缓存池207中获得所链接的区块11中包含的交易的摘要信息并且存储到当前节点。

根据本申请的一些实施例,所述在已将从区块缓存池中选择的各个区块链接到与当前节点相关联的区块链中的情况下从交易摘要信息缓存池中获得所链接的各个区块中包含的交易的摘要信息并且存储到当前节点可以包括:判断是否能够从交易摘要信息缓存池中获得所链接的区块中包含的交易的摘要信息;如果能够从交易摘要信息缓存池中获得所链接的区块中包含的交易的摘要信息,则从交易摘要信息缓存池中获得所链接的区块中包含的交易的摘要信息并且存储到当前节点;如果不能从交易摘要信息缓存池中获得所链接的区块中包含的交易的摘要信息,则随机选择区块链网络中的其他节点以重新获得该区块,从重新获得的区块中获得其中包含的交易的摘要信息,并且将交易的摘要信息保存到当前节点。

例如,在本申请的上述实施例的步骤s1003中,对于已链接到区块链209的区块11,可以判断是否能够从交易摘要信息缓存池207中获得所链接的区块11中包含的交易的摘要信息;如果能,则从交易摘要信息缓存池207中获得区块11中包含的交易的摘要信息,并且将获得的交易的摘要信息保存到当前节点;如果不能,则可以随机选择区块链网络中的其他节点以重新获得区块11,从重新获得的区块11中获得其中包含的交易的摘要信息,并且将交易的摘要信息保存到当前节点。

在步骤s1003之后,过程1000可以结束。

下面结合图11至图13来详细描述图10中所示的步骤s1003的示例。图11是示意性地示出根据本申请的一些实施例的用于检查区块高度的过程的流程图。图12是示意性地示出根据本申请的一些实施例的用于检查区块有效性的过程的流程图。图13是示意性地示出根据本申请的一些实施例的用于检查区块标识符的过程的流程图。

根据本申请的一些实施例,对从区块缓存池中选择的区块进行检查可以包括对从区块缓存池中选择的区块的各种属性进行检查以判断是否符合链接到区块链的条件。要检查的区块的各种属性例如可以包括区块高度、区块有效性、区块标识符等中的一种或多种。

区块高度可以标识区块在区块链中的位置。例如,可以根据区块号来确定区块高度。在区块链中,区块号一般是从“0”开始编号的。所以,可以将区块号加1作为区块高度。例如,假设区块号为“4”,则区块高度为(4+1=5)。

区块有效性可以指示区块是否属于与当前节点相关联的区块链。因此,可以利用区块有效性来判断区块是否属于当前节点相关联的区块链。例如,区块有效性可以包括区块中包含的哈希值等。

下面结合图11来详细描述根据本申请的一些实施例的用于检查区块高度的过程1100的示例。

如图11中所示,在步骤s1101中,可以分别比较从区块缓存池中选择的相应区块的区块高度和与当前节点相关联的区块链的当前高度。

在步骤s1101之后,用于检查区块高度的过程1100可以前进到步骤s1103。在步骤s1103中,可以判断从区块缓存池中选择的相应区块的区块高度是否等于与当前节点相关联的区块链的当前高度加1。

继续上面的示例,在步骤s1103中,可以判断从区块缓存池205中选项的区块10的区块高度11是否等于区块链209的当前高度10加1。

如果区块高度不等于区块链的当前高度加1(步骤s1103中为“否”),则用于检查区块高度的过程1100可以前进到步骤s1105。在步骤s1105中,可以不执行链接。在步骤s1105之后,用于检查区块高度的过程1100可以结束。

如果区块高度等于区块链的当前高度加1(步骤s1103中为“是”),则用于检查区块高度的过程1100可以前进到步骤s1107。在步骤s1107中,可以分别对从区块缓存池中选择的相应区块的有效性进行检查。在步骤s1107之后,用于检查区块高度的过程1100可以结束。

例如,假设区块缓存池205中已保存了区块10至区块17,并且与当前节点相关联的区块链209的当前高度为10。另外,还假设通过上述步骤s1101选择了区块10。因此,可以在步骤s1103中将从区块缓存池205中选项的区块10的区块高度11与区块链209的当前高度10进行比较。在步骤s1103中,可以判断从区块缓存池205中选项的区块10的区块高度11是否等于区块链209的当前高度10加1。因为从区块缓存池205中选择的区块10的区块高度11等于区块链209的当前高度10加1(步骤s1103中为“是”),所以可以对从区块缓存池205中选择的区块10的有效性进行检查。

另外,假设通过上述步骤s1101选择了区块13。因此,可以在步骤s1103中将从区块缓存池205中选项的区块13的区块高度14与区块链209的当前高度10进行比较。在步骤s1103中,可以判断从区块缓存池205中选项的区块13的区块高度14是否等于区块链209的当前高度10加1。因为从区块缓存池205中选择的区块13的区块高度14不等于区块链209的当前高度10加1(步骤s1103中为“否”),所以不执行区块13到区块链209的链接。

下面结合图12来详细描述根据本申请的一些实施例的用于检查区块有效性的过程1200的示例。

如图12中所示,在步骤s1201中,可以分别比较从区块缓存池中选择的相应区块的哈希值和与当前节点相关联的区块链中保存的哈希值。

在步骤s1201之后,用于检查区块有效性的过程1200可以前进到步骤s1203。在步骤s1203中,可以判断从区块缓存池中选择的相应区块的哈希值和与当前节点相关联的区块链中保存的哈希值是否匹配。

如果从区块缓存池中选择的相应区块的哈希值和与当前节点相关联的区块链中保存的哈希值不匹配(步骤s1203中为“否”),则用于检查区块有效性的过程1200可以前进到步骤s1205。在步骤s1205中,可以检查从区块缓存池中选择的相应区块的相应区块标识符是否存在于同步任务列表中。在步骤s1205之后,用于检查区块有效性的过程1200可以结束。

如果从区块缓存池中选择的相应区块的哈希值和与当前节点相关联的区块链中保存的哈希值匹配(步骤s1203中为“是”),则用于检查区块有效性的过程1200可以前进到步骤s1207。在步骤s1207中,可以将从区块缓存池中选择的相应区块链接到与当前节点相关联的区块链中,刷新当前节点信息,将与当前节点相关联的区块链的当前高度加1,并且从区块缓存池中删除已被链接到与当前节点相关联的区块链中的相应区块。在步骤s1207之后,用于检查区块有效性的过程1200可以结束。

例如,假设对从区块缓存池205中选择的区块10的有效性进行检查。在步骤s1201中,可以比较从区块缓存池中选择的区块10的哈希值x和与当前节点相关联的区块链209中保存的哈希值y。在步骤s1203中,可以判断从区块缓存池205中选择的区块10的哈希值x和与当前节点相关联的区块链209中保存的哈希值y是否匹配。如果从区块缓存池205中选择的区块10的哈希值x和与当前节点相关联的区块链209中保存的哈希值y不匹配,则在步骤s1205中,可以检查从区块缓存池205中选择的区块10的区块标识符“区块10”是否存在于同步任务列表中。如果从区块缓存池205中选择的区块10的哈希值x和与当前节点相关联的区块链209中保存的哈希值y匹配,则在步骤s1207中,可以将从区块缓存池205中选择的区块10链接到与当前节点相关联的区块链209中,刷新当前节点信息,将与当前节点相关联的区块链209的当前高度10加1(即变为11),并且从区块缓存池205中删除已被链接到与当前节点相关联的区块链209中的区块10。

下面结合图13来详细描述根据本申请的一些实施例的用于检查区块标识符的过程1300的示例。

如图13中所述,在步骤s1301中,可以判断从区块缓存池中选择的相应区块的相应区块标识符是否存在于同步任务列表中。

如果从区块缓存池中选择的相应区块的相应区块标识符存在于同步任务列表中(步骤s1301中为“是”),则用于检查区块标识符的过程1300可以前进到步骤s1305。在步骤s1305中,可以忽略从区块缓存池中选择的相应区块的相应区块标识符。在步骤s1305之后,用于检查区块标识符的过程1300可以结束。

如果从区块缓存池中选择的相应区块的相应区块标识符未存在于同步任务列表中(步骤s1301中为“否”),则用于检查区块标识符的过程1300可以前进到步骤s1307。在步骤s1307中,可以将从区块缓存池中选择的相应区块的相应区块标识符添加到同步任务列表中,并且在同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为准备开始状态。

在步骤s1307之后,可以去往图6中所示的步骤s611或图8中所示的步骤s811,从而可以随机选择区块链网络中的其他节点以获得由同步任务列表中的相应区块标识符标识的相应区块,并且可以在同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为正在进行状态。

例如,假设检查从区块缓存池205中选择的区块10的区块标识符“区块10”是否存在于同步任务列表中。在步骤s1301中,可以判断从区块缓存池205中选择的区块10的区块标识符“区块10”是否存在于同步任务列表中。如果从区块缓存池205中选择的区块10的区块标识符“区块10”存在于同步任务列表中,则在步骤s1305中,可以忽略从区块缓存池205中选择的区块10的区块标识符“区块10”。如果从区块缓存池205中选择的区块10的区块标识符“区块10”不存在于同步任务列表中,则在步骤s1307中,可以将从区块缓存池205中选择的区块10的区块标识符“区块10”添加到同步任务列表中,并且在同步任务列表中将区块10的同步状态设置为准备开始状态。

图14是示出可用于实施根据本申请的一些实施例的用于在区块链网络中同步数据的方法的信息处理设备的示意性框图。

在图14中,中央处理单元(cpu)1401根据只读存储器(rom)1402中存储的程序或从存储部分1408加载到随机存取存储器(ram)1403的程序执行各种处理。在ram1403中,也根据需要存储当cpu1401执行各种处理等等时所需的数据。cpu1401、rom1402和ram1403经由总线1404彼此连接。输入/输出接口1405也连接到总线1404。

下述部件连接到输入/输出接口1405:输入部分1406(包括键盘、鼠标等等)、输出部分1407(包括显示器,比如阴极射线管(crt)、液晶显示器(lcd)等,和扬声器等)、存储部分1408(包括硬盘等)、通信部分1409(包括网络接口卡比如lan卡、调制解调器等)。通信部分1409经由网络比如因特网执行通信处理。根据需要,驱动器1410也可连接到输入/输出接口1405。可拆卸介质1411比如磁盘、光盘、磁光盘、半导体存储器等等根据需要被安装在驱动器1410上,使得从中读出的计算机程序根据需要被安装到存储部分1408中。

在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1411安装构成软件的程序。

本领域的技术人员应当理解,这种存储介质不局限于图14所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1411。可拆卸介质1411的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(cd-rom)和数字通用盘(dvd))、磁光盘(包含迷你盘(md)(注册商标))和半导体存储器。或者,存储介质可以是rom1402、存储部分1408中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。

所述指令代码由机器读取并执行时,可执行上述根据本申请实施例的方法。

可以以一种或多种程序设计语言的任意组合来编写用于执行本申请各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。

也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(articleofmanufacture)。

也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。

附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

注意,为了避免遮蔽本申请的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

本申请也可以被配置如下:

(1)、一种用于在区块链网络中同步数据的方法,包括:

确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合;

利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,其中,所述同步任务列表保存要同步的各个区块的各个区块标识符和同步状态;以及

经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中,其中,所述区块缓存池用于保存所获得的各个区块。

(2)、根据(1)所述的方法,其中,在所述确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合之后,并且在所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块之前,所述方法还包括:

将第一集合中包括的区块标识符的个数与预定阈值进行比较,以判断是否要将第一集合拆分为多个第二集合。

(3)、根据(2)所述的方法,其中,在第一集合中包括的区块标识符的个数小于或等于预定阈值的情况下,决定不拆分第一集合,并且所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块包括:

分别选择第一集合中的相应区块标识符以判断是否要将第一集合中的相应区块标识符添加到所述同步任务列表中。

(4)、根据(3)所述的方法,其中,所述分别选择第一集合中的相应区块标识符以判断是否要将第一集合中的相应区块标识符添加到所述同步任务列表中包括:

分别判断第一集合中的相应区块标识符是否已存在于所述同步任务列表、所述区块缓存池或所述区块链中;

如果相应区块标识符已存在于所述同步任务列表、所述区块缓存池或所述区块链中,则决定不要将第一集合中的相应区块标识符添加到所述同步任务列表中,并且从第一集合中删除相应区块标识符;以及

如果相应区块标识符未存在于所述同步任务列表、所述区块缓存池和所述区块链中,则决定要将第一集合中的相应区块标识符添加到所述同步任务列表中。

(5)、根据(3)所述的方法,其中,在判断要将第一集合中的各个区块标识符添加到所述同步任务列表中的情况下,所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块还包括:

将第一集合中的各个区块标识符添加到所述同步任务列表中,并且在所述同步任务列表中将由各个区块标识符标识的各个区块的同步状态设置为准备开始状态;以及

随机选择区块链网络中的其他节点以获得由所述同步任务列表中的各个区块标识符标识的各个区块,并且在所述同步任务列表中将由各个区块标识符标识的各个区块的同步状态设置为正在进行状态。

(6)、根据(1)所述的方法,其中,所述确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合包括:

根据当前节点的同步高度、从区块链网络接收的第一节点高度和当前节点存储的第二节点高度来判断是否要执行同步。

(7)、根据(6)所述的方法,其中,所述根据当前节点的同步高度、从区块链网络接收的第一节点高度和当前节点存储的第二节点高度来判断是否要执行同步包括:

将当前节点的同步高度与从区块链网络接收的第一节点高度进行比较;

如果当前节点的同步高度大于或等于第一节点高度,则决定不要执行同步;

如果当前节点的同步高度小于第第一节点高度,则将当前节点的同步高度更新为等于第一节点高度,并且将当前节点存储的第二节点高度与第一节点高度进行比较;

如果第二节点高度大于或等于第一节点高度,则决定不要执行同步;以及

如果第二节点高度小于第一节点高度,则决定要执行同步。

(8)、根据(7)所述的方法,其中,在决定要执行同步的情况下,所述确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合还包括:

根据第一节点高度与第二节点高度之间的差,获得当前节点要同步的各个区块的各个区块标识符的第一集合。

(9)、根据(2)所述的方法,其中,在第一集合中包括的区块标识符的个数大于预定阈值的情况下,根据能够配置的第一参数,将第一集合拆分为所述多个第二集合,其中,所述能够配置的第一参数指示第二集合中能够包括的区块标识符的个数。

(10)、根据(1)所述的方法,其中,在所述确定区块链网络中的当前节点要同步的各个区块的各个区块标识符的第一集合之后,并且在所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块之前,所述方法还包括:

根据能够配置的第二参数,将第一集合拆分为多个第二集合,其中,所述能够配置的第二参数指示第二集合的个数。

(11)、根据(9)或(10)所述的方法,其中,所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块包括:

对于所述多个第二集合中的每个第二集合,分别选择第二集合中的相应区块标识符以判断是否要将第二集合中的相应区块标识符添加到所述同步任务列表中。

(12)、根据(11)所述的方法,其中,所述分别选择第二集合中的相应区块标识符以判断是否要将第二集合中的相应区块标识符添加到所述同步任务列表中包括:

分别判断第二集合中的相应区块标识符是否已存在于所述同步任务列表、所述区块缓存池或所述区块链中;

如果相应区块标识符已存在于所述同步任务列表、所述区块缓存池或所述区块链中,则决定不要将第二集合中的相应区块标识符添加到所述同步任务列表中,并且从第二集合中删除相应区块标识符;以及

如果相应区块标识符未存在于所述同步任务列表、所述区块缓存池和所述区块链中,则决定要将第二集合中的相应区块标识符添加到所述同步任务列表中。

(13)、根据(11)所述的方法,其中,在判断要将第二集合中的相应区块标识符添加到所述同步任务列表中的情况下,所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块还包括:

将第二集合中的相应区块标识符添加到所述同步任务列表中,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为准备开始状态;以及

随机选择区块链网络中的其他节点以获得由所述同步任务列表中的相应区块标识符标识的相应区块,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为正在进行状态。

(14)、根据(12)-(13)中任一项所述的方法,其中,在所述多个第二集合之间,按顺序地或并行地执行所述利用与当前节点相关联的同步任务列表从区块链网络中的其他节点获得由各个区块标识符标识的各个区块的步骤。

(15)、根据(5)所述的方法,其中,所述随机选择区块链网络中的其他节点以获得由所述同步任务列表中的各个区块标识符标识的各个区块包括:

随机选择区块链网络中的其他节点中的一个节点以确定是否能够获得由相应区块标识符标识的相应区块;

如果能够获得由相应区块标识符标识的相应区块,则将所获得的相应区块保存到所述区块缓存池中,并且从第一集合和所述同步任务列表中删除所获得的相应区块的相应区块标识符标识以更新第一集合和同步任务列表;以及

如果不能获得由相应区块标识符标识的相应区块,则重新选择区块链网络中的其他节点中的另一个节点以利用更新后的第一集合和同步任务列表确定是否能够获得由相应区块标识符标识的相应区块。

(16)、根据(13)所述的方法,其中,所述随机选择区块链网络中的其他节点以获得由所述同步任务列表中的各个区块标识符标识的各个区块包括:

随机选择区块链网络中的其他节点中的一个节点以确定是否能够获得由相应区块标识符标识的相应区块;

如果能够获得由相应区块标识符标识的相应区块,则将所获得的相应区块保存到所述区块缓存池中,并且从所述多个第二集合中的每个第二集合和所述同步任务列表中删除所获得的相应区块的相应区块标识符标识以更新所述多个第二集合和同步任务列表;以及

如果不能获得由相应区块标识符标识的相应区块,则重新选择区块链网络中的其他节点中的另一个节点以利用更新后的所述多个第二集合和同步任务列表确定是否能够获得由相应区块标识符标识的相应区块。

(17)、根据(1)所述的方法,其中,所述经由与当前节点相关联的区块缓存池将所获得的各个区块链接到与当前节点相关联的区块链中还包括:

将所述区块缓存池中保存的相应区块链接到与当前节点相关联的区块链中。

(18)、根据(17)所述的方法,其中,所述将所述区块缓存池中保存的相应区块链接到与当前节点相关联的区块链中包括:

分别选择所述区块缓存池中保存的相应区块;以及

分别对从所述区块缓存池中选择的相应区块进行检查以判断是否要将从所述区块缓存池中选择的相应区块链接到与当前节点相关联的区块链中。

(19)、根据(18)所述的方法,其中,所述分别对从所述区块缓存池中选择的相应区块进行检查以判断是否要将从所述区块缓存池中选择的相应区块链接到与当前节点相关联的区块链中包括:

分别比较从所述区块缓存池中选择的相应区块的区块高度和与当前节点相关联的区块链的当前高度以判断区块高度是否等于区块链的当前高度加1;

如果不等于,则不执行所述链接;以及

如果等于,则分别对从所述区块缓存池中选择的相应区块的有效性进行检查。

(20)、根据(19)所述的方法,其中,所述分别对从所述区块缓存池中选择的相应区块的有效性进行检查包括:

分别比较从所述区块缓存池中选择的相应区块的哈希值和与当前节点相关联的区块链中保存的哈希值以判断两者是否匹配;

如果不匹配,则检查从所述区块缓存池中选择的相应区块的相应区块标识符是否存在于所述同步任务列表中;以及

如果匹配,则将从所述区块缓存池中选择的相应区块链接到与当前节点相关联的区块链中,刷新当前节点信息,将与当前节点相关联的区块链的当前高度加1,并且从所述区块缓存池中删除已被链接到与当前节点相关联的区块链中的相应区块。

(21)、根据(20)所述的方法,其中,所述检查从所述区块缓存池中选择的相应区块的相应区块标识符是否存在于所述同步任务列表中包括:

如果从所述区块缓存池中选择的相应区块的相应区块标识符存在于所述同步任务列表中,则忽略从所述区块缓存池中选择的相应区块的相应区块标识符;以及

如果从所述区块缓存池中选择的相应区块的相应区块标识符未存在于所述同步任务列表中,则将从所述区块缓存池中选择的相应区块的相应区块标识符添加到所述同步任务列表中,并且在所述同步任务列表中将由相应区块标识符标识的相应区块的同步状态设置为准备开始状态。

(22)、根据(1)所述的方法,其中,

在已从区块链网络中的其他节点获得由各个区块标识符标识的各个区块,获得各个区块中包含的交易的摘要信息并且将所获得的各个区块中包含的交易的摘要信息保存到交易摘要信息缓存池中;以及

在已将从所述区块缓存池中选择的各个区块链接到与当前节点相关联的区块链中的情况下,从所述交易摘要信息缓存池中获得所链接的各个区块中包含的交易的摘要信息并且存储到当前节点。

(23)、一种计算机存储介质,其上存储有计算机指令,当所述计算机指令被计算机执行时使计算机执行如权利要求(1)-(22)中任一项所述的用于在区块链网络中同步数据的方法。

(24)、一种计算机实现的用于在区块链网络中同步数据的设备,包括:

存储器,存储有计算机指令;和

处理器,耦接到存储器,执行所述计算机指令以执行如权利要求(1)-(22)中任一项所述的用于在区块链网络中同步数据的方法。

虽然已经通过示例对本申请的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本申请的范围。本领域的技术人员应该理解,可在不脱离本申请的范围和精神的情况下,对以上实施例进行修改。本申请的范围由所附权利要求来限定。

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