CN113886496A - 区块链的数据同步方法、装置、计算机设备和存储介质 - Google Patents
区块链的数据同步方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113886496A CN113886496A CN202111166222.7A CN202111166222A CN113886496A CN 113886496 A CN113886496 A CN 113886496A CN 202111166222 A CN202111166222 A CN 202111166222A CN 113886496 A CN113886496 A CN 113886496A
- Authority
- CN
- China
- Prior art keywords
- block
- synchronized
- node
- hash value
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种区块链的数据同步方法、装置、计算机设备和存储介质。所述方法包括:从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。采用本方法能够提高区块链的数据同步效率。
Description
技术领域
本申请涉及区块链技术领域,特别是涉及一种区块链的数据同步方法、装置、计算机设备和存储介质。
背景技术
在传统的区块链架构中,当因为网络延迟或者新增节点等原因,区块链系统中存在落后节点的情况下,落后节点需要与其他节点进行数据同步。
相关技术中,落后节点需要先获取到最新区块(例如:Block N+1的区块),并以该最新区块为基础,逐一从对端节点逆序索取区块N、N-1、N-2、……、3、2、1、0,其中对端节点为区块链系统中除落后节点以外的其他节点。落后节点需要逐一验证从对端节点索取的区块X的哈希值等于区块X+1中记录的父区块哈希值,从而确认索取到的区块X是正确的区块(X为小于或者等于N的正整数)。并在索取验证完所有区块之后,顺序执行区块0、1、2、3、……、N-2、N-1、N,直至最终恢复到最新的区块高度为止。
上述数据同步过程中,针对区块X的验证受限于区块X+1,故而取块阶段只能在前一索取的区块验证通过后方能索取验证下一个区块,数据同步效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高区块链的数据同步效率的区块链的数据同步方法、装置、计算机设备和存储介质。
一种区块链的数据同步方法,针对区块链系统中的任一节点,所述节点中区块链采用树形结构,所述树形结构中的叶子节点为区块,所述树形结构的根节点为所述节点中最新区块执行后节点状态的哈希值,所述方法包括:
从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
在其中一个实施例中,所述根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明,包括:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证,包括:
针对任一待同步区块,根据所述待同步区块的哈希值及所述待同步区块的默克尔证明,确定共识哈希值;
在所述共识哈希值与所述目标根哈希值一致的情况下,确定所述待同步区块通过验证。
在其中一个实施例中,所述在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步,包括:
针对任一所述待同步区块X,在所述待同步区块X通过验证的情况下,确定所述待同步区块X的前一区块X-1是否已完成执行;
在所述区块X-1已完成执行的情况下,对所述待同步区块X进行执行;
否则,将所述待同步区块存储于本地内存中,直至所述区块X-1完成执行,对所述待同步区块X进行执行。
在其中一个实施例中,所述对所述待同步区块X进行执行,包括:
在所述树形结构中增加所述待同步区块X对应的叶子节点;
根据所述待同步区块X的哈希值更新所述树形结构的子节点及所述根节点。
在其中一个实施例中,所述并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明,包括:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
在获取的所述待同步区块的第一数量与已执行的所述待同步区块的第二数量之间的差值大于或者等于第一阈值的情况下,暂停从至少一个所述对端节点中获取待同步区块及各所述待同步区块的默克尔证明,直至所述第一数量与已执行的所述待同步区块的第三数量之间的差值小于或者等于第二阈值,继续从至少一个所述对端节点中获取所述待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述方法还包括:
接收落后节点针对区块N的索取请求;
从所述区块链中获取所述区块N及所述区块N的默克尔证明后,向所述落后节点发送所述区块N及所述区块N的默克尔证明。
一种区块链的数据同步装置,针对区块链系统中的任一节点,所述节点中区块链采用树形结构,所述树形结构中的叶子节点为区块,所述树形结构的根节点为所述节点中最新区块执行后节点状态的哈希值,所述装置包括:
第一获取模块,用于从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
第二获取模块,用于根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
验证模块,用于根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
同步模块,用于在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
在其中一个实施例中,所述第二获取模块还用于:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述验证模块还用于:
针对任一待同步区块,根据所述待同步区块的哈希值及所述待同步区块的默克尔证明,确定共识哈希值;
在所述共识哈希值与所述目标根哈希值一致的情况下,确定所述待同步区块通过验证。
在其中一个实施例中,所述同步模块还用于:
针对任一所述待同步区块X,在所述待同步区块X通过验证的情况下,确定所述待同步区块X的前一区块X-1是否已完成执行;
在所述区块X-1已完成执行的情况下,对所述待同步区块X进行执行;
否则,将所述待同步区块存储于本地内存中,直至所述区块X-1完成执行,对所述待同步区块X进行执行。
在其中一个实施例中,所述同步模块还用于:
在所述树形结构中增加所述待同步区块X对应的叶子节点;
根据所述待同步区块X的哈希值更新所述树形结构的子节点及所述根节点。
在其中一个实施例中,所述第二获取模块还用于:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
在获取的所述待同步区块的第一数量与已执行的所述待同步区块的第二数量之间的差值大于或者等于第一阈值的情况下,暂停从至少一个所述对端节点中获取待同步区块及各所述待同步区块的默克尔证明,直至所述第一数量与已执行的所述待同步区块的第三数量之间的差值小于或者等于第二阈值,继续从至少一个所述对端节点中获取所述待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述装置还包括:
接收模块,用于接收落后节点针对区块N的索取请求;
发送模块,用于从所述区块链中获取所述区块N及所述区块N的默克尔证明后,向所述落后节点发送所述区块N及所述区块N的默克尔证明。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
上述区块链的数据同步方法、装置、计算机设备和存储介质,针对区块链系统中的任一节点,该节点中区块链采用树形结构,该树形结构中的叶子节点为区块,该树形结构的根节点为该节点中最新区块执行后节点状态的哈希值。节点可以从对端节点中获取目标根哈希值及目标区块高度,该目标根哈希值为对端节点中区块链的根节点,目标区块高度为对端节点中区块链的区块高度。根据目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各待同步区块的默克尔证明后,根据各待同步区块的默克尔证明及目标根哈希值,对各待同步区块进行验证,并在各待同步区块通过验证的情况下,对各待同步区块进行数据同步。本公开实施例提供的区块链的数据同步方法、装置、计算机设备和存储介质,根据待同步区块的默克尔证明对待同步区块进行验证,也即待同步区块的验证过程不依赖其他区块,可以并行进行待同步区块的索取及验证,可以提高区块链的数据同步效率。
附图说明
图1为一个实施例中区块链的数据同步方法的应用环境图;
图2a~图2b为一个实施例中区块链的数据同步方法的示意图;
图3为一个实施例中区块链的数据同步方法的流程示意图;
图4为一个实施例中区块链的数据同步方法的流程示意图;
图5为一个实施例中区块链的数据同步方法的流程示意图;
图6为一个实施例中区块链的数据同步方法的流程示意图;
图7a~图7b为一个实施例中区块链的数据同步方法的示意图;
图8为一个实施例中区块链的数据同步方法的流程示意图;
图9为一个实施例中区块链的数据同步方法的流程示意图;
图10为一个实施例中区块链的数据同步装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的区块链的数据同步方法,可以应用于如图1所示的应用环境中。其中,区块链系统100包括多个节点102,在任一节点102内,区块链以树形结构的方式存储,该树形结构的根节点记录的根节点哈希值为该节点102内最新区块执行后节点状态的哈希值,该树形结构的叶子节点为区块。参照图2a~图2b所示,区块链为默克尔树的树形结构,在图2a为落后节点维护的区块链,其最新区块标记为区块N,根节点为区块N执行后节点的哈希值,图2b为对端节点维护的区块链,其最新区块标记为区块M,根节点为区块M执行后节点的哈希值,其中M大于N,且M与N均为正整数。
当区块链系统100中包括落后节点,该落后节点中维护的区块链落后于其他节点中维护的区块链,故需要与其他节点进行数据同步,以使得区块链系统中各节点维护的区块链一致。落后节点可以从对端节点获取目标根哈希值与目标区块高度,并根据目标区块高度及本地维护的区块链的区块高度,确定待同步区块,上述图2a与图2b的示例中,待同步区块包括区块N+1、N+2、……M。落后节点从至少一个对端节点中索取各待同步区块及各待同步区块的默克尔证明后,根据各待同步区块的默克尔证明及目标根哈希值即可实现对待同步区块正确性的验证,并在待同步区块通过验证的情况下,可以对待同步区块进行数据同步。
也即,本公开实施例提供的区块链的数据同步方法,根据待同步区块的默克尔证明即可对待同步区块进行验证,待同步区块的验证过程不依赖其他区块,故本公开实施例可以并行进行待同步区块的索取及验证,可以提高区块链的数据同步效率。
其中,节点102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,也可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,针对区块链系统中的任一节点,各节点中区块链采用树形结构,树形结构中的叶子节点为区块,根节点为节点中最新区块执行后节点状态的哈希值。如图3所示,提供了一种区块链的数据同步方法,以该方法应用于图1中的节点102为例进行说明,包括以下步骤:
在步骤302中,从对端节点中获取目标根哈希值及目标区块高度,目标根哈希值为对端节点中区块链的根节点,目标区块高度为对端节点中区块链的区块高度。
本公开实施例中,落后节点可以从对端节点中获取目标根哈希值,目标根哈希值可以为对端节点中区块链的根节点记录的哈希值,目标区块高度可以为对端节点中区块链的区块高度。本公开实施例中以图2a所示的落后节点及图2b所示的对端节点为例,落后节点从对端节点中获取的对端节点中的目标区块高度为M,目标根哈希值为roothash2。
在步骤304中,根据目标区块高度从至少一个对端节点中获取至少一个待同步区块及各待同步区块的默克尔证明。
本公开实施例中,落后节点本地维护的区块链的区块高度为N,目标区块高度为M,则落后节点可以向至少一个对端节点索取区块N+1、区块N+2、……区块M。以区块X为例(X为大于或者等于N+1且小于或者等于M的整数),对端节点可以响应于落后节点针对区块X的索取请求,从本地维护维护的区块链中获取区块X及区块X在树形结构中的默克尔证明后,发送该区块X以及区块X的默克尔证明至落后节点。
以N为5、M为8、X为6为例,落后节点向至少一个对端节点索取区块6、区块7和区块8。其中一个对端节点响应于针对区块6的索取请求,从树形结构中获取区块6以及区块6的默克尔证明,其中区块6的默克尔证明包括:hash5、hash(hash7,hash8)、hash(hash(hash1,hash2),hash(hash(hash 3,hash4)))。
需要说明的是,本公开实施例中可以采用正序索取区块的方式,也可以采用逆序索取区块的方式,还可以采用随机顺序索取区块的方式,本公开实施例中对于区块索取的顺序不做具体限定。
在步骤306中,根据各待同步区块的默克尔证明及目标根哈希值,对各待同步区块进行验证。
本公开实施例中,落后节点在获取到各待同步区块后,可以根据各待同步区块的默克尔证明及目标根哈希值,对各待同步区块进行验证。在对默克尔证明以及待同步区块的哈希值进行哈希计算得到的哈希值,与目标根哈希值一致的情况下,可以确定该待同步区块在区块链的树形结构中,也即该待同步区块通过验证。
在步骤308中,在各待同步区块通过验证的情况下,对各待同步区块进行数据同步。
本公开实施例中,对于通过验证的各待同步区块,可以进行数据同步,也即可以将其加入到落后节点中区块链的树形结构中,作为树形结构的叶子节点。
上述区块链的数据同步方法,针对区块链系统中的任一节点,该节点中区块链采用树形结构,该树形结构中的叶子节点为区块,该树形结构的根节点为该节点中最新区块执行后节点状态的哈希值。节点可以从对端节点中获取目标根哈希值及目标区块高度,该目标根哈希值为对端节点中区块链的根节点,目标区块高度为对端节点中区块链的区块高度。根据目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各待同步区块的默克尔证明后,根据各待同步区块的默克尔证明及目标根哈希值,对各待同步区块进行验证,并在各待同步区块通过验证的情况下,对各待同步区块进行数据同步。本公开实施例提供的区块链的数据同步方法,可以根据待同步区块的默克尔证明对待同步区块进行验证,也即待同步区块的验证过程不依赖其他区块,故可以并行进行待同步区块的索取及验证,可以提高区块链的数据同步效率。
在一个实施例中,步骤304可以包括:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明。
本公开实施例中,落后节点可以并行向至少一个对端节点获取至少一个待同步区块及待同步区块的默克尔证明。示例性的,仍以上述示例为例,落后节点可以并行向对端节点1索取区块6、向对端节点2索取区块7、向对端节点3索取区块8,或者,落后节点也可以向对端节点1或者区块节点2或者区块节点3并行的索取区块6、区块7和区块8。
也即,落后节点可以并行地选择不同对端节点来索取不同的待同步区块,能够最大限度地利用网络资源,并且可以并行的对不同的待同步区块进行验证,可以提高CPU(central processing unit,中央处理器)资源的利用率,提高区块链的数据同步效率。
在一个实施例中,参照图4所示,步骤306可以包括:
在步骤402中,针对任一待同步区块,根据待同步区块的哈希值及待同步区块的默克尔证明,确定共识哈希值;
在步骤404中,在共识哈希值与目标根哈希值一致的情况下,确定待同步区块通过验证。
本公开实施例中,针对任一待同步区块X,可以根据该待同步区块的哈希值及待同步区块X的默克尔证明进行哈希计算,得到共识哈希值。仍以上述示例为例,在对区块6进行验证时,可以根据区块6的区块哈希值hash6与hash5进行哈希计算得到hash(hash5,hash6),进一步的根据hash(hash5,hash6)与hash(hash7,hash8)进行哈希计算得到hash(hash(hash5,hash6),hash(hash(hash 7,hash8))),再进一步的根据hash(hash(hash5,hash6),hash(hash(hash 7,hash8)))与hash(hash(hash1,hash2),hash(hash(hash 3,hash4)))进行哈希计算,得到共识哈希值。
在共识哈希值与目标根哈希值roothash2一致时,可以确定待同步区块在区块链的树形结构中,确定该待同步区块通过验证。
本公开实施例提供的区块链的数据同步方法,通过待同步区块的默克尔证明来验证待同步区块的正确性,针对待同步区块的验证不再依赖其他区块,故可以并行进行各待同步区块的验证处理,可以提高数据同步的效率以及提高CPU资源的利用率。
在一个实施例中,参照图5所示,步骤308可以包括:
在步骤502中,针对任一待同步区块X,在待同步区块X通过验证的情况下,确定待同步区块X的前一区块X-1是否已完成执行;
在步骤504中,在区块X-1已完成执行的情况下,对待同步区块X进行执行;否则,将待同步区块存储于本地内存中,直至区块X-1完成执行,对待同步区块X进行执行。
本公开实施例中,在待同步区块X通过验证的情况下,可以确定待同步区块的前一区块X-1是否已完成执行,也即在本地维护的区块链的树形结构中查找是否存在区块X-1对应的叶子节点,或者确定当前的区块高度是否为区块X-1。
在一个实例中,在树形结构中包括区块X-1对应的叶子节点或者当前区块高度为区块X-1的情况下,可以确定前一区块X-1已完成执行,则可以对待同步区块X进行执行。在另一个示例中,在树形结构中不包括区块X-1对应的叶子节点或者当前区块高度不为区块X-1的情况下,可以确定前一区块X-1尚未完成执行,则当前待同步区块X无法执行,将该待同步区块X存储于本地内存中,直至前一区块X-1完成执行后,从本地内存中读取该待同步区块X进行执行。
以此类推,在各待同步区块均完成执行后,落后节点完成数据同步过程,落后节点本地维护的区块链可以恢复到最新的区块高度。
在一个实施例中,参照图6,上述步骤504中,对待同步区块X进行执行,包括:
在步骤602中,在树形结构中增加待同步区块X对应的叶子节点;
在步骤604中,根据待同步区块X的哈希值更新树形结构的子节点及根节点。
本公开实施例中,在对待同步区块X进行执行(对待同步区块X进行上链)时,可以在区块链对应的树形结构中增加待同步区块X对应的叶子节点,并根据待同步区块X的哈希值更新该树形结构与该待同步区块X对应的叶子节点相关联的子节点以及根节点。
仍以上述示例为例,在待同步区块6通过验证后,确定区块5已在树形结构中,故可以直接对区块6进行执行。可以对区块6和区块5中的哈希值进行哈希计算,得到对应的子节点hash(hash5,hash 6)(需要说明的是,图6中对应的子节点简化标记为hash(5,6),其他节点类推),对子节点hash(hash5,hash 6)和hash(hash(hash 1,hash 2))进行哈希计算,得到对应的根节点roothash3。参照图7a与图7b所示,区块6执行后的区块链的树形结构如图7b所示,相对于图7a中执行前的区块链,树形结构中增加了区块6对应的叶子节点及子节点hash(5,6)、根节点由roothash3更新为roothash4。
在一个实施例中,参照图8,步骤304可以包括:
在步骤802中,并行从至少一个对端节点中获取至少一个待同步区块及各待同步区块的默克尔证明;
在步骤804中,在获取的待同步区块的第一数量与已执行的待同步区块的第二数量之间的差值大于或者等于第一阈值的情况下,暂停从至少一个对端节点中获取待同步区块及各待同步区块的默克尔证明,直至第一数量与已执行的待同步区块的第三数量之间的差值小于或者等于第二阈值,继续从至少一个所述对端节点中获取待同步区块及各待同步区块的默克尔证明。
本公开实施例中,落后节点可以并行从至少一个对端节点索取至少一个待同步区块及待同步区块的默克尔证明,并且在索取待同步区块的过程中并行执行对待同步区块的验证与执行过程。可以统计当前已从对端节点获取的待同步区块的第一数量及已执行的待同步区块的第二数量,确定第一数量与第二数量的差值,在该差值大于或者等于第一阈值的情况下,可以暂停从对端节点获取待同步区块,仅执行对已获取的待同步区块的验证及执行过程。
直至第一数量与已执行的待同步区块的第三数量的差值小于或者等于第二阈值时,继续从对端节点获取待同步区块及待同步区块的默克尔证明。
其中,第一阈值与第二阈值为预设的差值,第一阈值大于第二阈值,第一阈值与第二阈值的具体取值可以由本领域技术人员根据落后节点的内存进行设定,本公开实施例对此不做具体限定。
根据本公开实施例提供的区块链的数据同步方法,可以通过预先设定的第一阈值和第二阈值控制落后节点对于待同步区块的索取,可以合理控制网络资源消耗,通过限制落后节点本地内存中缓存的区块数量,避免内存溢出,进而避免不必要的数据库操作。
在一个实施例中,参照图9,上述区块链的数据同步方法还可以包括:
在步骤902中,接收落后节点针对区块N的索取请求;
在步骤904中,从区块链中获取区块N及区块N的默克尔证明后,向落后节点发送区块N及区块N的默克尔证明。
本公开实施例中,在落后节点完成数据同步后,该落后节点维护的是最新的区块链,也即其可以作为对端节点(以下简称为对端节点)向其他落后节点(以下简称为落后节点)提供区块,以完成其他落后节点区块链的数据同步。
在接收到落后节点针对区块N的索取请求的情况下,可以从树形结构的区块链中获取该区块N及区块N的默克尔证明,并向落后节点发送该区块N及区块N的默克尔证明,进而使得落后节点可以通过区块N的默克尔证明对区块N进行验证后,对区块N进行执行(具体过程参照前述实施例的相关描述即可,本公开实施例对此不做具体限定)。
为使本领域技术人员更好的理解本公开实施例,以下通过具体示例对本公开实施例加以说明。
示例性的,区块链系统中各节点中维护的区块链采用树形结构,在该树形结构中,区块链中各区块之间不再有连接关系,也即各区块不再具有父区块,区块中不再存储父区块的哈希值,所有区块将按序作为叶子节点形成一颗默克尔树,树根的哈希值将作为第n个区块执行完成之后的节点状态哈希值进行共识。这样一来,当树的任何一个叶子节点(区块)被修改的情况下,都会导致根节点RootHash出错,因此只需要对比根节点哈希值是一致的,就可以确认所有前N个区块的哈希值是一致的,并且通过RootHash,就可以通过默克尔证明的方式证明其中任何一个叶子节点(Block 0到Block N)都是存在于这棵默克尔树中的。具体数据同步过程如下:
落后节点首先获取一个最新的目标根节点哈希值RootHash及目标区块高度,并根据本地维护的区块链的区块高度及目标区块高度,并行从至少一个对端节点正序进行待同步区块的索取。
任一对端节点在收到索取区块X的请求后,返回对应的区块X以及区块X对应的叶子节点到根节点的默克尔证明。
落后节点可以通过返回的默克尔证明并行地验证任意区块X确实处在默克尔树中,从而确认索取到的区块是正确的区块,并且在确定当前索取的区块X的前一区块X-1验证且执行后,开始执行该区块X,无需等待所有区块索取完成之后才开始执行,最终恢复到最新的区块高度。
落后节点在索取区块的过程中,可以预先设置缓存阈值,包括第一阈值和第二阈值,当索取的待同步区块的数量X超过已执行的待同步区块的数量Y的数量大于第一阈值之后(例如第一阈值设置为100,X-Y>=100),可以暂停区块的索取,直到执行的区块数量到达Z,满足索取的区块数量与执行的区块数量差值小于第二阈值(例如第一阈值设置为50,X-Z<=50)之后,重新开始索取区块。
本公开实施例能够并行利用网络资源与CPU资源,且并行索取、验证区块,可以提高区块的同步效率。
应该理解的是,虽然图1-9的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-9中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,针对区块链系统中的任一节点,所述节点中区块链采用树形结构,所述树形结构中的叶子节点为区块,所述树形结构的根节点为所述节点中最新区块执行后节点状态的哈希值,如图10所示,提供了一种区块链的数据同步装置,包括:第一获取模块1002、第二获取模块1004、验证模块1006和同步模块1008,其中:
第一获取模块1002,用于从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
第二获取模块1004,用于根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
验证模块1006,用于根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
同步模块1008,用于在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
上述区块链的数据同步装置,针对区块链系统中的任一节点,该节点中区块链采用树形结构,该树形结构中的叶子节点为区块,该树形结构的根节点为该节点中最新区块执行后节点状态的哈希值。节点可以从对端节点中获取目标根哈希值及目标区块高度,该目标根哈希值为对端节点中区块链的根节点,目标区块高度为对端节点中区块链的区块高度。根据目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各待同步区块的默克尔证明后,根据各待同步区块的默克尔证明及目标根哈希值,对各待同步区块进行验证,并在各待同步区块通过验证的情况下,对各待同步区块进行数据同步。本公开实施例提供的区块链的数据同步装置,根据待同步区块的默克尔证明对待同步区块进行验证,也即待同步区块的验证过程不依赖其他区块,可以并行进行待同步区块的索取及验证,可以提高数据同步效率。
在其中一个实施例中,所述第二获取模块1004还用于:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述验证模块1006还用于:
针对任一待同步区块,根据所述待同步区块的哈希值及所述待同步区块的默克尔证明,确定共识哈希值;
在所述共识哈希值与所述目标根哈希值一致的情况下,确定所述待同步区块通过验证。
在其中一个实施例中,所述同步模块1008还用于:
针对任一所述待同步区块X,在所述待同步区块X通过验证的情况下,确定所述待同步区块X的前一区块X-1是否已完成执行;
在所述区块X-1已完成执行的情况下,对所述待同步区块X进行执行;
否则,将所述待同步区块存储于本地内存中,直至所述区块X-1完成执行,对所述待同步区块X进行执行。
在其中一个实施例中,所述同步模块1008还用于:
在所述树形结构中增加所述待同步区块X对应的叶子节点;
根据所述待同步区块X的哈希值更新所述树形结构的子节点及所述根节点。
在其中一个实施例中,所述第二获取模块1004还用于:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
在获取的所述待同步区块的第一数量与已执行的所述待同步区块的第二数量之间的差值大于或者等于第一阈值的情况下,暂停从至少一个所述对端节点中获取待同步区块及各所述待同步区块的默克尔证明,直至所述第一数量与已执行的所述待同步区块的第三数量之间的差值小于或者等于第二阈值,继续从至少一个所述对端节点中获取所述待同步区块及各所述待同步区块的默克尔证明。
在其中一个实施例中,所述装置还可以包括:
接收模块,用于接收落后节点针对区块N的索取请求;
发送模块,用于从所述区块链中获取所述区块N及所述区块N的默克尔证明后,向所述落后节点发送所述区块N及所述区块N的默克尔证明。
关于区块链的数据同步装置的具体限定可以参见上文中对于区块链的数据同步方法的限定,在此不再赘述。上述区块链的数据同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种区块链的数据同步方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种区块链的数据同步方法,其特征在于,针对区块链系统中的任一节点,所述节点中区块链采用树形结构,所述树形结构中的叶子节点为区块,所述树形结构的根节点为所述节点中最新区块执行后节点状态的哈希值,所述方法包括:
从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明,包括:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明。
3.根据权利要求1或2所述的方法,其特征在于,所述根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证,包括:
针对任一待同步区块,根据所述待同步区块的哈希值及所述待同步区块的默克尔证明,确定共识哈希值;
在所述共识哈希值与所述目标根哈希值一致的情况下,确定所述待同步区块通过验证。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步,包括:
针对任一所述待同步区块X,在所述待同步区块X通过验证的情况下,确定所述待同步区块X的前一区块X-1是否已完成执行;
在所述区块X-1已完成执行的情况下,对所述待同步区块X进行执行;
否则,将所述待同步区块存储于本地内存中,直至所述区块X-1完成执行,对所述待同步区块X进行执行。
5.根据权利要求4所述的方法,其特征在于,所述对所述待同步区块X进行执行,包括:
在所述树形结构中增加所述待同步区块X对应的叶子节点;
根据所述待同步区块X的哈希值更新所述树形结构的子节点及所述根节点。
6.根据权利要求2所述的方法,其特征在于,所述并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明,包括:
并行从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
在获取的所述待同步区块的第一数量与已执行的所述待同步区块的第二数量之间的差值大于或者等于第一阈值的情况下,暂停从至少一个所述对端节点中获取待同步区块及各所述待同步区块的默克尔证明,直至所述第一数量与已执行的所述待同步区块的第三数量之间的差值小于或者等于第二阈值,继续从至少一个所述对端节点中获取所述待同步区块及各所述待同步区块的默克尔证明。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述方法还包括:
接收落后节点针对区块N的索取请求;
从所述区块链中获取所述区块N及所述区块N的默克尔证明后,向所述落后节点发送所述区块N及所述区块N的默克尔证明。
8.一种区块链的数据同步装置,其特征在于,针对区块链系统中的任一节点,所述节点中区块链采用树形结构,所述树形结构中的叶子节点为区块,所述树形结构的根节点为所述节点中最新区块执行后节点状态的哈希值,所述装置包括:
第一获取模块,用于从对端节点中获取目标根哈希值及目标区块高度,所述目标根哈希值为所述对端节点中区块链的根节点,所述目标区块高度为所述对端节点中区块链的区块高度;
第二获取模块,用于根据所述目标区块高度从至少一个所述对端节点中获取至少一个待同步区块及各所述待同步区块的默克尔证明;
验证模块,用于根据各所述待同步区块的默克尔证明及所述目标根哈希值,对各所述待同步区块进行验证;
同步模块,用于在各所述待同步区块通过验证的情况下,对各所述待同步区块进行数据同步。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111166222.7A CN113886496A (zh) | 2021-09-30 | 2021-09-30 | 区块链的数据同步方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111166222.7A CN113886496A (zh) | 2021-09-30 | 2021-09-30 | 区块链的数据同步方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113886496A true CN113886496A (zh) | 2022-01-04 |
Family
ID=79005232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111166222.7A Pending CN113886496A (zh) | 2021-09-30 | 2021-09-30 | 区块链的数据同步方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113886496A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114912150A (zh) * | 2022-05-13 | 2022-08-16 | 北京航星永志科技有限公司 | 一种数据处理和获取方法、装置及电子设备 |
CN115495531B (zh) * | 2022-11-17 | 2023-03-24 | 山东区块链研究院 | 基于检查点的区块链数据同步方法及系统 |
-
2021
- 2021-09-30 CN CN202111166222.7A patent/CN113886496A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114912150A (zh) * | 2022-05-13 | 2022-08-16 | 北京航星永志科技有限公司 | 一种数据处理和获取方法、装置及电子设备 |
CN115495531B (zh) * | 2022-11-17 | 2023-03-24 | 山东区块链研究院 | 基于检查点的区块链数据同步方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2018355092B2 (en) | Witness blocks in blockchain applications | |
CN109766349B (zh) | 任务防重方法、装置、计算机设备及存储介质 | |
US11314451B2 (en) | Method and apparatus for storing data | |
CN113886496A (zh) | 区块链的数据同步方法、装置、计算机设备和存储介质 | |
CN110427386B (zh) | 数据处理方法、装置及计算机存储介质 | |
CN110543448A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
JP6330528B2 (ja) | データ分割制御プログラム、データ分割制御方法、及び、データ分割制御装置 | |
CN113094076A (zh) | 基于版本控制的版本迭代方法、装置、设备及介质 | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
CN111338834B (zh) | 数据存储方法和装置 | |
CN112199175B (zh) | 一种任务队列生成方法、装置及设备 | |
CN112559529A (zh) | 数据存储方法、装置、计算机设备及存储介质 | |
CN108389124B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN112866406B (zh) | 一种数据存储方法、系统、装置、设备及存储介质 | |
CN116991800A (zh) | 文件获取系统、方法、装置、计算机设备和存储介质 | |
CN105610596B (zh) | 一种资源目录管理方法和网络终端 | |
CN112995932B (zh) | 基于哈希算法的短信链路监控方法、装置、设备及介质 | |
CN115203210A (zh) | 哈希表处理方法、装置、设备及计算机可读存储介质 | |
CN107291628B (zh) | 访问数据存储设备的方法和装置 | |
CN112800123A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN111191082A (zh) | 数据管理方法、装置、计算机设备和存储介质 | |
CN110995437A (zh) | 基于etc系统的用户信息录入方法、装置、设备和存储介质 | |
CN110597540A (zh) | 一种金融终端的版本更新方法、装置、服务器和存储介质 | |
CN110784479B (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN114268540B (zh) | 规则引擎的优化方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |