掌桥专利:专业的专利平台
掌桥专利
首页

区块链数据恢复方法及装置、电子设备

文献发布时间:2023-06-19 16:04:54



技术领域

本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链数据恢复方 法及装置、电子设备。

背景技术

区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、 公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数 据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。

发明内容

本说明书提出一种区块链数据恢复方法,应用于节点设备;所述节点设备搭载了用 于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志WAL模式;所述方法包括:

响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储 系统中存储的区块交易数据对应的WAL日志文件;

基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据 以生成所述其它类型的区块链数据;

将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述 其它类型的区块链数据的各存储系统。

可选的,所述方法还包括:

确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号中的最新区块 号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N; 如果是,生成所述第一事件。

可选的,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对 应的最新区块号的最小值;

确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小 于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,还包括:

计算所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小 值,得到所述最新区块号C。

可选的,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对 应的区块号。

可选的,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格式。

可选的,所述数据标识采用了WAL日志文件的LSN日志序列编号的数据格式。

可选的,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件,包括:

分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N]中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;

基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块链交易以 生成所述其它类型的区块链数据,包括:

基于读取到的所述区块号区间(C,N]中的各区块号表示的区块中的区块交易数据对 应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。

可选的,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C, 是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N,包括:

周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C, 是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,

响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存 储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。

可选的,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:

与所述区块交易数据对应的区块的区块头数据;

与所述区块交易数据对应的交易收据;

在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态数据。

可选的,所述方法还包括:

响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区 块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。

可选的,所述方法还包括:

确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或 者存储容量是否达到阈值;如果是,生成所述第二事件。

可选的,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文 件数量或者存储容量是否达到阈值,包括:

周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件 数量或者存储容量是否达到阈值;或者,

响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系 统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。

本说明书还提出一种区块链数据恢复装置,应用于节点设备;所述节点设备搭载了 用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志WAL模式;所述装置包括:

读取模块,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所 述目标存储系统中存储的区块交易数据对应的WAL日志文件;

恢复模块,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;

写入模块,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用 于存储所述其它类型的区块链数据的各存储系统。

可选的,所述装置还包括:

第一确定模块,确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号 中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的 最新区块号N;如果是,生成所述第一事件。

可选的,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对 应的最新区块号的最小值;

所述确定模块进一步:

在确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否 小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,计算所述各存储 系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值,得到所述最新区 块号C。

可选的,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对 应的区块号。

可选的,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格式。

可选的,所述数据标识采用了WAL日志文件的LSN日志序列编号的数据格式。

可选的,所述读取模块:

分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N]中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;

所述恢复模块:

基于读取到的所述区块号区间(C,N]中的各区块号表示的区块中的区块交易数据对 应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。

可选的,所述第一确定模块:

周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C, 是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,

响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存 储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。

可选的,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:

与所述区块交易数据对应的区块的区块头数据;

与所述区块交易数据对应的交易收据;

在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态数据。

可选的,所述写入模块进一步:

响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区 块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。

可选的,所述装置还包括:

第二确定模块,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件 的文件数量或者存储容量是否达到阈值;如果是,生成所述第二事件。

可选的,所述第二确定模块:

周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件 数量或者存储容量是否达到阈值;或者,

响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系 统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。

以上技术方案中,一方面,由于区块链搭载的多个存储系统中,可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与该区块交易数据对 应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式;因此,对于搭载 多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据对应的WAL日志 文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多 种区块链数据时的存储开销;

另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据, 是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的 节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。

附图说明

图1是一示例性实施例提供的一种区块链数据恢复方法的流程图;

图2是一示例性实施例提供的一种电子设备的结构示意图;

图3是一示例性实施例提供的一种区块链数据恢复装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时, 除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述 的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是 与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方 法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方 法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。 此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而 本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。

其中,去中心化程度最高的是公有链。加入公有链的参与者(也可称为区块链中的节点) 可以读取链上的数据记录、参与交易、以及竞争新区块的记账权等。而且,各节点可自由加 入或者退出网络,并进行相关操作。

私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。 简单来说,私有链可以为一个弱中心化系统,其对节点具有严格限制且节点数量较少。这种 类型的区块链更适合于特定机构内部使用。

联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中 各个节点通常有与之相对应的实体机构或者组织;节点通过授权加入网络并组成利益相关联 盟,共同维护区块链运行。

基于区块链的基本特性,区块链通常是由若干个区块构成。在这些区块中分别记录有与 该区块的创建时刻对应的时间戳,所有的区块严格按照区块中记录的时间戳,构成一条在时 间上有序的数据链条。

对于物理世界产生的真实数据,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链中的节点设备对收到的交易进行共识处理,并在达成共识后,由区块链中作为记账节点的节点设备,将这笔交易打包进区块,在区块链中进行持久化存证。

其中,区块链中支持的共识算法可以包括:

第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如, 工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法;

第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识 算法;例如,实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法。

在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易 后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中 胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并 将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。

在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定 好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送 至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程 中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新 区块的区块头发送至其它节点设备进行共识。

如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到 的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点 设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证 没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它 节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。

在区块链领域,有一个重要的概念就是账户(Account);以以太坊为例,以太坊通常将 账户划分为外部账户和合约账户两类;外部账户就是由用户直接控制的账户,也称之为用户 账户;而合约账户则是由用户通过外部账户创建的,包含合约代码的账户(即智能合约)。

当然,对于一些基于以太坊的架构而衍生出的区块链模型(比如蚂蚁区块链),还可以 对区块链支持的账户类型,进行进一步的扩展,在本说明书中不进行特别限定。

对于区块链中的账户而言,通常会通过一个结构体,来维护账户的账户状态。当区块中 的交易被执行后,区块链中与该交易相关的账户的状态通常也会发生变化。

以以太坊为例,账户的结构体通常包括Balance,Nonce,Code和Storage等字段。其中:

Balance字段,用于维护账户目前的账户余额;

Nonce字段,用于维护该账户的交易次数;它是用于保障每笔交易能且只能被处理一次 的计数器,有效避免重放攻击;

Code字段,用于维护该账户的合约代码;在实际应用中,Code字段中通常仅维护合约代 码的hash值;因而,Code字段通常也称之为Codehash字段。

Storage字段,用于维护该账户的存储内容(默认字段值为空);对于合约账户而言, 通常会分配一个独立的存储空间,用以存储该合约账户的存储内容;该独立的存储空间通常 称之为该合约账户的账户存储。合约账户的存储内容通常会构建成MPT(MerklePatricia Trie) 树的数据结构存储在上述独立的存储空间之中;其中,基于合约账户的存储内容构建成的MPT 树,通常也称之为Storage树。而Storage字段通常仅维护该Storage树的根节点的hash值; 因此,Storage字段通常也称之为Storage Root hash字段。其中,对于外部账户而言,以 上示出的Code字段和Storage字段的字段值均为空值。

对于大多数区块链模型,通常都会使用Merkle树的数据结构;或者,基于Merkle树的数据结构,来存储和维护区块链数据。

其中,对于节点设备来说,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;而区块数据又进一步包括区块头数据、区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。需要说明的是, 在实际应用中,节点设备除了需要存储和维护区块链数据以外,也需要存储和维护与区块 链数据对应的索引数据。

例如,以以太坊为例,以太坊使用了MPT树,作为数据组织形式,用来组织和管理账户 状态、交易信息等重要数据。其中,MPT树是一种融合了Trie字典树的树形结构的Merkle树变种。

以太坊针对区块链中需要存储和维护的区块链数据,设计了三棵MPT树,分别是MPT状 态树、MPT交易树和MPT收据树。其中,除了以上三棵MPT树以外,实际上还存在一棵基于 合约账户的存储内容构建的Storage树。

MPT状态树,是由区块链中所有账户的账户状态(state)数据组织成的MPT树;MPT交易 树,是由区块链中的交易(transaction)数据组织成的MPT树;MPT收据树,是区块中的交易 在执行完毕后生成的与每笔交易对应的交易(receipt)收据组织成的MPT树。以上示出的MPT 状态树、MPT交易树和MPT收据树的根节点的hash值,最终都会被添加至对应区块的区块头 中。

其中,MPT交易树和MPT收据树均与区块相对应,即每一个区块都有自己的MPT交易树 和MPT收据树。而MPT状态树是一个全局的MPT树,并不与某一个特定的区块相对应,而是涵盖了区块链中所有账户的账户状态数据。

以下以MPT状态树为例进行举例说明。

区块链每产生一个最新区块,则在该最新区块中的交易被执行之后,区块链中这些被执 行交易的相关账户(可以是外部账户也可以是合约账户)的账户状态,通常也会随之发生变 化;

例如,当区块中的一笔“转账交易”执行完毕后,与该“转账交易”相关的转出方账户 和转入方账户的余额(即这些账户的Balance字段的字段值),通常也会随之发生变化。

而节点设备在区块链产生的最新区块中的交易执行完毕后,由于当前区块链中的账户状 态发生了变化,因此节点设备需要根据区块链中所有账户当前的账户状态数据,来构建MPT 状态树,用于维护区块链中所有账户的最新状态。

也即,每当区块链中产生一个最新区块,并且该最新区块中的交易执行完毕后,导致区 块链中的账户状态发生了变化,节点设备都需要基于区块链中所有账户最新的账户状态数据, 重新构建一棵MPT状态树。

换句话说,区块链中每一个区块,都有一颗与之对应的MPT状态树;该MPT状态树,维 护了在该区块中的交易在执行完毕后,区块链中所有账户最新的账户状态。

在实际应用中,由于区块链通常会与链外的各种业务系进行对接,来进行多方的数 据和工作流协作(跟业务无关);例如,一个与区块链对接的业务系统A,可以将相关 的业务数据发布到区块链上,来驱动另一个与区块链对接的业务系统B,基于该业务数 据执行进一步的业务处理;

而不同类型的区块链数据,在多方的数据和工作流协作的过程中,实际起到的作用 可能互不相同;节点设备在存储和维护区块链数据时,通常会搭载多个存储系统,并将不同类型的区块链数据分别存储到不同的存储系统中。

例如,在一个例子中,节点设备可以搭载3个不同的存储系统,将区块数据、state数据(即上述账户状态数据)、以及上述2种数据对应的索引数据(比如以上两种数据的hash值),分别存储在不同的存储系统中。(5份WAL分别举例)

在另一个例子中,节点设备可以将区块头数据、区块交易数据、与区块交易数据对应的交易收据、state数据(即上述账户状态数据)、以及上述4种数据对应的索引数据 (比如以上4种数据的hash值),分别存储在不同的存储系统中;在这种情况下,节点设 备可以搭载5个不同的存储系统,分别将区块头数据、区块交易数据、与区块交易数据 对应的交易收据、state数据、以及上述4种数据对应的索引数据,分别存储在这5个不 同的存储系统中。

节点设备在将不同类型的区块链数据,分别存储到在搭载的不同的存储系统中时, 为了防止由于数据未写入造成的数据丢失,各个存储系统可以开启WAL(write aheadlogging,预写日志)模式。

其中,WAL模式,是一种高效的日志算法。在开启WAL模式的存储系统中,所有针 对存储系统的数据修改,在提交到存储系统中之前,都会先写入WAL日志文件中;然后, 再通过周期性触发或者用户手动触发的checkpoint事件,将WAL日志文件中存储的数据 修改,写入到存储系统中。

通过为节点设备搭载的存储系统开启WAL模式,虽然可以防止由于数据未写入造成 的数据丢失,但对于节点设备存储的区块链账本中,往往包含多种不同类型的区块链数据,需要存储在不同的存储系统中;因此,存储多分多份WAL日志文件会增加节点设备 的存储开销;而且,节点设备在将多份WAL日志文件中存储的数据修改恢复到存储系统 时,需要多次执行相关的恢复流程,也会增加节点设备的性能开销。

有鉴于此,本说明书提出一种利用节点设备存储的一份与区块链交易数据对应的WAL日志文件,对多种区块链数据进行恢复的技术方案。

在实现时,区块链的节点设备可以搭载用于存储区块链数据的多个存储系统;其中, 上述区块链数据可以包括区块交易数据和至少一种与其它类型的区块链数据;上述多个 存储系统中用于存储该区块交易数据的目标存储系统可以支持预写日志WAL模式;

当节点设备响应于针对上述其它类型的区块链数据进行恢复的第一事件时,可以读 取与该目标存储系统中存储的区块交易数据对应的WAL日志文件;再基于读取到的WAL日志文件恢复上述区块交易数据,当上述区块交易数据恢复完成后,再进一步执行恢复 出的该区块交易数据,以生成上述其它类型的区块链数据;然后,再将生成的上述其它 类型的区块链数据,分别写入上述多个存储系统中用于存储上述其它类型的区块链数据 的各存储系统。

在以上技术方案中,以上技术方案中,一方面,由于区块链搭载的多个存储系统中, 可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与 该区块交易数据对应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式; 因此,对于搭载多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据 对应的WAL日志文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多种区块链数据时的存储开销;

另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据, 是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的 节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。

请参见图1,图1是一示例性实施例提供的一种区块链数据恢复方法的流程图。所述方 法应用于区块链节点设备;其中,所述区块链数据包括区块交易数据和至少一种与所述区块 交易数据对应的其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的 目标存储系统支持预写日志WAL模式;所述方法包括以下步骤:

步骤102,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;

步骤104,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块 交易数据以生成所述其它类型的区块链数据;

步骤106,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。

在本说明书中,节点设备存储的区块链账本中,通常会包括多种不同类型的区块链 数据。而上述多种不同类型的区块链数据,通常可以包括区块数据、区块链中的区块链账 户对应的账户状态数据,等等;其中,区块数据通常包括区块头数据和区块体数据;上述区块体数据,又进一步包括区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。

在实际应用中,为便于对存储的区块链数据进行查询检索,除了以上列举的区块链 数据以外,节点设备通常还需要存储和维护与上述各种区块链数据对应的索引数据。其中,上述索引数据的具体形式,在本说明书中不进行特别限定;

例如,对于支持对区块链账本中存储的区块链数据进行内容寻址的区块链系统,具 体可以将上述区块链数据的内容摘要(比如hash值),作为该区块链数据的索引数据,从而使得用户可以将上述区块链数据的内容摘要作为查询索引,来查询和访问区块链账本中相关的区块链数据;

对于不支持对区块链账户中存储的区块链数据进行内容寻址的区块链系统,则具体 可以将由区块链系统为存储的区块链数据设置的数据标识(比如数据编号),作为该区块链数据的索引数据,从而使得用户可以将上述区块链数据的数据标识作为查询索引, 来查询和访问区块链账本中相关的区块链数据。

节点设备在存储和维护以上列举的各种区块链数据时,可以搭载多个存储系统,并 将不同类型的区块链数据分别存储到不同的存储系统中。其中,上述存储系统,具体可以包括任意形式的,用于对区块链账本中的区块链数据进行持久化存储的存储系统;例如,在实际应用中,上述存储系统具体可以是节点设备搭载的数据库、文件系统,等等, 在本说明书中不进行特别限定。

需要说明的是,由于区块头数据、与区块交易数据对应的交易收据、state数据(即上述账户状态数据)等数据;通常都可以通过重新执行区块中的区块交易(即交易重放) 数据恢复出来;因此,上述区块交易数据可以作为其它类型的区块链数据的“根数据”; 节点设备在存储以上示出的各种类型的区块链数据时,可以将上述区块交易数据与其它 类型的区块链数据分别存储在不同的存储系统中。

例如,在一个例子中,节点设备可以搭载5个不同的存储系统,分别将区块交易数据、以及与区块交易数据对应的区块的区块头数据、与区块交易数据对应的交易收据、state数据、以及上述4种数据对应的索引数据,分别存储在这5个不同的存储系统中。

在本说明书中,为了防止由于上述“根数据”未写入造成的“根数据”丢失,各个 存储系统中用于存储“根数据”(即区块交易数据)的目标存储系统,可以开启WAL模 式。在开启WAL模式后,所有针对该目标存储系统的数据修改(比如写入新的区块交易 数据),在提交到该目标存储系统中之前,都会以WAL日志文件的形式先写入到与该目 标存储系统对应的WAL日志缓冲区;其中,日志缓冲区具体也可以是一个持久化存储; 然后,当区块链系统触发了与上述目标存储系统对应的checkpoint事件时,节点设备可 以响应该checkpoint事件,再将WAL日志文件中存储的对上述“根数据”数据修改,恢 复到目标存储系统中。

其中,上述checkpoint事件是指基于WAL日志文件对存储系统中存储的区块链数据 进行数据恢复的事件。

而对于各个存储系统中用于存储“根数据”以外的其它类型的区块链数据的其它各 存储系统,则可以不开启WAL模式,而是基于与上述目标存储系统对应的WAL日志文件进行跨存储系统的数据恢复;也即,未开启WAL模式的存储系统也可以通过其它开启WAL 模式的存储系统对应的WAL日志文件进行数据恢复。

在这种情况下,区块链系统也可以对未开启WAL模式的上述其它各存储系统的checkpoint事件;而当区块链系统触发了与上述其它各存储系统对应的checkpoint事 件时,节点设备可以响应该checkpoint事件,读取上述目标存储系统对应的WAL日志文 件进行数据恢复计算,再基于数据恢复计算的计算结果,对上述其它各存储系统中存储 的其它类型的区块链数据进行跨存储系统的数据恢复。

在本说明书中,节点设备对上述目标存储系统中存储的区块交易数据进行恢复的流 程,和对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,可以是两个互相独立的流程,在本说明书中不对二者的执行顺序进行特别的限定。

也即,在实际应用中,节点设备可以先执行对上述目标存储系统中存储的区块交易 数据进行恢复的流程,再执行对上述其它各存储系统中存储的其它类型的区块链数据进 行恢复的流程;也可以先执行对上述其它各存储系统中存储的其它类型的区块链数据进 行恢复的流程,再执行对上述目标存储系统中存储的区块交易数据进行恢复的流程定;

需要说明的是,由于对上述目标存储系统中存储的区块交易数据进行恢复的流程, 也是基于与上述区块交易数据对应的WAL日志文件来完成的;因此,如果节点设备先执行对上述目标存储系统中存储的区块交易数据进行恢复的流程,则需要在上述区块交易数据恢复完毕后,暂时不删除日志缓冲区存储的与上述区块交易数据对应的WAL日志文件;当节点设备开始执行对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,可以继续基于上述WAL日志文件对上述其它各存储系统中存储的其它类型的 区块链数据进行恢复,并在恢复完成后再将该WAL日志文件从日志缓冲区删除。

其中,还需要说明的是,由于节点设备对上述目标存储系统中存储的区块交易数据 进行恢复的流程,和对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的 流程,是两个互相独立的流程;因此,区块链系统触发的与上述目标存储系统对应的checkpoint事件,和区块链系统触发的与上述其它各存储系统对应的checkpoint事件 对应的触发条件,也可以互不相同。

其中,为了便于描述,对于区块链系统触发的与上述其它各存储系统对应的checkpoint事件,将称之为“第一事件”;对于区块链系统触发的与上述目标存储系统 对应的checkpoint事件,将称之为“第二事件”。

在示出的一种实施方式中,基于WAL的数据恢复机制,上述第一事件的触发条件,通常可以包括与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量达到阈值;或者,与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的 存储容量达到阈值。

也即,当与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数 量达到阈值;或者,与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的存储容量达到阈值,可以触发区块链系统生成上述第一事件。

在示出的另一种实施方式中,由于对上述其它各存储系统中存储的其它类型的区块 链数据的数据恢复,是基于与上述目标存储系统对应的WAL日志文件进行的跨存储系统的数据恢复,与基于WAL日志文件对上述目标存储系统存储的区块交易数据进行本地数 据恢复有所不同;因此,上述第二事件的触发条件,可以与基于WAL的数据恢复机制的checkpoint事件的触发条件存在差异。上述第二事件的触发条件,具体可以包括上述其 它各存储系统存储的上述其它类型的区块链数据对应的区块号中的最新区块号C,小于 上述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N。

也即,当上述其它各存储系统存储的上述其它类型的区块链数据对应的区块号中的 最新区块号C,小于上述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N,可以触发区块链系统生成上述第二事件。

以下将通过具体的实施例,对节点设备基于区块链系统触发上述第一事件,对上述 其它各存储系统中存储的其它类型的区块链数据进行恢复的流程;以及,节点设备基于系统触发的上述第二事件,对上述目标存储系统中存储的区块交易数据进行恢复的流程,分别进行描述。

在示出的一种实施方式中,节点设备在对上述其它各存储系统中存储的其它类型的 区块链数据进行恢复时,可以周期性确定上述其它各存储系统存储的上述其它类型的区块 链数据对应的最新区块号C,是否小于上述目标存储系统存储的区块交易数据对应的最 新区块号N;如果是,可以触发生成上述第一事件。

例如,在实际应用中,节点设备可以预设一个checkpiont事件的检查周期T,然后基于该周期T,定时检查上述其它各存储系统是否满足上述checkpiont事件的触发条件。

在示出的另一种实施方式中,节点设备在对上述其它各存储系统中存储的其它类型 的区块链数据进行恢复时,也可以响应于用户手动触发的针对上述其它类型的区块链数 据进行恢复的指令,来确定上述其它各存储系统存储的上述其它类型的区块链数据对应的 最新区块号C,是否小于上述目标存储系统存储的区块交易数据对应的最新区块号N;如 果是,可以触发生成上述第一事件。

例如,在实际应用中,节点设备除了可以周期性检查上述其它各存储系统是否满足 上述checkpiont事件的触发条件以外,用户也可以通过手动输入恢复指令的方式,来触发节点设备检查上述其它各存储系统是否满足上述checkpiont事件的触发条件;比如, 在一些恢复场景中,用户可能需要对上述其它各存储系统存储的上述其它类型的区块链 数据进行数据回滚操作,将上述其它各存储系统存储的上述其它类型的区块链数据恢复 到某一个历史区块对应的数据版本;在这种场景中,用户可以通过手动输入恢复指令的 方式,来触发节点设备检查上述其它各存储系统是否满足上述checkpiont事件的触发条 件。

其中,上述其它各存储系统存储的上述其它类型的区块链数据对应的最新区块号C, 具体可以是上述其它各存储系统存储的上述其它类型的区块链数据对应的最新区块号中 的最小值;在这种情况下,节点设备可以先计算出上述其它各存储系统中存储的上述其它 类型的区块链数据对应的最新区块号的最小值,得到上述最新区块号C,再进一步确定上 述最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。

在示出的一种实施方式中,为了便于确定节点设备搭载的各存储系统存储的区块链 数据对应的区块号,各存储系统存储的区块链数据的数据标识中,具体可以包括上述区块链数据对应的区块号;也即,具体可以在区块链数据的数据标识中,直接添加该区块 链数据对应的区块号;或者,在区块链数据的数据标识中,添加指示该区块链数据对应 的区块号的信息。

在一种实现方式中,节点设备搭载的各个存储系统存储的区块链数据的数据标识,具 体可以采用统一的数据格式,并在采用的统一的数据格式中,携带该区块链数据对应的 区块号;或者指示该区块链数据对应的区块号的信息。

其中,上述数据格式,在本说明书中不进行特别限定;例如,在一个例子中,节点设备搭载的各个存储系统存储的区块链数据的数据标识,可以统一采用WAL日志文件的LSN(Log Sequence Number,日志序列编号)的数据格式,并通过在WAL日志文件的LSN 中,携带该区块链数据对应的区块号;或者指示该区块链数据对应的区块号的信息。

在本说明书中,当触发生成了上述第一事件,节点设备可以响应于该第一事件,从与上述目标存储系统对应的日志缓冲区,分别读取由上述最新区块号C和上述最新区块号N构成的区块号区间(C,N]中的各区块号所表示的区块中的区块交易数据对应的WAL日 志文件;然后,基于读取到的WAL日志文件,恢复与上述区块号区间(C,N]中的各区块 号所表示的区块中的区块交易数据。

当上述区块号区间(C,N]中的各区块号所表示的区块中的区块交易数据恢复出来后, 可以进一步执行恢复出的区块交易数据,通过重新执行交易的方式,生成与上述区块号 区间(C,N]中的各区块号所表示的区块中的区块交易数据对应的上述其它类型的区块链 数据。

例如,在一个例子中,假设节点设备搭载5个不同的存储系统,分别将区块交易数据、以及与区块交易数据对应的区块的区块头数据、与区块交易数据对应的交易收据、state数据、以及上述4种数据对应的索引数据,存储在这5个不同的存储系统中;其中, 存储上述区块交易数据的目标存储系统开启了WAL模式;则在对上述其它类型的区块链 数据进行恢复时,则可以在读取到上述区块号区间(C,N]中的各区块号所表示的区块中 的区块交易数据对应的WAL日志文件后,基于该WAL日志文件先对上述区块交易数据进 行恢复,并在上述区块交易数据恢复完成后,通过重新执行上述区块交易数据的方式, 对与上述区块交易数据对应的区块头数据、对应的交易收据、对应的state数据以及对应 的索引数据分别进行恢复。

其中,通过重新执行区块中的交易数据,生成该区块的区块头数据、与上述交易数据对应的交易数据、对应的state数据、以及对应的索引数据的具体方式,为区块链领 域的公知常识,在本说明书中不再进行详述,本领域技术人员在将本说明书的技术方案 辅助实现时,可以参考相关技术中的记载。

在示出的一种实施方式中,节点设备在对上述目标存储系统中存储的区块交易数据 进行恢复时,可以周期性确定上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,可以触发生成上述第二事件。

在示出的另一种实施方式中,节点设备在对目标存储系统中存储的区块交易数据进 行恢复时,也可以响应于用户手动触发的针对上述区块交易数据进行恢复的指令,来确定上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,可以触发生成上述第二事件。

例如,在实际应用中,节点设备除了可以周期性检查上述目标存储系统是否满足上 述checkpiont事件的触发条件以外,用户也可以通过手动输入恢复指令的方式,来触发节点设备检查上述目标存储系统是否满足上述checkpiont事件的触发条件;比如,在一 些恢复场景中,用户可能需要对上述目标存储系统存储的区块链交易数据进行数据回滚 操作,将上述目标存储系统存储的区块交易数据恢复到某一个历史区块对应的数据版本。 在这种场景中,用户可以通过手动输入恢复指令的方式,来触发节点设备检查上述目标 存储系统是否满足上述checkpiont事件的触发条件。

当触发生成了上述第二事件,节点设备可以响应于该第二事件,从与上述目标存储 系统对应的日志缓冲区,读取日志缓冲区中存储的区块交易数据对应的WAL日志文件;然 后,基于读取到的WAL日志文件,恢复出与区块交易数据,再将恢复出的区块交易数据,写入上述目标存储系统。

以上技术方案中,一方面,由于区块链搭载的多个存储系统中,可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与该区块交易数据对 应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式;因此,对于搭载 多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据对应的WAL日志 文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多 种区块链数据时的存储开销;

另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据, 是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的 节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。

与上述方法实施例相对应,本申请还提供了装置的实施例。

与上述方法实施例相对应,本说明书还提供了一种区块链数据恢复装置的实施例。

本说明书的区块链数据恢复装置的实施例可以应用在电子设备上。装置实施例可以通过 软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意 义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读 取到内存中运行形成的。

从硬件层面而言,如图2所示,为本说明书的区块链数据恢复装置所在电子设备的一种 硬件结构图,除了图2所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例 中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘 述。

图3是本说明书一示例性实施例示出的一种区块链数据恢复装置的框图。

请参考图3,所述区块链数据恢复装置30可以应用在前述图2所示的电子设备中,所述 节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易 数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的 目标存储系统支持预写日志WAL模式;所述装置30包括:

读取模块301,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;

恢复模块302,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;

写入模块303,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。

在本实施例中,所述装置30还包括:

第一确定模块304(图3中未示出),确定所述各存储系统存储的所述其它类型的区块 链数据对应的区块号中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N;如果是,生成所述第一事件。

在本实施例中,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链 数据对应的最新区块号的最小值;

所述第一确定模块304进一步:

在确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否 小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,计算所述各存储 系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值,得到所述最新区 块号C。

在本实施例中,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链 数据对应的区块号。

在本实施例中,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数 据格式。

在本实施例中,所述数据标识采用了WAL日志文件的LSN日志序列编号的数据格式。

在本实施例中,所述读取模块301:

分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N]中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;

所述恢复模块302:

基于读取到的所述区块号区间(C,N]中的各区块号表示的区块中的区块交易数据对 应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。

在本实施例中,所述第一确定模块304(图3中未示出):

周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C, 是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,

响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存 储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。

在本实施例中,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:

与所述区块交易数据对应的区块的区块头数据;

与所述区块交易数据对应的交易收据;

在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态数据。

在本实施例中,所述写入模块303进一步:

响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区 块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。

在本实施例中,所述装置30还包括:

第二确定模块305(图3中未示出),确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,生成所述第二 事件。

在本实施例中,所述第二确定模块305:

周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件 数量或者存储容量是否达到阈值;或者,

响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系 统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者 由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个 人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、 导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任 意几种设备的组合。

在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口 和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易 失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术 来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机 的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随 机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可 编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、 数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯 的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的 信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media), 如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包 含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括 没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。 在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素 的过程、方法、商品或者设备中还存在另外的相同要素。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一 些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍 然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺 序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是 有利的。

在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在 限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用 的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其 他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目 的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述 各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。 例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息, 类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以 被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一 个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等 同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

相关技术
  • 一种区块链节点的数据恢复方法、装置及电子设备
  • 区块链数据恢复方法及装置、电子设备
技术分类

06120114692269