CN115168444A - 基于区块链的状态数据的重建方法、装置和存储介质 - Google Patents
基于区块链的状态数据的重建方法、装置和存储介质 Download PDFInfo
- Publication number
- CN115168444A CN115168444A CN202210725474.7A CN202210725474A CN115168444A CN 115168444 A CN115168444 A CN 115168444A CN 202210725474 A CN202210725474 A CN 202210725474A CN 115168444 A CN115168444 A CN 115168444A
- Authority
- CN
- China
- Prior art keywords
- block
- state data
- blocks
- node
- data
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- 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
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种基于区块链的状态数据的重建方法、装置和存储介质。本申请涉及区块链领域,该方法包括:从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;根据获取到的交易数据重建状态数据。通过本申请,解决了相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题。
Description
技术领域
本申请涉及区块链领域,具体而言,涉及一种基于区块链的状态数据的重建方法、装置和存储介质。
背景技术
在区块链技术领域,需要进行状态数据重建操作的包括如下3个场景:场景一,区块链网络中有一个新组织加入区块链网络,在新组织的节点上需要进行状态数据重建;场景二,新组织的从Peer节点加入区块链网络或组织扩容,在从Peer节点上需要进行状态数据重建;场景三:主Peer节点发生故障宕机后恢复,在主Peer节点上需要进行状态数据重建。
现有区块链状态数据的重建方法是:客户端发出状态数据重建请求,服务端建立状态数据重建任务,在客户端与服务端之间建立起长连接。在状态数据重建任务中,服务端从区块链中第一个区块开始,按区块创建顺序推送区块给客户端。客户端不断接收区块,对区块做校验后,顺序执行区块,把区块中的写集提交到本地状态数据库,最终完成状态数据重建。
对于需要进行状态数据重建操作的场景一和场景二,新加入的节点重建状态数据需要同步区块链中的全量区块,随着区块链网络不断运行,区块高度不断增加,新节点进行状态数据重建时需要同步的区块数也会不断增加,执行状态数据库提交的次数也不断增加,新节点状态数据重建耗时越来越久。对于需要进行状态数据重建操作的场景三,故障恢复节点故障恢复节点故障恢复节点状态数据重建消耗的时间,与故障发生期间缺失的区块数有关。对于大交易量场景,数小时的故障可能引起大量区块缺失,导致故障恢复节点故障恢复节点故障恢复节点需要长时间的数据同步和多次状态数据库提交,才能重建状态数据。
针对相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题,目前尚未提出有效的解决方案。
发明内容
本申请提供一种基于区块链的状态数据的重建方法、装置和存储介质,以解决相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题。
根据本申请的一个方面,提供了一种基于区块链的状态数据的重建方法。该方法包括:从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;根据获取到的交易数据重建状态数据。
可选地,从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块包括:判断区块链上的各个区块中是否存储有交易数据;对于存储有交易数据的区块,判断存储的交易数据是否影响状态数据;在存储的交易数据影响状态数据的情况下,确定区块对状态数据存在影响,并将区块确定为第一区块。
可选地,判断存储的交易数据是否影响状态数据包括:获取存储有交易数据的区块的编号,并获取状态数据的版本号,其中,编号为区块在区块链中的创建顺序对应的序号,版本号为第二区块对应的编号,第二区块为故障恢复节点发生故障前最新创建的区块或新加入区块链的区块;判断编号是否大于等于版本号,并在编号大于等于版本号的情况下,确定存储的交易数据影响状态数据。
可选地,以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据包括:按照编号从小到大的顺序对第一区块进行排序,获得排序结果,其中,编号为区块在区块链中的创建顺序对应的序号;将排序结果中排在第一位的第一区块确定为起始区块,并以起始区块为起点,按照排序结果的顺序依次读取多个第一区块中的交易数据。
可选地,根据获取到的交易数据重建状态数据包括:确定区块链中的主节点和从节点,其中,主节点为开始重建状态数据的节点,从节点为主节点以外的节点;控制主节点根据获取到的交易数据重建状态数据,得到第一状态数据,并将第一状态数据上传至主节点的状态数据库;确定主节点的区块,并根据主节点的区块更新各个从节点中的状态数据。
可选地,根据主节点的区块更新各个从节点中的状态数据包括:将主节点的区块同步至各个从节点;控制每个从节点从主节点的区块获取第一区块,根据获取的第一区块中存储的交易数据重建状态数据,得到第二状态数据,并将第二状态数据上传至从节点的状态数据库。
可选地,将主节点的区块同步至各个从节点包括:在从节点为初次加入区块链的节点的情况下,将主节点中的所有区块同步至从节点;在从节点为故障恢复节点的情况下,确定目标区块的编号,从主节点中获取目标区块的编号以及目标区块之后新创建的区块,并将获取到的区块同步至从节点,其中,目标区块为故障恢复节点发生故障前最新创建的区块。
根据本申请的另一方面,提供了一种基于区块链的状态数据的重建装置。该装置包括:第一获取单元,用于从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;第二获取单元,用于以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;重建单元,用于根据获取到的交易数据重建状态数据。
根据本发明实施例的另一方面,还提供了一种计算机存储介质,计算机存储介质用于存储程序,其中,程序运行时控制计算机存储介质所在的设备执行一种基于区块链的状态数据的重建方法。
根据本发明实施例的另一方面,还提供了一种电子设备,包含一个或多个处理器和存储器;存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,计算机可读指令运行时执行一种基于区块链的状态数据的重建方法。
通过本申请,采用以下步骤:从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;根据获取到的交易数据重建状态数据,解决了相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题。通过针对性的获取对状态数据有影响的区块中的交易数据,根据交易数据对状态数据进行重建,进而达到了高效完成对状态数据进行重建的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的基于区块链的状态数据的重建方法的流程图;
图2是根据本申请实施例提供的判断第一区块的示意图;
图3是根据本申请实施例的基于区块链的状态数据的重建方法的流程图;
图4是根据本申请实施例提供的基于区块链的状态数据的重建装置的示意图;
图5是根据本申请实施例提供的一种电子设备的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
根据本申请的实施例,提供了一种基于区块链的状态数据的重建方法。
图1是根据本申请实施例的基于区块链的状态数据的重建方法的流程图。如图1所示,该方法包括以下步骤:
步骤S102,从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块。
具体地,状态数据是表征区块中的元数据属性的一种数据,第一区块是影响元数据属性的区块,例如,元数据是X在Z银行进行的一笔交易数据,状态数据是这笔交易结束后X的钱包中剩余的存款,第一区块是区块中的交易数据对状态数据有影响的区块,例如,1号区块中的交易数据是在状态数据对应的存款之前的交易,区块链的状态数据库不需要更新,1号区块就是对状态数据无影响的区块,2号区块是在状态数据对应的存款之后发生的交易,区块链的状态数据库需要进行更新,2号区块是对状态数据有影响的区块,也即第一区块。
步骤S104,以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据。
具体地,起始区块是对状态数据有影响的第一个区块,例如,2号区块和3号区块都是第一区块,3号区块中的交易数据是在2号区块对应的更新后的状态数据上产生影响的交易数据,那么,2号区块就是起始区块。
步骤S106,根据获取到的交易数据重建状态数据。
具体地,每个第一区块都会对状态数据有影响,需要按照第一区块的创建顺序依次读取交易数据,进行重建状态数据。
本申请实施例提供的基于区块链的状态数据的重建方法,通过从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;根据获取到的交易数据重建状态数据,解决了相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题。通过针对性的获取对状态数据有影响的区块中的交易数据,根据交易数据对状态数据进行重建,进而达到了高效完成对状态数据进行重建的效果。
对状态数据进行重建前需要先确定包含交易数据的第一区块,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块包括:判断区块链上的各个区块中是否存储有交易数据;对于存储有交易数据的区块,判断存储的交易数据是否影响状态数据;在存储的交易数据影响状态数据的情况下,确定区块对状态数据存在影响,并将区块确定为第一区块。
具体地,区块链上的区块存储有不同类型的数据,分为存储交易数据的区块和存储非交易数据的区块,例如,存储交易数据的普通区块和存储非交易数据的配置区块。存储交易数据的区块其中部分区块为第一区块,第一区块会对状态数据的重建有影响,例如第一区块中存储的交易数据会更新节点上的状态数据,存储交易数据的区块中第一区块以外的区块对状态数据的重建没有影响,例如区块中存储的交易数据不会更新节点上的状态数据。通过确定区块中存在交易数据的第一区块可以排除对状态数据没有影响的不存在交易数据的区块,从而提高状态数据的重建效率。
确定包含交易数据的区块后还需要判断包含交易数据的区块是否影响状态数据,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,判断存储的交易数据是否影响状态数据包括:获取存储有交易数据的区块的编号,并获取状态数据的版本号,其中,编号为区块在区块链中的创建顺序对应的序号,版本号为第二区块对应的编号,第二区块为故障恢复节点发生故障前最新创建的区块或新加入区块链的区块;判断编号是否大于等于版本号,并在编号大于等于版本号的情况下,确定存储的交易数据影响状态数据。
具体地,编号是区块链的各个节点上对区块的标记,按照区块的创建顺序来确定,状态数据随着存储交易数据的区块被创建也随之更新,第二区块是在状态数据重建前最后一次更新状态数据的区块,由于状态数据重建有不同的场景,所以第二区块可能是故障恢复节点发生故障前最新创建的区块或者是新节点中新加入区块链的区块。通过判断区块中存储的交易数据是否影响状态数据,可以排除对状态数据没有影响的部分第一区块,从而提高状态数据的重建效率。
例如,在节点发生故障需要重建状态数据的场景下,图2是根据本申请实施例提供的判断第一区块的示意图,如图2所示,发生故障前该节点的状态数据为A=10,版本号=4;状态数据B=20,版本号=6。从创世区块开始遍历。创世区块中无交易数据,创世区块标记为无贡献,也即创世区块中的数据不会更新节点的状态数据。
接下来遍历到编号1的区块,提取到两笔交易数据。从交易1提取到关于A的交易数据,在状态数据库查询到A的版本号是4,不等于区块编号1,说明交易1对A最终版本无贡献,也即,交易1是在发生故障前已更新过状态数据的交易;从交易2提取到关于B的交易数据,在状态数据库查询到B的版本号是6,不等于区块编号1,说明交易2对B最终版本无贡献,也即,交易2是在发生故障前已更新过状态数据的交易。即编号1区块对状态数据最终版本无贡献。
如此遍历,直到编号4区块,从中提取到一笔交易3,从交易3提取到关于A的交易数据,在状态数据库查询到A的版本号是4,等于当前区块编号,说明交易3对状态数据最终版本有贡献,也即,交易3是在节点发生故障时最后更新状态数据的交易,说明编号4区块对状态数据最终版本有贡献,编号0到3的区块对状态数据最终版本无贡献。然后继续遍历,直到编号6区块,从中提取到一笔交易4,从交易4提取到关于B的交易数据,在状态数据库查询到B的版本号是6,等于当前区块编号,说明交易4对状态数据最终版本有贡献,也即,交易4是在节点发生故障时最后更新状态数据的交易,说明编号6区块对状态数据最终版本有贡献,编号5区块对状态数据最终版本无贡献。从编号4区块开始重放交易数据,用于重建状态数据。
进行状态数据重建时需要确定读取区块中交易数据的顺序,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据包括:按照编号从小到大的顺序对第一区块进行排序,获得排序结果,其中,编号为区块在区块链中的创建顺序对应的序号;将排序结果中排在第一位的第一区块确定为起始区块,并以起始区块为起点,按照排序结果的顺序依次读取多个第一区块中的交易数据。
具体地,起始区块为多个第一区块中编号最小的区块,起始区块的编号与状态数据的版本号相等,编号比起始区块大的区块为发生故障后产生的交易对应的区块,通过读取起始区块中的交易数据更新状态数据后,按照排序结果依次读取多个第一区块中的交易数据,每个第一区块中的交易数据都会更新状态数据。通过获取多个第一区块中的交易数据用来更新状态数据,相比于获取区块链上所有区块中的数据用于更新状态数据更加高效。
确定读取区块中交易数据的顺序后,还需要根据交易数据更新主节点的状态数据库,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,根据获取到的交易数据重建状态数据包括:确定区块链中的主节点和从节点,其中,主节点为开始重建状态数据的节点,从节点为主节点以外的节点;控制主节点根据获取到的交易数据重建状态数据,得到第一状态数据,并将第一状态数据上传至主节点的状态数据库;确定主节点的区块,并根据主节点的区块更新各个从节点中的状态数据。
具体地,每个新加入区块链的组织都会在区块链网络中建立自己的主节点,新组织需要扩大规模时依据主节点建立从节点。当新组织加入区块链时或者组织的节点发生故障时需要重建状态数据。在新组织加入区块链时,新组织的主节点从其他组织的节点中获取第一状态数据,从节点根据主节点的第一状态数据重建从节点的状态数据。新组织在状态数据重建好后,根据新增的交易数据建立新的状态数据,在组织的从节点发生故障时,从组织的主节点获取发生故障前最新创建的区块的状态数据和发生故障后的所有新区块的状态数据,从而完成故障节点的重建状态数据,通过更新主节点的状态数据库可以恢复区块链的状态数据,使区块链网络可以正常运转。
在主节点的状态数据库更新后,还需要更新从节点的状态数据库,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,根据主节点的区块更新各个从节点中的状态数据包括:将主节点的区块同步至各个从节点;控制每个从节点从主节点的区块获取第一区块,根据获取的第一区块中存储的交易数据重建状态数据,得到第二状态数据,并将第二状态数据上传至从节点的状态数据库。
具体地,从节点的区块是通过主节点获取的,主节点将节点上所有区块的数据同步给从节点,从节点依据同步的数据建立从节点上的区块,从节点的状态数据直接读取主节点的第一区块中的交易数据进行重建,得到第二状态数据。通过更新从节点的状态数据库可以使客户端能够正常使用区块链网络。
更新从节点的状态数据库时需要将将主节点的区块同步至各个从节点,可选地,在本申请实施例提供的基于区块链的状态数据的重建方法中,将主节点的区块同步至各个从节点包括:在从节点为初次加入区块链的节点的情况下,将主节点中的所有区块同步至从节点;在从节点为故障恢复节点的情况下,确定目标区块的编号,从主节点中获取目标区块的编号以及目标区块之后新创建的区块,并将获取到的区块同步至从节点,其中,目标区块为故障恢复节点发生故障前最新创建的区块。
具体地,从节点初次加入区块链时,需要获取主节点上所有区块的数据,从节点为故障恢复节点时,只需要获得故障恢复节点发生故障后新增的区块中的数据,以及发生故障前最新创建的区块中的数据用来重建状态数据。通过将主节点的区块同步至各个从节点能够快速重建从节点的状态数据。
根据本申请的实施例,提供了一种基于区块链的状态数据的重建方法。
图3是根据本申请实施例的基于区块链的状态数据的重建方法的流程图。如图3所示,该方法包括以下步骤:
步骤S301,主节点提交状态数据库时计算最小有贡献区块编号。
具体地,将最小有贡献区块编号初值设为0。每当区块提交到状态数据库后,判断当前区块类型是否为配置区块,在当前区块类型为配置区块的情况下,判断当前最小有贡献区块编号是否等于该配置区块编号,在当前最小有贡献区块编号等于该配置区块编号的情况下,最小有贡献区块编号等于该配置区块编号+1;,在当前区块类型为普通区块的情况下,判断当前最小有贡献区块中所有交易的交易数据在状态数据库的版本是否大于当前最小有贡献区块编号,在当前最小有贡献区块中所有交易的交易数据在状态数据库的版本大于当前最小有贡献区块编号的情况下,最小有贡献区块编号等于该普通区块编号+1。
例如,最小有贡献区块编号=0,提交编号0区块后,判断区块类型为配置区块,且最小有贡献区块编号等于0,则最小有贡献区块编号=1;提交编号1区块后,判断区块类型为普通区块,从最小有贡献区块(编号=1)提取关于C和D的交易数据,在状态数据库查到C的版本号为1,D的版本号为1,跳出循环;提交编号2区块后,判断区块类型为普通区块,从最小有贡献区块(编号=1)提取关于C和D的交易数据,在状态数据库查到C的版本号为2,D的版本号为1,跳出循环;提交编号3区块后,判断区块类型为普通区块,从最小有贡献区块(编号=1)提取关于C和D的交易数据,在状态数据库查到C的版本号为2,D的版本号为3,则最小有贡献区块编号=2。继续从最小有贡献区块(编号=2)提取关于C的交易数据,在状态数据库查到C的版本号为2,跳出循环。
提交编号4区块后,判断区块类型为普通区块,从最小有贡献区块(编号=2)提取关于C的交易数据,在状态数据库查到C的版本号为4,则最小有贡献区块编号=3。继续从最小有贡献区块(编号=3)提取关于D的交易数据,在状态数据库查到D的版本号为3,跳出循环;提交编号5区块后,判断区块类型为配置区块,最小有贡献区块(编号=3)不等于5,跳出循环;提交编号6区块后,判断区块类型为普通区块,从最小有贡献区块(编号=3)提取关于D的交易数据,在状态数据库查到D的版本号为6,则最小有贡献区块编号=4。继续从最小有贡献区块(编号=4)提取关于C的交易数据,在状态数据库查到C的版本号为4,跳出循环;提交编号7区块后,判断区块类型为配置区块,最小有贡献区块(编号=4)不等于7,跳出循环。最小有贡献区块编号记录在主节点本地状态数据库。
步骤S302,从节点向主节点查询最小有贡献区块编号。
具体地,从节点请求主节点数据同步服务前,先查询最小有贡献区块编号,并记录到从节点本地状态数据库。
步骤S303,从节点请求主节点的数据同步服务。
具体地,与现有技术一致,从节点按照本地的区块高度,请求主节点的数据同步服务。新加入区块链网络的从节点,发送起始区块编号=0;宕机恢复的从节点,发送起始区块编号=本地区块高度。主节点从起始区块编号开始推送区块给从节点。
步骤S304,从节点状态数据重建。
具体地,判断当前区块类型是否为配置区块,在当前区块类型为配置区块的情况下,执行该配置区块,完成对从节点状态数据的重建,在当前区块类型为普通区块的情况下,判断当前区块编号是否小于最小有贡献区块编号,在当前区块编号小于最小有贡献区块编号的情况下,跳过该区块,判断下一区块,在当前区块编号大于等于最小有贡献区块编号的情况下,提交该区块的状态数据,完成对从节点状态数据的重建。
步骤S305,从节点提交状态数据库时计算最小有贡献区块编号。
具体地,因从节点可能会切换到主节点,因此从节点提交状态数据库时,需与主节点一样计算最小有贡献区块编号。当从节点切换成主节点时,处理方法与原主节点一致。本申请实施例提供了一种基于状态数据版本的区块链状态数据重建方法,节点无需从创世区块开始提交状态数据,只需从最小有贡献区块开始提交区块,缩短了状态数据重建的时间,提供了状态数据重建效率。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例还提供了一种基于区块链的状态数据的重建装置,需要说明的是,本申请实施例的基于区块链的状态数据的重建装置可以用于执行本申请实施例所提供的用于基于区块链的状态数据的重建方法。以下对本申请实施例提供的基于区块链的状态数据的重建装置进行介绍。
图4是根据本申请实施例的基于区块链的状态数据的重建装置的示意图。如图4所示,该装置包括:第一获取单元401,用于从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;第二获取单元402,用于以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;重建单元403,用于根据获取到的交易数据重建状态数据。
本申请实施例提供的基于区块链的状态数据的重建装置,通过第一获取单元401从区块链中获取对区块链的状态数据存在影响的区块,得到多个第一区块;第二获取单元402以多个第一区块中的起始区块为起点,依次获取多个第一区块中的交易数据;重建单元403根据获取到的交易数据重建状态数据,解决了相关技术中由在重建区块链的状态数据时,由于区块太多,导致状态数据的重建效率低的问题,通过针对性的获取对状态数据有影响的区块中的交易数据,根据交易数据对状态数据进行重建,进而达到了高效完成对状态数据进行重建的效果。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,第一获取单元401包括:第一判断模块,用于判断区块链上的各个区块中是否存储有交易数据;第二判断模块,用于对于存储有交易数据的区块,判断存储的交易数据是否影响状态数据;第一确定模块,用于在存储的交易数据影响状态数据的情况下,确定区块对状态数据存在影响,并将区块确定为第一区块。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,第二判断模块包括:第一获取子模块,用于获取存储有交易数据的区块的编号,并获取状态数据的版本号,其中,编号为区块在区块链中的创建顺序对应的序号,版本号为第二区块对应的编号,第二区块为故障恢复节点发生故障前最新创建的区块或新加入区块链的区块;判断子模块,用于判断编号是否大于等于版本号,并在编号大于等于版本号的情况下,确定存储的交易数据影响状态数据。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,第二获取单元402包括:排序模块,用于按照编号从小到大的顺序对第一区块进行排序,获得排序结果,其中,编号为区块在区块链中的创建顺序对应的序号;第二确定模块,用于将排序结果中排在第一位的第一区块确定为起始区块,并以起始区块为起点,按照排序结果的顺序依次读取多个第一区块中的交易数据。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,重建单元403包括:第三确定模块,用于确定区块链中的主节点和从节点,其中,主节点为开始重建状态数据的节点,从节点为主节点以外的节点;重建模块,用于控制主节点根据获取到的交易数据重建状态数据,得到第一状态数据,并将第一状态数据上传至主节点的状态数据库;第四确定模块,用于确定主节点的区块,并根据主节点的区块更新各个从节点中的状态数据。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,第四确定模块包括:同步子模块,用于将主节点的区块同步至各个从节点;第二获取子模块,用于控制每个从节点从主节点的区块获取第一区块,根据获取的第一区块中存储的交易数据重建状态数据,得到第二状态数据,并将第二状态数据上传至从节点的状态数据库。
可选地,在本申请实施例提供的基于区块链的状态数据的重建装置中,同步子模块包括:区块同步子模块,用于在从节点为初次加入区块链的节点的情况下,将主节点中的所有区块同步至从节点;编号确定子模块,用于在从节点为故障恢复节点的情况下,确定目标区块的编号,从主节点中获取目标区块的编号以及目标区块之后新创建的区块,并将获取到的区块同步至从节点,其中,目标区块为故障恢复节点发生故障前最新创建的区块。
上述基于区块链的状态数据的重建装置包括处理器和存储器,上述第一获取单元401、第二获取单元402和重建单元403等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来达到高效完成对状态数据进行重建的效果。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请实施例还提供了一种计算机存储介质,计算机存储介质用于存储程序,其中,程序运行时控制计算机存储介质所在的设备执行一种基于区块链的状态数据的重建方法。
如图5所示,本申请实施例还提供了一种电子设备,电子设备501包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:基于区块链的状态数据的重建。本文中的设备可以是服务器、PC、PAD、手机等。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种基于区块链的状态数据的重建方法,其特征在于,包括:
从区块链中获取对所述区块链的状态数据存在影响的区块,得到多个第一区块;
以所述多个第一区块中的起始区块为起点,依次获取所述多个第一区块中的交易数据;
根据获取到的所述交易数据重建所述状态数据。
2.根据权利要求1所述的方法,其特征在于,从区块链中获取对所述区块链的状态数据存在影响的区块,得到多个第一区块包括:
判断所述区块链上的各个区块中是否存储有交易数据;
对于存储有所述交易数据的区块,判断存储的所述交易数据是否影响所述状态数据;
在存储的所述交易数据影响所述状态数据的情况下,确定所述区块对所述状态数据存在影响,并将所述区块确定为第一区块。
3.根据权利要求2所述的方法,其特征在于,判断存储的所述交易数据是否影响所述状态数据包括:
获取存储有所述交易数据的区块的编号,并获取所述状态数据的版本号,其中,所述编号为区块在所述区块链中的创建顺序对应的序号,所述版本号为第二区块对应的编号,所述第二区块为故障恢复节点发生故障前最新创建的区块或新加入区块链的区块;
判断所述编号是否大于等于所述版本号,并在所述编号大于等于所述版本号的情况下,确定存储的所述交易数据影响所述状态数据。
4.根据权利要求1所述的方法,其特征在于,以所述多个第一区块中的起始区块为起点,依次获取所述多个第一区块中的交易数据包括:
按照编号从小到大的顺序对所述第一区块进行排序,获得排序结果,其中,所述编号为区块在所述区块链中的创建顺序对应的序号;
将所述排序结果中排在第一位的所述第一区块确定为所述起始区块,并以所述起始区块为起点,按照所述排序结果的顺序依次读取所述多个第一区块中的所述交易数据。
5.根据权利要求1所述的方法,其特征在于,根据获取到的所述交易数据重建所述状态数据包括:
确定所述区块链中的主节点和从节点,其中,所述主节点为开始重建所述状态数据的节点,所述从节点为所述主节点以外的节点;
控制所述主节点根据获取到的所述交易数据重建所述状态数据,得到第一状态数据,并将所述第一状态数据上传至所述主节点的状态数据库;
确定所述主节点的区块,并根据所述主节点的区块更新各个所述从节点中的状态数据。
6.根据权利要求5所述的方法,其特征在于,根据所述主节点的区块更新各个所述从节点中的状态数据包括:
将所述主节点的区块同步至各个所述从节点;
控制每个所述从节点从所述主节点的区块获取所述第一区块,根据获取的所述第一区块中存储的交易数据重建所述状态数据,得到第二状态数据,并将所述第二状态数据上传至所述从节点的状态数据库。
7.根据权利要求6所述的方法,其特征在于,将所述主节点的区块同步至各个所述从节点包括:
在所述从节点为初次加入所述区块链的节点的情况下,将所述主节点中的所有区块同步至所述从节点;
在所述从节点为故障恢复节点的情况下,确定目标区块的编号,从所述主节点中获取所述目标区块的编号以及所述目标区块之后新创建的区块,并将获取到的区块同步至所述从节点,其中,所述目标区块为所述故障恢复节点发生故障前最新创建的区块。
8.一种基于区块链的状态数据的重建装置,其特征在于,包括:
第一获取单元,用于从区块链中获取对所述区块链的状态数据存在影响的区块,得到多个第一区块;
第二获取单元,用于以所述多个第一区块中的起始区块为起点,依次获取所述多个第一区块中的交易数据;
重建单元,用于根据获取到的所述交易数据重建所述状态数据。
9.一种计算机存储介质,其特征在于,所述计算机存储介质用于存储程序,其中,所述程序运行时控制所述计算机存储介质所在的设备执行权利要求1至7中任意一项所述的基于区块链的状态数据的重建方法。
10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任意一项所述的基于区块链的状态数据的重建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210725474.7A CN115168444A (zh) | 2022-06-24 | 2022-06-24 | 基于区块链的状态数据的重建方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210725474.7A CN115168444A (zh) | 2022-06-24 | 2022-06-24 | 基于区块链的状态数据的重建方法、装置和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115168444A true CN115168444A (zh) | 2022-10-11 |
Family
ID=83487310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210725474.7A Pending CN115168444A (zh) | 2022-06-24 | 2022-06-24 | 基于区块链的状态数据的重建方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115168444A (zh) |
-
2022
- 2022-06-24 CN CN202210725474.7A patent/CN115168444A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9367598B2 (en) | Merging an out of synchronization indicator and a change recording indicator in response to a failure in consistency group formation | |
CN112487083B (zh) | 一种数据校验方法和设备 | |
CN110597655B (zh) | 迁移和基于纠删码的重构相耦合快速预知修复方法及装置 | |
CN110413433A (zh) | 一种Maria DB集群故障后的恢复方法、设备以及存储介质 | |
CN106899654A (zh) | 一种序列值生成方法、装置及系统 | |
CN109492049A (zh) | 用于区块链网络的数据处理、区块生成及同步方法 | |
CN110895545B (zh) | 共享数据同步方法及装置 | |
CN114529415A (zh) | 基于区块链的交易验证方法及装置、电子设备 | |
CN110119947B (zh) | 共享工作量证明算力生成共生区块链的方法和设备 | |
CN113312205B (zh) | 数据校验方法、装置、存储介质和计算机设备 | |
CN110287164B (zh) | 一种数据恢复方法、装置及计算机设备 | |
CN115955488B (zh) | 基于副本冗余的分布式存储副本跨机房放置方法与装置 | |
CN115168444A (zh) | 基于区块链的状态数据的重建方法、装置和存储介质 | |
WO2024066005A1 (zh) | 重放区块链交易的方法及装置 | |
CN110532243A (zh) | 数据处理方法、装置和电子设备 | |
CN110018986B (zh) | 异常快照识别方法及装置 | |
CN110427423A (zh) | 一种避免数据库会话中断的方法、设备及可读介质 | |
CN115827028A (zh) | 系统的升级方法、装置、存储介质以及电子设备 | |
CN115080309A (zh) | 数据备份系统、方法、存储介质以及电子设备 | |
CN112000521B (zh) | 分布式数据库系统的全量备份方法、装置及计算机可读存储介质 | |
CN115129781A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN109151016B (zh) | 流量转发方法和装置、服务系统、计算设备及存储介质 | |
CN111400098A (zh) | 一种副本管理方法、装置、电子设备及存储介质 | |
CN110147355B (zh) | 数据同步方法、装置及服务器 | |
CN115686943A (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 |