CN112579343B - 区块链节点数据的恢复方法及装置 - Google Patents

区块链节点数据的恢复方法及装置 Download PDF

Info

Publication number
CN112579343B
CN112579343B CN201910922791.6A CN201910922791A CN112579343B CN 112579343 B CN112579343 B CN 112579343B CN 201910922791 A CN201910922791 A CN 201910922791A CN 112579343 B CN112579343 B CN 112579343B
Authority
CN
China
Prior art keywords
data
node
time period
update
update 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.)
Active
Application number
CN201910922791.6A
Other languages
English (en)
Other versions
CN112579343A (zh
Inventor
董振华
余珊
朱志辉
刘立超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910922791.6A priority Critical patent/CN112579343B/zh
Publication of CN112579343A publication Critical patent/CN112579343A/zh
Application granted granted Critical
Publication of CN112579343B publication Critical patent/CN112579343B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书一个或多个实施例提供一种区块链节点数据的恢复方法及装置,该方法可以包括:源节点接收来自待恢复节点的数据恢复请求;所述源节点向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。

Description

区块链节点数据的恢复方法及装置
技术领域
本说明书一个或多个实施例涉及终端技术领域,尤其涉及一种区块链节点数据的恢复方法及装置。
背景技术
区块链技术(也被称之为,分布式账本技术)是一种去中性化的分布式数据库技术,具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链节点数据的恢复方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链节点数据的恢复方法,包括:
源节点接收来自待恢复节点的数据恢复请求;
所述源节点向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链节点数据的恢复方法,包括:
待恢复节点向源节点发起数据恢复请求;
所述待恢复节点接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;
所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第三方面,提出了一种区块链节点数据的恢复方法,包括:
待恢复节点分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求;
所述待恢复节点并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更行数据;
所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第四方面,提出了一种区块链节点数据的恢复装置,包括:
接收单元,接收来自待恢复节点的数据恢复请求;
返回单元,向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第五方面,提出了一种区块链节点数据的恢复装置,包括:
请求单元,向源节点发起数据恢复请求;
接收单元,接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;
更新单元,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第六方面,提出了一种区块链节点数据的恢复装置,包括:
请求单元,分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求;
接收单元,并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更行数据;
更新单元,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
根据本说明书一个或多个实施例的第七方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第八方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
根据本说明书一个或多个实施例的第九方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第二方面或第三方面所述的方法。
根据本说明书一个或多个实施例的第十方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第二方面或第三方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种区块链网络的应用环境的示意图。
图2是一示例性实施例提供的一种区块链网络的概念架构的示意图。
图3是一示例性实施例提供的一种源节点侧的区块链节点数据的恢复方法的流程图。
图4a是一示例性实施例提供的一种待恢复节点侧的区块链节点数据的恢复方法的流程图。
图4b是一示例性实施例提供的另一种待恢复节点侧的区块链节点数据的恢复方法的流程图。
图5是一示例性实施例提供的一种恢复区块链节点数据的交互示意图。
图6是一示例性实施例提供的一种节点之间建立数据连接的示意图。
图7是一示例性实施例提供的一种源节点侧的设备的结构示意图。
图8是一示例性实施例提供的一种源节点侧的区块链节点数据的恢复装置的框图。
图9是一示例性实施例提供的一种待恢复节点侧的设备的结构示意图。
图10是一示例性实施例提供的一种待恢复节点侧的区块链节点数据的恢复装置的框图。
图11是一示例性实施例提供的另一种待恢复节点侧的区块链节点数据的恢复装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种区块链网络的示例环境的示意图。如图1所示,示例环境100允许实体参与区块链网络102。区块链网络102可以为公有类型、私有类型或联盟类型的区块链网络。示例环境100可以包括计算设备104、106、108、110、112和网络114;在一实施例中,网络114可以包括局域网(Local Area Network,LAN)、广域网(Wide AreaNetwork,WAN)、因特网或其组合,并连接至网站、用户设备(例如计算设备)和后端系统。在一实施例中,可以通过有线和/或无线通信方式访问网络114。
在某些情况下,计算设备106、108可以是云计算系统的节点(未显示),或者每个计算设备106、108可以是单独的云计算系统,包括由网络互连并作为分布式处理系统工作的多台计算机。
在一实施例中,计算设备104~108可以运行任何适当的计算系统,使其能够作为区块链网络102中的节点;例如,计算设备104~108可以包括但不限于服务器、台式计算机、笔记本电脑、平板电脑计算设备和智能手机。在一实施例中,计算设备104~108可以归属于相关实体并用于实现相应的服务,例如该服务可以用于对某一实体或多个实体之间的交易进行管理。
在一实施例中,计算设备104~108分别存储有区块链网络102对应的区块链账本。计算设备104可以是(或包含)用于提供浏览器功能的网络服务器,该网络服务器可基于网络114提供与区块链网络102相关的可视化信息。在一些情况下,计算设备104可以不参与区块验证,而是监控区块链网络102以确定其他节点(譬如可以包括计算设备106-108)何时达成共识,并据此生成相应的区块链可视化用户界面。
在一实施例中,计算设备104可接收客户端设备(例如计算设备110或计算设备112)针对区块链可视化用户界面发起的请求。在一些情况下,区块链网络102的节点也可以作为客户端设备,比如计算设备108的用户可以使用运行在计算设备108上的浏览器向计算设备104发送上述请求。
响应于上述请求,计算设备104可以基于存储的区块链账本生成区块链可视化用户界面(如网页),并将生成的区块链可视化用户界面发送给请求的客户端设备。如果区块链网络102是私有类型或联盟类型的区块链网络,对区块链可视化用户界面的请求可以包括用户授权信息,在生成区块链可视化用户界面并发送给请求的客户端设备之前,可以由计算设备104对该用户授权信息进行验证,并在验证通过后返回相应的区块链可视化用户界面。
区块链可视化用户界面可以显示在客户端设备上(例如可显示在图1所示的用户界面116中)。当区块链账本发生更新时,用户界面116的显示内容也可以随之发生更新。此外,用户与用户界面116的交互可能导致对其他用户界面的请求,例如显示区块列表、区块详情、交易列表、交易详情、账户列表、账户详情、合约列表、合约详情或者用户对区块链网络实施搜索而产生的搜索结果页面等。
图2是一示例性实施例提供的一种区块链网络的概念架构的示意图。如图2所示,该概念架构200包括实体层202、托管服务层204和区块链网络层206。例如,实体层202可以包括三个实体:实体1、实体2和实体3,每个实体都有各自的交易管理系统208。
在一实施例中,托管服务层204可以包括每个事务管理系统208对应的接口210。例如,各个事务管理系统208使用协议(例如超文本传输协议安全(HTTPS)等)通过网络(例如图1中的网络114)与各自的接口210通信。在一些例子中,每个接口210可以提供各自对应的交易管理系统208与区块链网络层206之间的通信连接;更具体地,接口210可与区块链网络层206的区块链网络212通信。在一些例子中,接口210和区块链网络层206之间的通信可以使用远程过程调用(Remote Procedure Calls,RPCs)而实现。在一些例子中,接口210可以向交易管理系统208提供用于访问区块链网络212的API接口。
如本文所述,区块链网络212以对等网络的形式提供,该对等网络包括多个节点214,这些节点214分别用于对块链数据所形成的区块链账本216进行持久化;其中,图2中仅示出了一份区块链账本216,但区块链网络212中可以存在多份区块链账本216或其副本,比如每一节点214可以分别维护一份区块链账本216或其副本。
需要指出的是:在本说明书中所描述的交易(transaction),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。其中,区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
图3是一示例性实施例提供的一种源节点侧的区块链节点数据的恢复方法的流程图。如图3所示,该方法应用于作为源节点的区块链节点,可以包括以下步骤:
步骤302,源节点接收来自待恢复节点的数据恢复请求。
在一实施例中,源节点和待恢复节点均为区块链网络中的任意区块链节点。基于区块链网络的分布式特性,每个区块链节点上都应当存储有全量且一致的账本数据、状态数据。但是,待恢复节点可能由于一些原因而存在数据的缺失,比如该待恢复节点可能为新加入节点或者由于故障等原因而临时下线并再上线,那么该待恢复节点可以根据源节点上存储的账本数据和状态数据实现数据恢复,使得该待恢复节点能够恢复至存储有全量的账本数据和状态数据。例如,待恢复节点可以将区块链网络中正常运行的任意节点选取为上述的源节点。为了提升数据交互效率和成功率,待恢复节点可以选取距离自身相对更近、链路状况相对更好的区块链节点,以作为上述的源节点。
其中,本说明书中的区块链网络可以为公有链(Public Blockchain)、私有链(Private Blockchain)或联盟链(Consortium Blockchain),甚至采用私有链+联盟链、联盟链+公有链等组合形式。公有链以比特币、以太坊为代表,在上述类型中的去中心化程度最高;加入公有链的节点可以读取链上的数据记录、参与交易以及竞争新区块的记账权等,而且各节点可自由加入以及退出区块链网络,譬如上述的待恢复节点可以为公有链中临时加入或退出后重新加入的节点。私有链的情况则与公有链相反,私有链的写入权限由某个组织或者机构控制,数据读取权限受组织规定;换言之,私有链可以为一个弱中心化系统,参与节点具有严格限制且少,适合于特定机构内部使用。而联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。例如,联盟链中各个节点通常有与之相对应的实体机构或者组织,各个节点通过授权加入网络并组成利益相关联盟,共同维护区块链运行。因此,联盟链所含的节点通常在创建该联盟链之初就已经确定,而甚少存在临时加入的节点,更多节点可能由于维护或故障而临时下线后重新上线,此时可以通过本说明书的技术方案实现数据的快速恢复。
步骤304,所述源节点向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
在一实施例中,由于每个区块链节点分别存储全量的区块数据,而区块中包含区块链网络上全量的交易数据,相当于区块链网络中的所有区块链节点之间统一维护了内容一致的区块链账本,该区块链账本中记录有全量的账本数据。换言之,区块链节点维护的账本数据可以理解为区块链网络中呈链式结构的区块数据。
在一实施例中,基于打包至区块的交易,可以实现相关的交易目的。例如,在存证场景下,基于交易内容可以获知存证内容、存证内容的上传用户等信息;再例如,在资产分配场景下,基于交易内容可以获知资产数额、资产分配的目标对象等信息。而交易完成后,可能导致相关状态变量的取值发生变化;比如在上述的资产分配场景下,目标对象所持有的资产可能在交易完成后增加相应数额。但是,上述的账本数据中仅记录区块链网络上提交的交易本身,因而对于交易所导致的状态变量的取值变化,采用状态数据进行记录。
在一实施例中,交易可以用于实现相对简单的处理逻辑,比如存证、转账等,此时可以在交易中表明存在内容或者转账金额、转账双方的信息等,即可完成相关交易。
在一实施例中,交易可以用于实现相对复杂的处理逻辑,比如在某一或某些条件被满足的情况下,实施相应的存证或转账等操作。这里,对于条件的设定、条件是否被满足的判断等,通常可以基于智能合约来实现。以前述的以太坊为例:以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM为图灵完备的虚拟机,使其能够用于实现智能合约中定义的各种复杂逻辑;换言之,通过在以太坊中发布和调用智能合约,并在EVM上运行智能合约中定义的代码,可以实现相应的功能逻辑。
假定某一用户将一个包含创建智能合约信息的交易发送到以太坊网络,该交易的data字段保存有智能合约的代码(基于高级语言的代码,或者编译后的字节码),且该交易的to字段为一个空的账户。比如,由以太坊网络中的节点1的EVM执行该交易并生成对应的合约实例;然后,在节点间通过共识机制达成一致后,即可完成对该智能合约的创建。智能合约创建后,以太坊区块链上出现一个与该智能合约对应的合约账户,且智能合约的代码和账户存储(Storage)将保存在该合约账户中。该合约账户拥有一个特定的地址,使得后续用户可以通过该地址来调用相应的智能合约,从而实现相应的功能逻辑。
其中,智能合约的代码中可以定义若干状态变量,在智能合约被调用后,所涉及的状态变量可能发生取值变化,那么状态变量的取值可以被记录在上述的状态数据中。仍以上述的以太坊为例,以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等,譬如Solidity语言目前主要支持的状态变量类型可以是:Booleans,Integers,Fixed PointNumbers,Address,Fixed-size byte array,Address Literals,Rational and integerLiterals,String Literals,Hexadecimal Literals,Enums等,而对于其他语言或者其他区块链网络而言,则可能存在一定差异,本说明书并不对此进行限制。
可见,状态数据中涉及到的状态变量的取值,与区块链网络中被提交和执行的交易相关,又由于各个区块链节点上存储有全量且一致的账本数据,因而使得各个区块链节点必然维护有内容相同的状态数据,或者虽然状态数据本身在记录形式等方面存在差异,但能够确保各个状态变量的取值相同。
在一实施例中,源节点可以在收到数据恢复请求后,基于该数据恢复请求生成上述的第一更新数据、第二更新数据。或者,源节点可以并非基于收到的数据恢复请求而生成第一更新数据、第二更新数据,而是独立生成第一更新数据、第二更新数据,并基于收到的数据恢复请求而向待恢复节点发送第一更新数据、第二更新数据。
在一实施例中,通过由源节点向待恢复节点并行地返回第一更新数据和第二更新数据,使得待恢复节点无需根据返回的第一更新数据生成相应的状态数据及更新本地状态数据,而是可以直接根据第二更新数据对本地状态数据进行更新,使得对于本地账本数据和本地状态数据的更新操作可以并行实施、而非串行实施,因而能够提升待恢复节点的数据恢复效率,使得待恢复节点尽快由服务不可用状态(在数据恢复之前处于服务不可用状态)切换至服务可用状态,以恢复提供相关服务。
在一实施例中,当待恢复节点为新加入的区块链节点时,该待恢复节点原本未记录账本数据和状态数据,因而通过第一更新数据获取源节点上存储的全量账本数据、通过第二更新数据获取源节点上存储的全量状态数据。或者,当待恢复节点为临时下线并重新上线的区块链节点时,该待恢复节点上已经存储有部分账本数据和部分状态数据,因而通过第一更新数据从源节点处增量获取其他的账本数据、通过第二更新数据从源节点处增量获取其他的全量状态数据,当然待恢复节点也可以放弃自身原本存储的部分账本数据和部分状态数据,而从源节点处获取全量账本数据和全量状态数据。
在一实施例中,待恢复节点单次从源节点处获得第一更新数据、第二更新数据并对本地账本数据、本地状态数据进行更新后,就可能完成了与源节点之间的数据同步,使得待恢复节点上拥有了全量账本数据和全量状态数据,即待恢复节点完成数据恢复,可以切换至服务可用状态,并且该待恢复节点可以作为其他需要数据恢复的节点对应的源节点。或者,待恢复节点可以分多次从源节点处获取第一更新数据、第二更新数据,每次获得的第一更新数据仅包含部分账本数据、第二更新数据仅包含部分状态数据,并最终完成与源节点之间的数据同步;其中,需要多次获取数据的原因,可能是由于待恢复节点原本就只请求了部分数据,或者虽然待恢复节点请求了源节点处存储的所有数据,但是源节点在生成并返回第一更新数据、第二更新数据的过程中,区块链网络中出现了新的交易并相应产生了新的账本数据、状态数据,使得待恢复节点需要重新请求这些新产生的数据,直至待恢复节点与源节点之间实现数据同步。
在一实施例中,待恢复节点可以在数据恢复请求中指示区块高度区间,使得源节点根据对应于该区块高度区间的账本数据而生成第一更新数据。例如,区块高度区间的上边界可以为区块链的最新区块高度(待恢复节点可以向源节点或其他节点询问,以确定该最新区块高度)或者待恢复节点所设定的任意区块高度,而下边界可以根据待恢复节点处存储的本地账本数据的最大区块高度确定:当该最大区块高度为H时,下边界可以为H+1;当不存在本地账本数据(即待恢复节点为新加入的区块链节点且尚未与源节点进行过账本数据的恢复)时,下边界可以为创世块的区块高度。
在一实施例中,数据恢复请求中可以包含待恢复节点设定的时间段,使得源节点可以根据状态变量在该时间段内的取值,生成上述的第二更新数据。相应地,待恢复节点根据第二更新数据对本地状态数据进行更新后,状态变量的取值可以被更新为处于该时间段时的取值。
在一实施例中,状态变量在上述的时间段内可能存在多个取值。例如,状态变量balance在该时间段内的取值可能首先从a更新为b,然后由b更新为c,使得状态变量balance在该时间段内存在相应的3条取值记录,分别为:balance=a、balance=b、balance=c。在一种情况下,第二更新数据中可以包含上述的3条取值记录,使得待恢复节点根据这3条取值记录一次将状态变量balance的取值设定为a、b、c,且状态变量balance在上述时间段内的最终取值为c。在另一种情况下,第二更新数据中包含某一状态变量的取值时,该取值为相应状态变量在上述时间段内的最新取值,比如当状态变量存在上述的3条取值记录时,第二更新数据仅需要包含最新取值对应的取值记录“balance=c”、无需包含取值a和b的前2条取值记录,使得待恢复节点仅需要对状态变量balance的取值实施一次设置操作,即可确保状态变量balance在上述时间段内的最终取值为c,从而省去了基于前2条取值记录的取值设置操作,有助于进一步提升数据恢复效率。
在一实施例中,虽然源节点处维护有全量状态数据,但是在待恢复节点所设定的上述时间段内,可能只有部分状态变量发生取值更新,这里的取值更新可以包括创建状态变量时的初始赋值、状态变量参与交易执行后所导致的取值变化等,而其他状态变量的取值在上述时间段内并未发生更新。在一种情况下,第二更新数据可以包括上述时间段内已存在的所有状态变量的取值数据,而无论该状态变量是否在上述时间段内发生取值更新;那么,当待恢复节点多次向源节点请求第二更新数据时,部分第二更新数据中可能包含取值未发生变化的状态变量对应的取值记录,比如第一次请求的第二更新数据中包含取值记录为balance=a、第二次请求的第二更新数据中仍然包含取值记录balance=a,那么第二次请求的第二更新数据中的“balance=a”可能并未对待恢复节点的数据恢复起到实质作用。在另一种情况下,第二更新数据可以包含在上述时间段内发生取值更新的状态变量的取值,比如当状态变量balance的取值在上述时间段未发生更新时,第二更新数据中无需包含对应于该状态变量balance的取值记录,从而在确保待恢复节点能够完成数据恢复的同时,可以尽量减小第二更新数据的数据量,从而减小源节点与待恢复节点之间的数据传输量,有助于加快数据传输速度、提升待恢复节点的恢复效率。
在一实施例中,源节点可以通过状态数据库来维护状态变量的取值,且该状态数据库可以仅维护各个状态变量的最新取值。因此,当待恢复节点设定的时间段为某一历史时间段时,状态变量在该历史时间段的取值可能区别于最新取值,此时源节点可以通过读取日志数据中的状态变量更新记录,以确定第二更新数据包含的状态变量的取值。其中,第二更新数据可以包括上述时间段内已存在的所有状态变量的取值数据,源节点可以通过读取日志数据中的状态变量更新记录,以确定出所有状态变量;或者,当第二更新数据仅包含在上述时间段内发生取值更新的状态变量对应的取值记录时,源节点可以通过读取日志数据中的状态变量更新记录,以确定出第二更新数据所需包含的状态变量,即在上述时间段内发生取值更新的状态变量。
在一实施例中,数据恢复请求中可以包含待恢复节点设定的时间段和对应于该时间段的区块高度区间,即时间段与区块高度区间之间存在时间维度的映射关系,使得第一更新数据对应于区块高度区间、第二更新数据对应于时间段,以确保对待恢复节点上的本地账本数据和本地状态数据实现同步更新。尤其是,当待恢复节点需要多次从源节点处获取第一更新数据和第二更新数据时,需要相应地向源节点提供多个时间段和区块高度区间,而基于时间段与区块高度区间之间的映射关系,可以简化对时间段和区块高度区间的设定,降低出错概率。
相应地,图4a是一示例性实施例提供的一种待恢复节点侧的区块链节点数据的恢复方法的流程图。如图4a所示,该方法应用于作为待恢复节点的区块链节点,可以包括以下步骤:
步骤402a,待恢复节点向源节点发起数据恢复请求。
在一实施例中,源节点和待恢复节点均为区块链网络中的任意区块链节点。基于区块链网络的分布式特性,每个区块链节点上都应当存储有全量且一致的账本数据、状态数据。但是,待恢复节点可能由于一些原因而存在数据的缺失,比如该待恢复节点可能为新加入节点或者由于故障等原因而临时下线并再上线,那么该待恢复节点可以根据源节点上存储的账本数据和状态数据实现数据恢复,使得该待恢复节点能够恢复至存储有全量的账本数据和状态数据。例如,待恢复节点可以将区块链网络中正常运行的任意节点选取为上述的源节点。为了提升数据交互效率和成功率,待恢复节点可以选取距离自身相对更近、链路状况相对更好的区块链节点,以作为上述的源节点。
其中,本说明书中的区块链网络可以为公有链、私有链或联盟链,甚至采用私有链+联盟链、联盟链+公有链等组合形式。公有链以比特币、以太坊为代表,在上述类型中的去中心化程度最高;加入公有链的节点可以读取链上的数据记录、参与交易以及竞争新区块的记账权等,而且各节点可自由加入以及退出区块链网络,譬如上述的待恢复节点可以为公有链中临时加入或退出后重新加入的节点。私有链的情况则与公有链相反,私有链的写入权限由某个组织或者机构控制,数据读取权限受组织规定;换言之,私有链可以为一个弱中心化系统,参与节点具有严格限制且少,适合于特定机构内部使用。而联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。例如,联盟链中各个节点通常有与之相对应的实体机构或者组织,各个节点通过授权加入网络并组成利益相关联盟,共同维护区块链运行。因此,联盟链所含的节点通常在创建该联盟链之初就已经确定,而甚少存在临时加入的节点,更多节点可能由于维护或故障而临时下线后重新上线,此时可以通过本说明书的技术方案实现数据的快速恢复。
步骤404a,所述待恢复节点接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据。
在一实施例中,由于每个区块链节点分别存储全量的区块数据,而区块中包含区块链网络上全量的交易数据,相当于区块链网络中的所有区块链节点之间统一维护了内容一致的区块链账本,该区块链账本中记录有全量的账本数据。换言之,区块链节点维护的账本数据可以理解为区块链网络中呈链式结构的区块数据。
在一实施例中,基于打包至区块的交易,可以实现相关的交易目的。例如,在存证场景下,基于交易内容可以获知存证内容、存证内容的上传用户等信息;再例如,在资产分配场景下,基于交易内容可以获知资产数额、资产分配的目标对象等信息。而交易完成后,可能导致相关状态变量的取值发生变化;比如在上述的资产分配场景下,目标对象所持有的资产可能在交易完成后增加相应数额。但是,上述的账本数据中仅记录区块链网络上提交的交易本身,因而对于交易所导致的状态变量的取值变化,采用状态数据进行记录。
在一实施例中,交易可以用于实现相对简单的处理逻辑,比如存证、转账等,此时可以在交易中表明存在内容或者转账金额、转账双方的信息等,即可完成相关交易。
在一实施例中,交易可以用于实现相对复杂的处理逻辑,比如在某一或某些条件被满足的情况下,实施相应的存证或转账等操作。这里,对于条件的设定、条件是否被满足的判断等,通常可以基于智能合约来实现。以前述的以太坊为例:以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM为图灵完备的虚拟机,使其能够用于实现智能合约中定义的各种复杂逻辑;换言之,通过在以太坊中发布和调用智能合约,并在EVM上运行智能合约中定义的代码,可以实现相应的功能逻辑。
假定某一用户将一个包含创建智能合约信息的交易发送到以太坊网络,该交易的data字段保存有智能合约的代码(基于高级语言的代码,或者编译后的字节码),且该交易的to字段为一个空的账户。比如,由以太坊网络中的节点1的EVM执行该交易并生成对应的合约实例;然后,在节点间通过共识机制达成一致后,即可完成对该智能合约的创建。智能合约创建后,以太坊区块链上出现一个与该智能合约对应的合约账户,且智能合约的代码和账户存储(Storage)将保存在该合约账户中。该合约账户拥有一个特定的地址,使得后续用户可以通过该地址来调用相应的智能合约,从而实现相应的功能逻辑。
其中,智能合约的代码中可以定义若干状态变量,在智能合约被调用后,所涉及的状态变量可能发生取值变化,那么状态变量的取值可以被记录在上述的状态数据中。仍以上述的以太坊为例,以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等,譬如Solidity语言目前主要支持的状态变量类型可以是:Booleans,Integers,Fixed PointNumbers,Address,Fixed-size byte array,Address Literals,Rational and integerLiterals,String Literals,Hexadecimal Literals,Enums等,而对于其他语言或者其他区块链网络而言,则可能存在一定差异,本说明书并不对此进行限制。
可见,状态数据中涉及到的状态变量的取值,与区块链网络中被提交和执行的交易相关,又由于各个区块链节点上存储有全量且一致的账本数据,因而使得各个区块链节点必然维护有内容相同的状态数据,或者虽然状态数据本身在记录形式等方面存在差异,但能够确保各个状态变量的取值相同。
在一实施例中,通过由源节点向待恢复节点并行地返回第一更新数据和第二更新数据,使得待恢复节点无需根据返回的第一更新数据生成相应的状态数据及更新本地状态数据,而是可以直接根据第二更新数据对本地状态数据进行更新,使得对于本地账本数据和本地状态数据的更新操作可以并行实施、而非串行实施,因而能够提升待恢复节点的数据恢复效率,使得待恢复节点尽快由服务不可用状态(在数据恢复之前处于服务不可用状态)切换至服务可用状态,以恢复提供相关服务。
在一实施例中,第一更新数据、第二更新数据可由源节点在收到数据恢复请求后,基于该数据恢复请求而生成。或者,第一更新数据、第二更新数据并非源节点基于收到的数据恢复请求而生成,而是独立生成第一更新数据、第二更新数据,并基于收到的数据恢复请求而向待恢复节点返回第一更新数据、第二更新数据。
步骤406a,所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
在一实施例中,当待恢复节点为新加入的区块链节点时,该待恢复节点原本未记录账本数据和状态数据,因而通过第一更新数据获取源节点上存储的全量账本数据、通过第二更新数据获取源节点上存储的全量状态数据。或者,当待恢复节点为临时下线并重新上线的区块链节点时,该待恢复节点上已经存储有部分账本数据和部分状态数据,因而通过第一更新数据从源节点处增量获取其他的账本数据、通过第二更新数据从源节点处增量获取其他的全量状态数据,当然待恢复节点也可以放弃自身原本存储的部分账本数据和部分状态数据,而从源节点处获取全量账本数据和全量状态数据。
在一实施例中,待恢复节点单次从源节点处获得第一更新数据、第二更新数据并对本地账本数据、本地状态数据进行更新后,就可能完成了与源节点之间的数据同步,使得待恢复节点上拥有了全量账本数据和全量状态数据,即待恢复节点完成数据恢复,可以切换至服务可用状态,并且该待恢复节点可以作为其他需要数据恢复的节点对应的源节点。或者,待恢复节点可以分多次从源节点处获取第一更新数据、第二更新数据,每次获得的第一更新数据仅包含部分账本数据、第二更新数据仅包含部分状态数据,并最终完成与源节点之间的数据同步;其中,需要多次获取数据的原因,可能是由于待恢复节点原本就只请求了部分数据,或者虽然待恢复节点请求了源节点处存储的所有数据,但是源节点在生成并返回第一更新数据、第二更新数据的过程中,区块链网络中出现了新的交易并相应产生了新的账本数据、状态数据,使得待恢复节点需要重新请求这些新产生的数据,直至待恢复节点与源节点之间实现数据同步。
在一实施例中,待恢复节点可以在数据恢复请求中指示区块高度区间,使得源节点根据对应于该区块高度区间的账本数据而生成第一更新数据。例如,区块高度区间的上边界可以为区块链的最新区块高度(待恢复节点可以向源节点或其他节点询问,以确定该最新区块高度)或者待恢复节点所设定的任意区块高度,而下边界可以根据待恢复节点处存储的本地账本数据的最大区块高度确定:当该最大区块高度为H时,下边界可以为H+1;当不存在本地账本数据(即待恢复节点为新加入的区块链节点且尚未与源节点进行过账本数据的恢复)时,下边界可以为创世块的区块高度。
在一实施例中,数据恢复请求中可以包含待恢复节点设定的时间段,使得源节点可以根据状态变量在该时间段内的取值,生成上述的第二更新数据。相应地,待恢复节点根据第二更新数据对本地状态数据进行更新后,状态变量的取值可以被更新为处于该时间段时的取值。
在一实施例中,状态变量在上述的时间段内可能存在多个取值。例如,状态变量balance在该时间段内的取值可能首先从a更新为b,然后由b更新为c,使得状态变量balance在该时间段内存在相应的3条取值记录,分别为:balance=a、balance=b、balance=c。在一种情况下,第二更新数据中可以包含上述的3条取值记录,使得待恢复节点根据这3条取值记录一次将状态变量balance的取值设定为a、b、c,且状态变量balance在上述时间段内的最终取值为c。在另一种情况下,第二更新数据中包含某一状态变量的取值时,该取值为相应状态变量在上述时间段内的最新取值,比如当状态变量存在上述的3条取值记录时,第二更新数据仅需要包含最新取值对应的取值记录“balance=c”、无需包含取值a和b的前2条取值记录,使得待恢复节点仅需要对状态变量balance的取值实施一次设置操作,即可确保状态变量balance在上述时间段内的最终取值为c,从而省去了基于前2条取值记录的取值设置操作,有助于进一步提升数据恢复效率。
在一实施例中,虽然源节点处维护有全量状态数据,但是在待恢复节点所设定的上述时间段内,可能只有部分状态变量发生取值更新,这里的取值更新可以包括创建状态变量时的初始赋值、状态变量参与交易执行后所导致的取值变化等,而其他状态变量的取值在上述时间段内并未发生更新。在一种情况下,第二更新数据可以包括上述时间段内已存在的所有状态变量的取值数据,而无论该状态变量是否在上述时间段内发生取值更新;那么,当待恢复节点多次向源节点请求第二更新数据时,部分第二更新数据中可能包含取值未发生变化的状态变量对应的取值记录,比如第一次请求的第二更新数据中包含取值记录为balance=a、第二次请求的第二更新数据中仍然包含取值记录balance=a,那么第二次请求的第二更新数据中的“balance=a”可能并未对待恢复节点的数据恢复起到实质作用。在另一种情况下,第二更新数据可以包含在上述时间段内发生取值更新的状态变量的取值,比如当状态变量balance的取值在上述时间段未发生更新时,第二更新数据中无需包含对应于该状态变量balance的取值记录,从而在确保待恢复节点能够完成数据恢复的同时,可以尽量减小第二更新数据的数据量,从而减小源节点与待恢复节点之间的数据传输量,有助于加快数据传输速度、提升待恢复节点的恢复效率。
在一实施例中,源节点可以通过状态数据库来维护状态变量的取值,且该状态数据库可以仅维护各个状态变量的最新取值。因此,当待恢复节点设定的时间段为某一历史时间段时,状态变量在该历史时间段的取值可能区别于最新取值,此时源节点可以通过读取日志数据中的状态变量更新记录,以确定第二更新数据包含的状态变量的取值。其中,第二更新数据可以包括上述时间段内已存在的所有状态变量的取值数据,源节点可以通过读取日志数据中的状态变量更新记录,以确定出所有状态变量;或者,当第二更新数据仅包含在上述时间段内发生取值更新的状态变量对应的取值记录时,源节点可以通过读取日志数据中的状态变量更新记录,以确定出第二更新数据所需包含的状态变量,即在上述时间段内发生取值更新的状态变量。
在一实施例中,数据恢复请求中可以包含待恢复节点设定的时间段和对应于该时间段的区块高度区间,即时间段与区块高度区间之间存在时间维度的映射关系,使得第一更新数据对应于区块高度区间、第二更新数据对应于时间段,以确保对待恢复节点上的本地账本数据和本地状态数据实现同步更新。尤其是,当待恢复节点需要多次从源节点处获取第一更新数据和第二更新数据时,需要相应地向源节点提供多个时间段和区块高度区间,而基于时间段与区块高度区间之间的映射关系,可以简化对时间段和区块高度区间的设定,降低出错概率。
在一实施例中,待恢复节点可以根据本地账本数据对本地状态数据进行验证。例如,待恢复节点可以获取本地账本数据中记录的所有交易,并通过执行交易的方式确定出所涉及的各个状态变量的取值变化,从而确定出各个状态变量的最终取值,如果该最终取值与本地状态数据中记录的各个状态变量的取值一致,表明本地状态数据通过验证,否则根据本地账本数据所计算出的状态变量取值对本地状态数据进行更新,从而避免源节点的失误而造成第二更新数据存在数据错误,或者解决第二更新数据在传输过程中发生的数据遗失或错乱等问题。
图4b是一示例性实施例提供的另一种待恢复节点侧的区块链节点数据的恢复方法的流程图。如图4b所示,该方法应用于作为待恢复节点的区块链节点,可以包括以下步骤:
步骤402b,待恢复节点分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求。
在一实施例中,第一源节点、第二源节点和待恢复节点均为区块链网络中的任意区块链节点。基于区块链网络的分布式特性,每个区块链节点上都应当存储有全量且一致的账本数据、状态数据。但是,待恢复节点可能由于一些原因而存在数据的缺失,比如该待恢复节点可能为新加入节点或者由于故障等原因而临时下线并再上线,那么该待恢复节点可以根据第一源节点上存储的账本数据和第二源节点上存储的状态数据实现数据恢复,使得该待恢复节点能够恢复至存储有全量的账本数据和状态数据。例如,待恢复节点可以将区块链网络中正常运行的任意两个节点选取为上述的第一源节点、第二源节点。为了提升数据交互效率和成功率,待恢复节点可以选取距离自身相对更近、链路状况相对更好的区块链节点,以作为上述的第一源节点、第二源节点。
步骤404b,所述待恢复节点并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更行数据。
步骤406b,所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
实际上,图4b所示实施例与图4a所示实施例之间,主要差异就在于数据来源,即图4a所示实施例中的账本数据、状态数据均来自于同一个源节点,而图4b所示实施例中的账本数据、状态数据分别来自于不同的源节点,此外的描述均可以参考图4a所示的实施例,此处不再赘述。
图5是一示例性实施例提供的一种恢复区块链节点数据的交互示意图。如图5所示,以区块链网络500中的节点51和节点52为例,其中节点51相当于前述实施例中的源节点、节点52相当于前述实施例中的待恢复节点,使得节点51可以协助恢复节点52的区块链节点数据;相应地,节点51与节点52之间的交互过程可以包括以下步骤:
步骤501,节点52向节点51询问当前区块高度。
在一实施例中,节点52可以生成当前时刻的时间戳,并向节点51发起包含该时间戳的区块高度询问请求,使得节点51可以根据自身维护的本地账本数据,确定出该时间戳之前的最大区块高度,并返回至节点52,以作为上述的“当前区块高度”,其中的“当前”对应于节点52生成时间戳的时刻,即上述的“当前时刻”。
由于区块链网络500中的各个区块链节点均维护有全量的账本数据,因而节点52也可以向节点51之外的其他区块链节点询问当前区块高度,询问过程可以参考上文,此处不再赘述。此外,节点52还可以通过其他方式确定当前区块高度,本说明书并不对此进行限制。
步骤502,节点52设定时间段T0~T1、区块高度区间H0~H1。
在一实施例中,时刻T0可以为区块高度为H0的区块被加入区块链的时刻,而时刻T1可以为区块高度为H1的区块被加入区块链的时刻,即时间段T0~T1与区块高度区间H0~H1相互对应。
在一实施例中,节点52可以为区块链网络500中的新加入节点,使得节点52上尚未保存本地账本数据和本地状态数据,因而时刻T0和区块高度H0可以对应于创世块、时刻T1和区块高度T1则对应于步骤501中确定出的当前区块高度。
在一实施例中,节点52可以在先前已经加入过区块链网络500,但由于维护或故障等原因而暂时下线,那么在重新上线时,可以通过节点51实现数据恢复。如果节点52保存有先前维护的本地账本数据和本地状态数据,那么可以在已有数据的基础上,向节点51请求获取后续产生的其他数据,直至完成数据同步。因此,时刻T0可以为先前维护的已有数据的最终时刻、区块高度H0可以对应于先前维护的已有数据中的最大区块高度或该最大区块高度+1,时刻T1和区块高度T1则对应于步骤501中确定出的当前区块高度。
步骤503,节点52向节点51发起数据恢复请求。
在一实施例中,数据恢复请求中可以包含步骤502中设定的时间段T0~T1、区块高度区间H0~H1,以及其他的必要信息(如节点52的身份信息等),此处不再一一列举。
步骤504,节点51生成第一更新数据、第二更新数据。
在一实施例中,节点51根据数据恢复请求中包含的区块高度区间H0~H1,从自身维护的本地账本数据中确定出对应于区块高度区间H0~H1的账本数据,并据此生成相应的第一更新数据。换言之,第一更新数据包括高度为H0~H1的区块对应的数据,使得节点52可以基于该第一更新数据将自身维护的本地账本数据对应的最大区块高度更新至H1。
在一实施例中,节点51根据数据恢复请求中包含的时间段T0~T1,读取相应的日志数据,并根据日志数据恢复出在时间段T0~T1内发生状态变量取值记录,以生成第二更新数据。其中,状态变量取值记录包括相应的状态变量被初次赋值时的记录,以及状态变量在相关交易被执行后所产生的取值变更记录等。
其中,同一状态变量在时间段T0~T1内可能发生多次取值变化,从而存在多条相应的状态变量取值记录,那么节点51可以选取最近一条状态变量取值记录并添加至第二更新数据中,而避免将其他的状态变量取值记录添加至第二更新数据中,这样节点52在基于第二更新数据对状态变量的取值进行更新时,只需要完成一次更新操作即可,而避免根据多条状态变量取值记录实施多次更新操作,且最终都能够确保将相应状态变量的取值更新至时间段T0~T1内的最新取值。
步骤505,节点51向节点52返回第一更新数据、第二更新数据。
步骤506,节点52更新本地账本数据、本地状态数据。
在一实施例中,节点51可以与节点52之间建立起数据连接,以用于对第一更新数据、第二更新数据进行传输。例如图6所示,节点51通过与节点52之间建立HTTP连接,可以基于该HTTP连接将节点51维护的本地账本数据1同步至节点52、形成节点52处的本地账本数据2,以实现本地账本数据1与本地账本数据2之间的数据同步;节点51通过与节点52之间建立P2P连接,可以基于该P2P连接将节点51维护的本地状态数据1同步至节点52、形成节点52处的本地状态数据2,以实现本地状态数据1与本地状态数据2之间的数据同步。
换言之,节点51可以通过HTTP连接将第一更新数据返回至节点52、通过P2P连接将第二更新数据返回至节点52,并且第一更新数据与第二更新数据的传输之间相互独立,使得节点51可以并行地将第一更新数据、第二更新数据分别返回至节点52;相应地,节点52可以根据第一更新数据、第二更新数据,并行地更新自身维护的本地账本数据、本地状态数据(即图6所示的本地账本数据2、本地状态数据2)。由于对本地状态数据的更新过程可以与本地账本数据的更新过程同时实现,而并非由节点52根据第一更新数据所含的区块数据来执行相关交易并生成相关状态变量的取值,即节点52对于本地账本数据和本地状态数据的更新操作是并行实施、而非串行实施,因而有助于加快节点52的数据恢复速度。
节点52在根据第一更新数据、第二更新数据对本地账本数据、本地状态数据完成更新后,可以返回至步骤501,向节点51询问当前区块高度。在执行步骤501~506的同时,节点51仍然正常参与区块链网络500中的区块创建和交易实施,使得区块链网络500对应的区块高度很可能已经超出了前述的区块高度H1。因此,节点52可以通过多次循环执行步骤501~506的方式,对自身维护的本地账本数据和本地状态数据进行不断更新,直至完成与节点51之间的数据同步,即某一次询问得到的当前区块高度与节点52维护的本地账本数据的最大区块高度一致,此时节点52可以终止数据恢复,并将自身恢复为正常的区块链节点,一方面正常参与区块链网络500中的区块创建和交易实施,另一方面向链外提供诸如数据查询、交易提交等相关服务。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行,在逻辑层面上形成区块链节点数据的恢复装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,在软件实施方式中,该区块链节点数据的恢复装置可以包括:
接收单元81,接收来自待恢复节点的数据恢复请求;
生成单元82,分别生成对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;
返回单元83,向所述待恢复节点并行地返回所述第一更新数据和所述第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
可选的,所述生成单元82具体用于:
读取日志数据中的状态变量更新记录,以确定所述第二更新数据包含的状态变量及其取值。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段和对应于所述时间段的区块高度区间;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段。
图9是一示例性实施例提供的一种设备的示意结构图。请参考图9,在硬件层面,该设备包括处理器902、内部总线904、网络接口906、内存908以及非易失性存储器910,当然还可能包括其他业务所需要的硬件。处理器902从非易失性存储器910中读取对应的计算机程序到内存908中然后运行,在逻辑层面上形成区块链节点数据的恢复装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图10,在一种软件实施方式中,该区块链节点数据的恢复装置可以包括:
请求单元1001,向源节点发起数据恢复请求;
接收单元1002,接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;
更新单元1003,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
可选的,所述数据恢复请求中包含所述待恢复节点设定的时间段和对应于所述时间段的区块高度区间;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段。
可选的,还包括:
验证单元1004,根据本地账本数据对本地状态数据进行验证。
请参考图11,在另一种软件实施方式中,该区块链节点数据的恢复装置可以包括:
请求单元1101,分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求;
接收单元1102,并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更行数据;
更新单元1103,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
可选的,所述状态数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
可选的,所述状态数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
可选的,所述账本数据恢复请求中包含所述待恢复节点设定的时间段、所述状态数据恢复请求中包含所述待恢复节点设定的对应于所述时间段的区块高度区间;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段。
可选的,还包括:
验证单元1104,根据本地账本数据对本地状态数据进行验证。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (22)

1.一种区块链节点数据的恢复方法,其特征在于,包括:
源节点接收来自待恢复节点的数据恢复请求;所述数据恢复请求中包含所述待恢复节点设定的时间段和对应于所述时间段的区块高度区间;
所述源节点向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段。
2.根据权利要求1所述的方法,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
3.根据权利要求1所述的方法,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
4.根据权利要求1所述的方法,其特征在于,所述源节点生成对应于状态数据的第二更新数据,包括:
所述源节点读取日志数据中的状态变量更新记录,以确定所述第二更新数据包含的状态变量及其取值。
5.一种区块链节点数据的恢复方法,其特征在于,包括:
待恢复节点向源节点发起数据恢复请求;所述数据恢复请求中包含所述待恢复节点设定的时间段和对应于所述时间段的区块高度区间;
所述待恢复节点接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段;
所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
6.根据权利要求5所述的方法,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
7.根据权利要求5所述的方法,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
8.根据权利要求5所述的方法,其特征在于,还包括:
所述待恢复节点根据本地账本数据对本地状态数据进行验证。
9.一种区块链节点数据的恢复方法,其特征在于,包括:
待恢复节点分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求;所述账本数据恢复请求中包含所述待恢复节点设定的时间段、所述状态数据恢复请求中包含所述待恢复节点设定的对应于所述时间段的区块高度区间;
所述待恢复节点并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更新数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段;
所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
10.一种区块链节点数据的恢复装置,其特征在于,包括:
接收单元,接收来自待恢复节点的数据恢复请求;所述数据恢复请求中包含所述待恢复节点设定的时间段和对应于所述时间段的区块高度区间;
返回单元,向所述待恢复节点并行地返回对应于账本数据的第一更新数据和对应于状态数据的第二更新数据,以使所述待恢复节点根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段。
11.根据权利要求10所述的装置,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
12.根据权利要求10所述的装置,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
13.根据权利要求10所述的装置,其特征在于,所述第二更新数据包含的状态变量及其取值由日志数据中的状态变量更新记录而确定。
14.一种区块链节点数据的恢复装置,其特征在于,包括:
请求单元,向源节点发起数据恢复请求;所述数据恢复请求中包含待恢复节点设定的时间段和对应于所述时间段的区块高度区间;
接收单元,接收所述源节点并行返回的对应于账本数据的第一更新数据、对应于状态数据的第二更新数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段;
更新单元,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
15.根据权利要求14所述的装置,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:状态变量的取值,且取值为所述状态变量在所述时间段内的最新取值。
16.根据权利要求14所述的装置,其特征在于,所述数据恢复请求中包含所述待恢复节点设定的时间段;所述第二更新数据包括:在所述时间段内发生取值更新的状态变量的取值。
17.根据权利要求14所述的装置,其特征在于,还包括:
验证单元,根据本地账本数据对本地状态数据进行验证。
18.一种区块链节点数据的恢复装置,其特征在于,包括:
请求单元,分别向第一源节点发起账本数据恢复请求、向第二源节点发起状态数据恢复请求;所述账本数据恢复请求中包含待恢复节点设定的时间段、所述状态数据恢复请求中包含所述待恢复节点设定的对应于所述时间段的区块高度区间;
接收单元,并行接收所述第一源节点返回的对应于账本数据的第一更新数据、所述第二源节点返回的对应于状态数据的第二更新数据;所述第一更新数据对应于所述区块高度区间、所述第二更新数据对应于所述时间段;
更新单元,根据所述第一更新数据更新本地账本数据、根据所述第二更新数据更新本地状态数据。
19.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-4中任一项所述的方法。
20.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-4中任一项所述方法的步骤。
21.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求5-9中任一项所述的方法。
22.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求5-9中任一项所述方法的步骤。
CN201910922791.6A 2019-09-27 2019-09-27 区块链节点数据的恢复方法及装置 Active CN112579343B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910922791.6A CN112579343B (zh) 2019-09-27 2019-09-27 区块链节点数据的恢复方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910922791.6A CN112579343B (zh) 2019-09-27 2019-09-27 区块链节点数据的恢复方法及装置

Publications (2)

Publication Number Publication Date
CN112579343A CN112579343A (zh) 2021-03-30
CN112579343B true CN112579343B (zh) 2024-05-28

Family

ID=75109751

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910922791.6A Active CN112579343B (zh) 2019-09-27 2019-09-27 区块链节点数据的恢复方法及装置

Country Status (1)

Country Link
CN (1) CN112579343B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114928558B (zh) * 2022-06-14 2023-12-12 上海万向区块链股份公司 基于区块链的运维方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108600353A (zh) * 2018-04-12 2018-09-28 北京天德科技有限公司 一种区块链节点的并行块同步方法
CN108769173A (zh) * 2018-05-21 2018-11-06 阿里体育有限公司 运行智能合约的区块链实现方法及设备
CN109325855A (zh) * 2018-08-16 2019-02-12 北京京东尚科信息技术有限公司 区块链网络、部署方法及存储介质
CN110169036A (zh) * 2016-09-28 2019-08-23 迈克菲公司 使用多个恢复源的装置驱动的自动恢复
CN110178340A (zh) * 2018-12-13 2019-08-27 阿里巴巴集团控股有限公司 在分布式系统中进行网络节点的恢复处理
CN110275884A (zh) * 2019-05-31 2019-09-24 阿里巴巴集团控股有限公司 数据存储方法及节点

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180285217A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Failover response using a known good state from a distributed ledger
US11606190B2 (en) * 2017-12-26 2023-03-14 Akamai Technologies, Inc. High performance distributed system of record with cryptographic service support
US10887254B2 (en) * 2018-02-01 2021-01-05 Red Hat, Inc. Enterprise messaging using blockchain system

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110169036A (zh) * 2016-09-28 2019-08-23 迈克菲公司 使用多个恢复源的装置驱动的自动恢复
CN108600353A (zh) * 2018-04-12 2018-09-28 北京天德科技有限公司 一种区块链节点的并行块同步方法
CN108769173A (zh) * 2018-05-21 2018-11-06 阿里体育有限公司 运行智能合约的区块链实现方法及设备
CN109325855A (zh) * 2018-08-16 2019-02-12 北京京东尚科信息技术有限公司 区块链网络、部署方法及存储介质
CN110178340A (zh) * 2018-12-13 2019-08-27 阿里巴巴集团控股有限公司 在分布式系统中进行网络节点的恢复处理
CN110275884A (zh) * 2019-05-31 2019-09-24 阿里巴巴集团控股有限公司 数据存储方法及节点

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
区块链技术综述;张亮;刘百祥;张如意;江斌鑫;刘一江;;计算机工程;20190318(05);全文 *

Also Published As

Publication number Publication date
CN112579343A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
EP3559891B1 (en) Executing multi-party transactions using smart contracts
CN110275884B (zh) 数据存储方法及节点
JP6756914B2 (ja) ブロックチェーンネットワーク内のファンクションアズアサービス(FaaS)プラットフォーム
CN110046998B (zh) 跨链用权系统及方法、装置、电子设备、存储介质
CN111213340A (zh) 选择用于密码功能的证明委托并使其安全
US20190278765A1 (en) Shared secret-based blockchain storage
US11100094B2 (en) Taking snapshots of blockchain data
WO2022121538A1 (zh) 基于区块链的数据同步方法、系统及相关设备
CN111066047A (zh) 实现基于区块链的工作流
CN110622488A (zh) 用于管理用户与区块链的交互的系统和方法
WO2020253634A1 (zh) 一种数据处理方法、系统及装置
WO2022134797A1 (zh) 一种数据分片存储方法、装置、计算机设备和存储介质
KR102430135B1 (ko) 에러 정정 코드에 기초하는 동적 블록체인 데이터 저장
US11194792B2 (en) Taking snapshots of blockchain data
CN114679457A (zh) 一种区块链中的节点分组方法及区块链节点
JP2020204898A (ja) 分散台帳システムの運用管理方法、分散台帳システムの運用管理システム、および分散台帳システムの運用管理プログラム
CN111352706A (zh) 一种数据访问方法、装置、设备及存储介质
CN112579343B (zh) 区块链节点数据的恢复方法及装置
WO2021184873A1 (zh) 用于区块链网络中的数据同步的方法、装置和计算设备
WO2023207529A1 (zh) 数据处理方法、装置及设备、介质、产品
CN114757777A (zh) 用于区块链的最优链路选择方法及装置和电子设备
US11943316B1 (en) Database connection multiplexing for prepared statements
US11483381B1 (en) Distributing cloud migration
CN110889040B (zh) 用于推送信息的方法和装置
US10726049B2 (en) Obtaining blockchain data in stages

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40046340

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant