CN111651300B - 一种区块链数据恢复方法、装置、设备及介质 - Google Patents
一种区块链数据恢复方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN111651300B CN111651300B CN202010505215.4A CN202010505215A CN111651300B CN 111651300 B CN111651300 B CN 111651300B CN 202010505215 A CN202010505215 A CN 202010505215A CN 111651300 B CN111651300 B CN 111651300B
- Authority
- CN
- China
- Prior art keywords
- data
- rolled back
- block
- mpt tree
- block chain
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- 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
Abstract
本发明公开了一种区块链数据恢复方法、装置、设备及介质,该方法包括获取待回滚高度,基于待回滚高度获取对应的所有待回滚根节点哈希值,基于待回滚根节点哈希值,从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据,并生成待回滚MPT树,将待回滚MPT树更新到内存中,将内存中的账本MPT树替换为待回滚MPT树,并基于待回滚MPT树,将区块链的账本状态回滚到对应的待回滚高度,删除原始待恢复区块链中待回滚高度之后的区块数据,并基于待回滚高度从同步的区块链节点中获取正常区块数据,恢复原始待恢复区块链中待回滚高度之后的区块数据,并基于正常区块数据获取正确根节点数据,对待回滚MPT树进行恢复,以提高区块链中的数据恢复的速度,降低数据恢复成本。
Description
技术领域
本发明涉及区块链数据处理技术领域,具体涉及一种区块链数据恢复方法、装置、设备及介质。
背景技术
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),是比特币的一个重要概念,其本质是一个去中心化的数据库,底层是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证交易的有效性(防伪)和生成下一个区块。根据区块链的特性,存储在区块链中的数据一旦产生将无法修改,而在实际应用中,不可避免地会出现由于技术原因或人为原因导致存储在区块链中的数据产生错误,由于区块链中的数据一旦产生无法修改的特性,目前对区块链中的数据进行恢复大多是从第一个区块开始,依次完成整个区块链的数据恢复,恢复速度慢,无法做到数据快速恢复,恢复成本高。
发明内容
本发明所要解决的技术问题是目前对区块链中的数据进行恢复大多是从第一个区块开始,依次完成整个区块链的数据恢复,恢复速度慢,无法做到数据快速恢复,恢复成本高。因此,提供一种区块链数据恢复方法、装置、设备及介质,以提高区块链中的数据恢复的速度,降低数据恢复成本。
本发明通过下述技术方案实现:
一种区块链数据恢复方法,包括:
获取待回滚高度,基于所述待回滚高度查询数据库,获取所述待回滚高度对应的所有待回滚根节点哈希值;
基于所述待回滚根节点哈希值,从所述数据库中获取每一所述待回滚根节点哈希值对应的待回滚根节点数据;
基于每一所述待回滚根节点数据,生成待回滚MPT树,将所述待回滚MPT树更新到内存中,将所述内存中的账本MPT树替换为待回滚MPT树;
基于所述待回滚MPT树,将所述区块链的账本状态回滚到对应的待回滚高度;
基于所述待回滚高度,删除原始待恢复区块链中所述待回滚高度之后的区块数据,并基于所述待回滚高度从同步的区块链节点中获取正常区块数据,恢复所述原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链;
当获取所述目标恢复区块链后,获取基于所述待回滚MPT树恢复后的恢复MPT树,并将所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值进行比较,若所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值一致,则所述区块链数据恢复完成。
进一步地,所述基于每一所述待回滚根节点数据,生成待回滚MPT树,包括:
基于每一所述待回滚根节点数据,递归查找所述数据库,获取所述根节点数据对应的所有子节点数据;
所述根节点数据和所述子节点数据根据各自的节点属性生成待回滚MPT树。
进一步地,所述区块链数据恢复方法还包括:
获取创世块,所述创世块中存储有不同数据类型的账本数据,每一所述账本数据中包括账本数据键值对;
对每一所述账本数据的值进行哈希计算,获取所述账本数据对应的哈希值;
将所述账本数据的哈希值和所述账本数据的键输入到MPT树模型中,生成各数据类型对应的账本MPT树;
将所述账本MPT树的根节点哈希值存储在区块头中,所述账本数据键值对存储在区块体中,生成正常区块。
进一步地,所述区块链数据恢复方法还包括:
将同步的区块链的账本状态进行比较,若所述同步的区块链中一区块的账本状态与其他同步的区块的账本状态不相同,则将账本状态异常的所述区块作为异常区块,获取所述异常区块的高度作为异常高度;
将所述异常高度的上一个区块高度作为待回滚高度。
进一步地,所述区块链数据恢复方法还包括:
获取待接收数据,所述待接收数据包括待接收键值对,所述待接收数据携带有数据类型;
基于所述数据类型,获取内存中存储的所述数据类型对应的账本MPT树;
对所述待接收数据中的值进行哈希计算,获取待接收数据的哈希值;
将所述待接收数据的键和所述待接收数据的哈希值,输入到所述账本MPT树中,形成新MPT树;
计算所述新MPT树的根节点哈希值,获取新根节点哈希值,将所述新根节点哈希值记录在一区块的区块头中,所述待接收键值对记录在对应的区块体中,生成新的区块;
将所述新的区块加入到所述目标恢复区块链中对应的位置,形成新区块链。
进一步地,在所述对所述待接收数据中的值进行哈希计算之后,所述区块链数据恢复方法还包括:
将所述待接收数据中的键和对应的哈希值作为数据存储键,待接收数据的值作为数据存储值,以键值对的形式存储在数据库中。
一种区块链数据恢复装置,包括:
待回滚高度处理模块,用于获取待回滚高度,基于所述待回滚高度查询数据库,获取所述待回滚高度对应的所有待回滚根节点哈希值;
待回滚根节点数据获取模块,用于基于所述待回滚根节点哈希值,从所述数据库中获取每一所述待回滚根节点哈希值对应的待回滚根节点数据;
待回滚MPT树处理模块,用于基于每一所述待回滚根节点数据,生成待回滚MPT树,将所述待回滚MPT树更新到内存中,将所述内存中的账本MPT树替换为待回滚MPT树;
账本状态回滚处理模块,用于基于所述待回滚MPT树,将所述区块链的账本状态回滚到对应的待回滚高度;
区块数据恢复模块,用于基于所述待回滚高度,删除原始待恢复区块链中所述待回滚高度之后的区块数据,并基于所述待回滚高度从同步的区块链节点中获取正常区块数据,恢复所述原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链;
区块链数据恢复模块,用于当获取所述目标恢复区块链后,获取基于所述待回滚MPT树恢复后的恢复MPT树,并将所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值进行比较,若所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值一致,则所述区块链数据恢复完成。
进一步地,所述待回滚MPT树处理模块包括:
子节点数据获取单元,用于基于每一所述待回滚根节点数据,递归查找所述数据库,获取所述根节点数据对应的所有子节点数据;
待回滚MPT树生成单元,用于所述根节点数据和所述子节点数据根据各自的节点属性生成待回滚MPT树。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述区块链数据恢复方法。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述区块链数据恢复方法。
本发明提供的区块链数据恢复方法、装置、设备及介质,通过获取待回滚高度,基于待回滚高度查询数据库,获取待回滚高度对应的所有待回滚根节点哈希值,基于待回滚根节点哈希值,从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据,基于每一待回滚根节点数据,生成待回滚MPT树,将待回滚MPT树更新到内存中,将内存中的账本MPT树替换为待回滚MPT树,基于待回滚MPT树,将区块链的账本状态回滚到对应的待回滚高度,基于待回滚高度,删除原始待恢复区块链中待回滚高度之后的区块数据,并基于待回滚高度从同步的区块链节点中获取正常区块数据,恢复原始待恢复区块链中待回滚高度之后的区块数据,当区块同步恢复完成后,计算恢复MPT树的根节点哈希值,并与同步的区块链节点对应的根节点哈希值进行比较,若二者一致,则区块链数据恢复完成,提高区块链中的数据恢复的速度,降低数据恢复成本。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为本发明区块链数据恢复方法的流程图。
图2为图1中步骤S30的一具体流程图。
图3为本发明区块链数据恢复方法的另一流程图。
图4为本发明区块链数据恢复方法的另一流程图。
图5为本发明区块链数据恢复方法的另一流程图
图6本发明区块链数据恢复装置的结构示意图。
图7是本发明计算机设备的一示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
本发明提供一种区块链数据恢复方法,该方法可应用于不同计算机设备中,该计算机设备包括但不限于各种个人计算机、笔记本电脑、智能手机和平板电脑。
如图1所示,本发明提供一种区块链数据恢复方法,包括如下步骤:
S10:获取待回滚高度,基于待回滚高度查询数据库,获取待回滚高度对应的所有待回滚根节点哈希值。
其中,待回滚高度指区块链的数据出现错误后确定的需要进行回滚的区块高度。数据库指存储数据存储键和数据存储值的数据库,其中,数据存储键指账本数据的键与该账本数据的哈希值共同组成的键;数据存储值指账本数据的值。根节点哈希值指根节点数据进行哈希计算得到的值。根节点数据指携带有根节点属性的账本数据,其中,节点属性指MPT树中的节点的属性,该节点属性包括根节点、叶子节点、扩展节点和分支节点。
具体地,在获取待回滚高度后,基于待回滚高度查询数据库,获取该待回滚高度对应的所有待回滚根节点哈希值。其中,待回滚根节点哈希值指待回滚高度对应的根节点哈希值。
S20:基于待回滚根节点哈希值,从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据。
具体地,在获取待回滚根节点哈希值后,根据该待回滚根节点哈希值从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据。其中,待回滚根节点数据指根节点哈希值对应的根节点数据。
S30:基于每一待回滚根节点数据,生成待回滚MPT树,将待回滚MPT树更新到内存中,将内存中的账本MPT树替换为待回滚MPT树。
具体地,在获取待回滚根节点数据后,根据该待回滚根节点数据,递归查找数据库,获取根节点数据对应的所有子节点数据,然后根节点数据和子节点数据根据各自的数据类型生成对应的MPT树,作为待回滚MPT树。其中,子节点数据指除根节点数据以外的所有节点数据。
S40:基于待回滚MPT树,将区块链的账本状态回滚到对应的待回滚高度。
其中,账本状态指用于唯一表示一区块的哈希值。可以理解地,一个区块中包括至少一个根节点哈希值。
S50:基于待回滚高度,删除原始待恢复区块链中待回滚高度之后的区块数据,并基于待回滚高度从同步的区块链节点中获取正常区块数据,恢复原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链。
其中,原始待恢复区块链指需要进行数据恢复的区块链。如一区块链A,第五个区块的数据出现错误,确定的待回滚高度为第四个区块对应的区块高度,则该区块链A为原始待恢复区块链。正常区块数据指同步的区块链节点中待回滚高度之后没有发生错误的数据。
目标恢复区块链指原始待恢复区块链中待回滚高度之后的区块数据恢复完成后生成的区块链。
S60:当获取目标恢复区块链后,获取基于待回滚MPT树恢复后的恢复MPT树,并将恢复MPT树的根节点哈希值与同步的区块链节点对应的根节点哈希值进行比较,若恢复MPT树的根节点哈希值与同步的区块链节点对应的根节点哈希值一致,则区块链数据恢复完成。
其中,恢复MPT树指待回滚MPT树中加入正常区块数据对应的哈希值后得到的MPT树,该恢复MPT树对应的数据是正确的账本数据。
进一步地,如图2所示,步骤S30中,基于每一待回滚根节点数据,生成待回滚MPT树,具体包括如下步骤:
S31:基于每一待回滚根节点数据,递归查找数据库,获取根节点数据对应的所有子节点数据。
S32:根节点数据和子节点数据根据各自的节点属性生成待回滚MPT树。
其中,节点属性指MPT树中除根节点以外的节点的属性,包括叶子节点、扩展节点和分支节点。
进一步地,如图3所示,区块链数据恢复方法还包括:
S61:获取创世块,创世块中存储有不同数据类型的账本数据,每一账本数据中包括账本数据键值对。
其中,数据类型指账本数据的类型,包括但不限于投票策略、合约源码和权限。账本数据键值对指账本数据对应的键值对。
S62:对每一账本数据的值进行哈希计算,获取账本数据对应的哈希值。
S63:将账本数据的哈希值和账本数据的键输入到MPT树模型中,生成各数据类型对应的账本MPT树。
其中,MPT树模型指没有经过任何数据处理的MPT树。
具体地,将一种数据类型的账本数据的哈希值和该账本数据的键输入到一个MPT树模型中,生成各数据类型对应的账本MPT树。其中,账本MPT树指将账本数据的哈希值和账本数据的键输入到MPT树模型中进行处理后得到的MPT树。本实施例中的账本MPT树包括但不限于投票策略MPT树、合约源码MPT树和权限MPT树。
S64:将账本MPT树的根节点哈希值存储在区块头中,账本数据键值对存储在正常区块的区块体中,生成正常区块。
其中,正常区块指区块头中存储有账本MPT树的根节点哈希值,区块体中存储有账本数据键值的区块,该正常区块对于原始待恢复区块链来说,可理解为没有发生数据错误的情况之前的区块链中的区块;对于其他数据正常的同步区块链来说,可理解为正常的同步区块链中的区块。
进一步地,如图4所示,在步骤S10之前,区块链数据恢复方法还包括:
S101:将同步的区块链的账本状态进行比较,若同步的区块链中一区块的账本状态与其他同步的区块的账本状态不相同,则将账本状态异常的区块作为异常区块,获取异常区块的高度作为异常高度。
S102:将异常高度的上一个区块高度作为待回滚高度。
进一步地,如图5所示,区块链数据恢复方法还包括:
S71:获取待接收数据,待接收数据包括待接收键值对,待接收数据携带有数据类型。
其中,待接收数据指发送给区块链的账本数据。
S72:基于数据类型,获取内存中存储的数据类型对应的账本MPT树。
具体地,在获取待接收数据后,根据待接收数据的数据类型获取该数据类型对应的账本MPT树,如待接收数据是“投票策略”的数据,则该待接收数据对应的账本MPT树为投票策略MPT树。
S73:对待接收数据中的值进行哈希计算,获取待接收数据的哈希值。
S74:将待接收数据的键和待接收数据的哈希值,输入到账本MPT树中,形成新MPT树。
具体地,在获取账本MPT树后,将待接收数据输入到账本MPT树中,账本MPT树会对待接收数据进行判断,生成新的MPT树,作为新MPT树。
S75:计算新MPT树的根节点哈希值,获取新根节点哈希值,将新根节点哈希值记录在一区块的区块头中,待接收键值对记录在对应的区块体中,生成新的区块。
S76:将新的区块加入到目标恢复区块链中对应的位置,形成新区块链。
其中,新区块链指将新根节点哈希值对应的待接收键值对存储一区块中,形成新的区块,并将该新的区块与目标恢复区块链中的最后一个区块进行连接后形成的区块链。
进一步地,在对待接收数据中的值进行哈希计算之后,区块链数据恢复方法还包括:
将待接收数据中的键和对应的哈希值作为数据存储键,待接收数据的值作为数据存储值,以键值对的形式存储在数据库中。
具体地,将账本数据中的键和对应的哈希值作为数据存储键,账本数据的值作为数据存储值,以键值对的形式存储在数据库中,可以有效避免数据库中的数据存储键出现重复的情况发生,以保证数据存储键的唯一性。
本发明提供的区块链数据恢复方法,通过获取待回滚高度,基于待回滚高度查询数据库,获取待回滚高度对应的所有待回滚根节点哈希值,基于待回滚根节点哈希值,从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据,基于每一待回滚根节点数据,生成待回滚MPT树,将待回滚MPT树更新到内存中,将内存中的账本MPT树替换为待回滚MPT树,基于待回滚MPT树,将区块链的账本状态回滚到对应的待回滚高度,基于待回滚高度,删除原始待恢复区块链中待回滚高度之后的区块数据,并基于待回滚高度从同步的区块链节点中获取正常区块数据,恢复原始待恢复区块链中待回滚高度之后的区块数据,当区块同步恢复完成后,计算恢复MPT树的根节点哈希值,并与同步的区块链节点对应的根节点哈希值进行比较,若二者一致,则区块链数据恢复完成,提高区块链中的数据恢复的速度,降低数据恢复成本。
实施例2
如图6所示,本实施例与实施例1的区别在于,一种区块链数据恢复装置,包括:
待回滚高度处理模块10,用于获取待回滚高度,基于待回滚高度查询数据库,获取待回滚高度对应的所有待回滚根节点哈希值。
待回滚根节点数据获取模块20,用于基于待回滚根节点哈希值,从数据库中获取每一待回滚根节点哈希值对应的待回滚根节点数据。
待回滚MPT树处理模块30,用于基于每一待回滚根节点数据,生成待回滚MPT树,将待回滚MPT树更新到内存中,将内存中的账本MPT树替换为待回滚MPT树。
账本状态回滚处理模块40,用于基于待回滚MPT树,将区块链的账本状态回滚到对应的待回滚高度。
区块数据恢复模块50,用于基于待回滚高度,删除原始待恢复区块链中待回滚高度之后的区块数据,并基于待回滚高度从同步的区块链节点中获取正常区块数据,恢复原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链。
区块链数据恢复模块60,用于当获取目标恢复区块链后,获取基于待回滚MPT树恢复后的恢复MPT树,并将恢复MPT树的根节点哈希值与同步的区块链节点对应的根节点哈希值进行比较,若恢复MPT树的根节点哈希值与同步的区块链节点对应的根节点哈希值一致,则区块链数据恢复完成。
进一步地,待回滚MPT树处理模块包括子节点数据获取单元和待回滚MPT树生成单元。
子节点数据获取单元,用于基于每一待回滚根节点数据,递归查找数据库,获取根节点数据对应的所有子节点数据。
待回滚MPT树生成单元,用于根节点数据和子节点数据根据各自的节点属性生成待回滚MPT树。
进一步地,区块链数据恢复装置还包括创世块获取单元、账本数据哈希值算单元、账本MPT树生成单元和正常区块生成单元。
创世块获取单元,用于获取创世块,创世块中存储有不同数据类型的账本数据,每一账本数据中包括账本数据键值对。
账本数据哈希值算单元,用于对每一账本数据的值进行哈希计算,获取账本数据对应的哈希值。
账本MPT树生成单元,用于将账本数据的哈希值和账本数据的键输入到MPT树模型中,生成各数据类型对应的账本MPT树。
正常区块生成单元,用于将账本MPT树的根节点哈希值存储在区块头中,账本数据键值对存储在正常区块的区块体中,生成正常区块。
进一步地,区块链数据恢复装置还包括异常高度确定单元和待回滚高度确定单元。
异常高度确定单元,用于将同步的区块链的账本状态进行比较,若同步的区块链中一区块的账本状态与其他同步的区块的账本状态不相同,则将账本状态异常的区块作为异常区块,获取异常区块的高度作为异常高度。
待回滚高度确定单元,用于将异常高度的上一个区块高度作为待回滚高度。
进一步地,区块链数据恢复装置还包括待接收数据获取单元、账本MPT树获取单元、待接哈希值计算单元、新MPT树生成单元、新的区块生成单元、新的区块链生成单元和待接收数据存储单元。
待接收数据获取单元,用于获取待接收数据,待接收数据包括待接收键值对,待接收数据携带有数据类型。
账本MPT树获取单元,用于基于数据类型,获取内存中存储的数据类型对应的账本MPT树。
待接哈希值计算单元,用于对待接收数据中的值进行哈希计算,获取待接收数据的哈希值。
新MPT树生成单元,用于将待接收数据的键和待接收数据的哈希值,输入到账本MPT树中,形成新MPT树。
新的区块生成单元,用于计算新MPT树的根节点哈希值,获取新根节点哈希值,将新根节点哈希值记录在一区块的区块头中,待接收键值对记录在对应的区块体中,生成新的区块。
新的区块链生成单元,用于将新的区块加入到目标恢复区块链中对应的位置,形成新区块链。
待接收数据存储单元,用于将待接收数据中的键和对应的哈希值作为数据存储键,待接收数据的值作为数据存储值,以键值对的形式存储在数据库中。
关于区块链数据恢复的具体限定可以参见上文中对于区块链数据恢复方法的限定,在此不再赘述。上述区块链数据恢复中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
实施例3
本实施例提供一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括计算机可读存储介质、内存储器。该计算机可读存储介质存储有操作系统、计算机程序和数据库。该内存储器为计算机可读存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储区块链数据恢复方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种区块链数据恢复方法。
本实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中区块链数据恢复方法的步骤,例如图1所示的步骤10至步骤S60,或者,图2-图5所示的步骤,为避免重复,这里不再赘述。或者,处理器执行计算机程序时实现上述实施例中区块链数据恢复装置的各模块/单元的功能,例如图6所示模块10至模块60的功能。为避免重复,这里不再赘述。
实施例4
本实施例,提供一计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中区块链数据恢复方法的步骤,例如图1所示的步骤S10-S60,或者,图2-图5所示的步骤,为避免重复,这里不再赘述。或者,处理器执行计算机程序时实现区块链数据恢复装置这一实施例中的各模块/单元的功能,例如图6所示的模块10至模块60的功能。为避免重复,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种区块链数据恢复方法,其特征在于,包括:
获取待回滚高度,基于所述待回滚高度查询数据库,获取所述待回滚高度对应的所有待回滚根节点哈希值;
基于所述待回滚根节点哈希值,从所述数据库中获取每一所述待回滚根节点哈希值对应的待回滚根节点数据;
基于每一所述待回滚根节点数据,生成待回滚MPT树,将所述待回滚MPT树更新到内存中,将所述内存中的账本MPT树替换为待回滚MPT树;
基于所述待回滚MPT树,将所述区块链的账本状态回滚到对应的待回滚高度;
基于所述待回滚高度,删除原始待恢复区块链中所述待回滚高度之后的区块数据,并基于所述待回滚高度从同步的区块链节点中获取正常区块数据,恢复所述原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链;
当获取所述目标恢复区块链后,获取基于所述待回滚MPT树恢复后的恢复MPT树,并将所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值进行比较,若所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值一致,则所述区块链数据恢复完成;
待回滚高度指区块链的数据出现错误后确定的需要进行回滚的区块高度;
正常区块数据指同步的区块链节点中待回滚高度之后没有发生错误的数据;
恢复MPT树指待回滚MPT树中加入正常区块数据对应的哈希值后得到的MPT树,该恢复MPT树对应的数据是正确的账本数据;
所述基于每一所述待回滚根节点数据,生成待回滚MPT树,包括:基于每一所述待回滚根节点数据,递归查找所述数据库,获取所述根节点数据对应的所有子节点数据;
所述根节点数据和所述子节点数据根据各自的节点属性生成待回滚MPT树。
2.根据权利要求1所述的一种区块链数据恢复方法,其特征在于,所述区块链数据恢复方法还包括:获取创世块,所述创世块中存储有不同数据类型的账本数据,每一所述账本数据中包括账本数据键值对;
对每一所述账本数据的值进行哈希计算,获取所述账本数据对应的哈希值;
将所述账本数据的哈希值和所述账本数据的键输入到MPT树模型中,生成各数据类型对应的账本MPT树;
将所述账本MPT树的根节点哈希值存储在区块头中,所述账本数据键值对存储在区块体中,生成正常区块。
3.根据权利要求1所述的一种区块链数据恢复方法,其特征在于,所述区块链数据恢复方法还包括:将同步的区块链的账本状态进行比较,若所述同步的区块链中一区块的账本状态与其他同步的区块的账本状态不相同,则将账本状态异常的所述区块作为异常区块,获取所述异常区块的高度作为异常高度;
将所述异常高度的上一个区块高度作为待回滚高度。
4.根据权利要求2所述的一种区块链数据恢复方法,其特征在于,所述区块链数据恢复方法还包括:获取待接收数据,所述待接收数据包括待接收键值对,所述待接收数据携带有数据类型;
基于所述数据类型,获取内存中存储的所述数据类型对应的账本MPT树;
对所述待接收数据中的值进行哈希计算,获取待接收数据的哈希值;
将所述待接收数据的键和所述待接收数据的哈希值,输入到所述账本MPT树中,形成新MPT树;
计算所述新MPT树的根节点哈希值,获取新根节点哈希值,将所述新根节点哈希值记录在一区块的区块头中,所述待接收键值对记录在对应的区块体中,生成新的区块;
将所述新的区块加入到所述目标恢复区块链中对应的位置,形成新区块链。
5.根据权利要求4所述的一种区块链数据恢复方法,其特征在于,在所述对所述待接收数据中的值进行哈希计算之后,所述区块链数据恢复方法还包括:将所述待接收数据中的键和对应的哈希值作为数据存储键,待接收数据的值作为数据存储值,以键值对的形式存储在数据库中。
6.一种区块链数据恢复装置,其特征在于,包括:
待回滚高度处理模块,用于获取待回滚高度,基于所述待回滚高度查询数据库,获取所述待回滚高度对应的所有待回滚根节点哈希值;
待回滚根节点数据获取模块,用于基于所述待回滚根节点哈希值,从所述数据库中获取每一所述待回滚根节点哈希值对应的待回滚根节点数据;
待回滚MPT树处理模块,用于基于每一所述待回滚根节点数据,生成待回滚MPT树,将所述待回滚MPT树更新到内存中,将所述内存中的账本MPT树替换为待回滚MPT树;
账本状态回滚处理模块,用于基于所述待回滚MPT树,将所述区块链的账本状态回滚到对应的待回滚高度;
区块数据恢复模块,用于基于所述待回滚高度,删除原始待恢复区块链中所述待回滚高度之后的区块数据,并基于所述待回滚高度从同步的区块链节点中获取正常区块数据,恢复所述原始待恢复区块链中待回滚高度之后的区块数据,获取目标恢复区块链;
区块链数据恢复模块,用于当获取所述目标恢复区块链后,获取基于所述待回滚MPT树恢复后的恢复MPT树,并将所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值进行比较,若所述恢复MPT树的根节点哈希值与所述同步的区块链节点对应的根节点哈希值一致,则所述区块链数据恢复完成;
待回滚高度指区块链的数据出现错误后确定的需要进行回滚的区块高度;
正常区块数据指同步的区块链节点中待回滚高度之后没有发生错误的数据;
恢复MPT树指待回滚MPT树中加入正常区块数据对应的哈希值后得到的MPT树,该恢复MPT树对应的数据是正确的账本数据;
所述待回滚MPT树处理模块包括:子节点数据获取单元,用于基于每一所述待回滚根节点数据,递归查找所述数据库,获取所述根节点数据对应的所有子节点数据;
待回滚MPT树生成单元,用于所述根节点数据和所述子节点数据根据各自的节点属性生成待回滚MPT树。
7.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至
5任一项所述区块链数据恢复方法。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述区块链数据恢复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010505215.4A CN111651300B (zh) | 2020-06-05 | 2020-06-05 | 一种区块链数据恢复方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010505215.4A CN111651300B (zh) | 2020-06-05 | 2020-06-05 | 一种区块链数据恢复方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111651300A CN111651300A (zh) | 2020-09-11 |
CN111651300B true CN111651300B (zh) | 2023-03-21 |
Family
ID=72347179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010505215.4A Active CN111651300B (zh) | 2020-06-05 | 2020-06-05 | 一种区块链数据恢复方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111651300B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111930753B (zh) * | 2020-09-15 | 2021-01-22 | 腾讯科技(深圳)有限公司 | 一种数据找回方法、装置、电子设备及存储介质 |
CN112650733A (zh) * | 2020-12-28 | 2021-04-13 | 杭州趣链科技有限公司 | 一种智能合约状态数据的处理方法、系统与装置 |
CN113037503B (zh) * | 2021-05-26 | 2021-10-15 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN113364847B (zh) * | 2021-05-31 | 2022-07-19 | 新疆大学 | 区块链节点的数据同步方法、装置及存储介质 |
CN116126971A (zh) * | 2022-12-29 | 2023-05-16 | 蚂蚁区块链科技(上海)有限公司 | 区块链系统中的数据管理方法、装置和存储节点 |
CN116739813B (zh) * | 2023-08-15 | 2023-10-20 | 湖南奔普智能科技有限公司 | 一种基于哈希算法的病区结算对账方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409889A (zh) * | 2018-11-13 | 2019-03-01 | 杭州秘猿科技有限公司 | 一种区块链中的区块确定方法、装置及电子设备 |
CN110175188A (zh) * | 2019-05-31 | 2019-08-27 | 杭州复杂美科技有限公司 | 一种区块链状态数据缓存和查询方法、设备及存储介质 |
CN110275884A (zh) * | 2019-05-31 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 数据存储方法及节点 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11487749B2 (en) * | 2018-05-30 | 2022-11-01 | Aenco Technologies Limited | Method and system for verifying and maintaining integrity of data transactions using distributed ledger |
AU2019203850B2 (en) * | 2019-03-04 | 2021-09-16 | Advanced New Technologies Co., Ltd. | Constructing blockchain world state merkle patricia trie subtree |
CN109933592B (zh) * | 2019-03-22 | 2021-06-01 | 杭州复杂美科技有限公司 | 数据存储方法、数据回滚方法、设备和存储介质 |
CN110471795B (zh) * | 2019-07-31 | 2020-10-02 | 阿里巴巴集团控股有限公司 | 区块链状态数据恢复方法及装置、电子设备 |
CN110442577A (zh) * | 2019-07-15 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种状态数据存储、查询和管理方法、设备及存储介质 |
CN110457319B (zh) * | 2019-07-31 | 2020-09-08 | 阿里巴巴集团控股有限公司 | 区块链状态数据存储方法及装置、电子设备 |
CN110493325B (zh) * | 2019-07-31 | 2020-12-29 | 创新先进技术有限公司 | 区块链状态数据同步方法及装置、电子设备 |
CN110928952A (zh) * | 2019-11-28 | 2020-03-27 | 北京艾摩瑞策科技有限公司 | 基于区块链的数据同步方法及装置 |
CN111008201B (zh) * | 2020-03-09 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 并行修改和读取状态树的方法和装置 |
CN111160913B (zh) * | 2020-04-02 | 2020-07-17 | 支付宝(杭州)信息技术有限公司 | 区块链账户余额的存证、恢复方法及装置 |
-
2020
- 2020-06-05 CN CN202010505215.4A patent/CN111651300B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409889A (zh) * | 2018-11-13 | 2019-03-01 | 杭州秘猿科技有限公司 | 一种区块链中的区块确定方法、装置及电子设备 |
CN110175188A (zh) * | 2019-05-31 | 2019-08-27 | 杭州复杂美科技有限公司 | 一种区块链状态数据缓存和查询方法、设备及存储介质 |
CN110275884A (zh) * | 2019-05-31 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 数据存储方法及节点 |
Also Published As
Publication number | Publication date |
---|---|
CN111651300A (zh) | 2020-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111651300B (zh) | 一种区块链数据恢复方法、装置、设备及介质 | |
CN108805570B (zh) | 数据处理方法、装置及存储介质 | |
CN110493325B (zh) | 区块链状态数据同步方法及装置、电子设备 | |
US10956444B2 (en) | Block chain state data synchronization method, apparatus, and electronic device | |
CN111061769B (zh) | 一种区块链系统的共识方法及相关设备 | |
KR102455884B1 (ko) | 데이터 처리 방법 및 장치, 컴퓨터 디바이스, 및 저장 매체 | |
CN111630830A (zh) | 账户模型下的分布式区块链数据存储 | |
CN111630507A (zh) | 账户模型下的分布式区块链数据存储 | |
CN111245548A (zh) | 基于时间戳的数据同步方法、装置和计算机设备 | |
CN110443712B (zh) | 合约冲突检测方法、装置、可读存储介质和计算机设备 | |
CN110489421B (zh) | 数据存储方法、装置、计算机可读存储介质和计算机设备 | |
Guo et al. | Design and optimization for storage mechanism of the public blockchain based on redundant residual number system | |
CN110570311B (zh) | 区块链的共识方法、装置及设备 | |
CN112579602A (zh) | 多版本数据存储方法、装置、计算机设备及存储介质 | |
US11782793B2 (en) | Blockchain-based data snapshot method and apparatus, and computer-readable storage medium | |
CN108399533B (zh) | 交易处理方法、装置、计算机设备和存储介质 | |
US20160232178A1 (en) | Transaction log for audit purposes | |
CN104778410B (zh) | 一种应用程序完整性验证方法 | |
JP2022547013A (ja) | Pbftアルゴリズムに基づいて改善された単一ノードの異常能動的回復方法、システム、設備および媒体 | |
CN110795171A (zh) | 业务数据处理方法、装置、计算机设备及存储介质 | |
CN111177121A (zh) | 订单数据反馈方法、装置、计算机设备及存储介质 | |
CN114936256A (zh) | 在区块链中执行交易的方法和区块链节点 | |
CN113515322B (zh) | 应用程序加载方法、装置、计算机设备和可读存储介质 | |
CN113505024B (zh) | 联盟链的数据处理方法、装置、电子设备及存储介质 | |
CN111386519A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |