一种区块链数据归档方法、装置和计算机可读存储介质与流程

文档序号:20918124发布日期:2020-05-29 13:47阅读:146来源:国知局
一种区块链数据归档方法、装置和计算机可读存储介质与流程

本发明涉及通信技术领域,具体涉及一种区块链数据归档方法、装置和计算机可读存储介质。



背景技术:

近年来,随着区块链技术的发展,区块链系统的在交易领域应用也越来越广泛。随着区块链系统运行的时间增加,就会导致区块链系统中各节点的区块链数据占用的存储空间越来越大。为了避免区块链数据占用较大的空间,就需要周期性的对区块链数据进行归档。现有的区块链数据归档方法是通过周期性的生成账本快照,然后将账本快照存储至专门的分布式存储系统,最后将快照点之前的区块、交易信息和回执等区块数据在本地进行删除来降低存储空间。

在对现有技术的研究和实践过程中,本发明的发明人发现对于现有的区块链数据归档方法来说,由于在生成账本快照时,区块链系统仍然在正常的提供交易服务,如果对记账节点的状态数据进行快照读写时,还存在交易时,就会与交易产生冲突,导致快照读取失败或者快照读取的数据不准确,而且生成的状态数据快照还缺乏公信力,因此,就会导致区块链数据的归档效率和归档效果大大降低。



技术实现要素:

本发明实施例提供一种区块链数据归档方法、装置和计算机可读存储介质。可以提升区块链数据的归档效率和归档效果。

一种区块链数据归档方法,包括:

所述第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,所述同步后区块链数据包括状态数据;

当所述同步区块高度达到预设归档点对应的区块高度时,所述第一记账节点在所述状态数据中确定当前交易所需的目标状态数据,并对所述目标状态数据进行备份;

所述第一记账节点根据备份后的目标状态数据生成所述同步区块高度的状态数据快照,并将所述状态数据快照、所述同步区块高度和所述第一记账节点的签名信息作为归档点信息发送至所述第二记账节点;

所述第一记账节点接收所述第二记账节点针对所述归档点信息的背书信息,所述背书信息用于指示所述第二记账节点对所述归档点信息的认可;

所述第一记账节点根据所述背书信息和所述归档点信息对所述同步后区块链数据进行归档。

相应的,本发明实施例提供一种区块链数据归档装置,包括:

同步单元,用于所述第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,所述同步后区块链数据包括状态数据;

确定单元,用于当所述同步区块高度达到预设归档点对应的区块高度时,所述第一记账节点在所述状态数据中确定当前交易所需的目标状态数据,并对所述目标状态数据进行备份;

生成单元,用于所述第一记账节点根据备份后的目标状态数据生成所述同步区块高度的状态数据快照,并将所述状态数据快照、所述同步区块高度和所述第一记账节点的签名信息作为归档点信息发送至所述第二记账节点;

接收单元,用于所述第一记账节点接收所述第二记账节点针对所述归档点信息的背书信息,所述背书信息用于指示所述第二记账节点对所述归档点信息的认可;

归档单元,用于所述第一记账节点根据所述背书信息和所述归档点信息对所述同步后区块链数据进行归档。

可选的,在一些实施例中,所述确定单元,具体可以用于所述第一记账节点获取所述子状态数据对应的区块高度和在本地数据库中的存储标签;所述第一记账节点将所述子状态数据对应的区块高度添加至所述存储标签进行标记,得到标记后存储标签;所述第一记账节点根据所述标记后存储标签,在所述状态数据中筛选出当前交易所需的目标子状态数据,得到所述目标状态数据;所述第一记账节点对所述目标子状态数据进行备份。

可选的,在一些实施例中,所述确定单元,具体可以用于所述第一记账节点获取所述当前交易对应的交易信息;所述第一记账节点根据所述交易信息,确定所述第一记账节点的当前区块链数据的当前区块高度;当所述当前区块高度超过所述同步区块高度时,所述第一记账节点确定在所述当前区块链数据中存在新区块;所述第一记账节点在所述当前区块链数据中筛选出所述新区块中交易需要的调用信息,所述调用信息用于指示调用的所述子状态数据;所述第一记账节点根据所述调用信息和标记后存储标签,在所述状态数据中筛选出所述目标子状态数据,得到所述目标状态数据。

可选的,在一些实施例中,所述确定单元,具体可以用于所述第一记账节点在所述交易信息中筛选出所述新区块交易需要的交易操作信息;所述第一记账节点根据所述交易操作信息,确定所述目标子状态数据对应的交易操作类型;当所述交易操作类型为更新操作时,所述第一记账节点将所述更新操作对应的目标子状态数据进行备份,得到备份后的目标状态数据;当所述交易操作类型为删除操作时,所述第一记账节点将所述删除操作对应的目标子状态数据进行备份,对备份后的目标子状态数据添加删除标签,得到备份后的目标状态数据,所述备份后的目标状态数据在交易执行时不能被读取。

可选的,在一些实施例中,所述生成单元,具体可以用于所述第一记账节点在所述状态数据中筛选出区块高度不超过所述同步区块高度的同步子状态数据,得到同步子状态数据集合;所述第一记账节点将所述备份后的目标子状态数据添加至所述同步子状态数据集合,以更新所述同步子状态数据集合;所述第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据;所述第一记账节点对所述目标结构的状态数据进行拷贝,以生成所述状态数据对应的状态数据快照。

可选的,在一些实施例中,所述归档单元,具体可以用于所述第一记账节点根据所述背书信息,确定发送所述背书信息的第二记账节点的背书数量;当所述背书数量超过预设数量阈值时,所述第一记账节点将所述背书信息添加至所述归档点信息进行更新,得到更新后归档点信息;所述第一记账节点将所述更新后归档点信息发送至所述共识节点;当所述第一记账节点接收到所述共识节点发送的配置区块数据时,所述第一记账节点对所述同步后区块链数据进行归档。

可选的,在一些实施例中,所述归档单元,具体可以用于所述第一记账节点对所述更新后归档点信息进行拷贝,以生成所述第一记账节点在所述同步区块高度的数据快照;所述第一记账节点将所述配置区块数据添加至所述第一区块数据进行更新,得到更新后第一区块数据;所述第一记账节点在所述更新后第一区块数据中筛选出区块高度未超过所述同步区块高度的目标区块数据;所述第一记账节点将所述目标区块数据进行删除。

可选的,在一些实施例中,所述归档单元,具体可以用于所述共识节点在所述更新后归档点信息中筛选出所述背书信息和所述签名信息;所述共识节点对所述背书信息和所述签名信息进行校验;当所述背书信息和所述签名信息校验通过时,所述共识节点生成配置区块,并将所述更新后归档点信息存储至所述配置区块,得到配置区块数据;所述共识节点将所述配置区块数据发送至所述第一记账节点和第二记账节点。

可选的,在一些实施例中,所述区块链数据归档装置还可以包括背书单元和更新单元。所述背书单元,具体可以用于当所述第一记账节点接收到所述第二记账节点发送的所述归档点信息时,所述第一记账节点在所述归档点信息中提取出所述第二记账节点的状态数据的根哈希值,所述第一记账节点将所述第二记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比;当所述第二记账节点的状态数据中的根哈希值与自身状态数据的根哈希值相同时,所述第一记账节点对所述归档点信息进行签名,得到所述归档点信息的背书信息;所述第一记账节点将所述背书信息发送至第二记账节点,并将所述归档点信息在所述区块链系统中进行广播。

可选的,在一些实施例中,所述更新单元,具体可以用于当所述第一记账节点为所述区块链系统中新增的记账节点时,所述第一记账节点向所述共识节点发送同步请求,并接收所述共识节点针对所述同步请求发送的背书信息和归档点信息;所述第一记账节点根据所述背书信息和所述归档点信息,从所述第二记账节点获取状态数据;所述第一记账节点从所述共识节点或第二记账节点获取所述同步区块高度以后的第二区块数据;所述第一记账节点根据所述第二区块数据中的交易信息,对所述状态数据进行更新,得到所述第一记账节点的当前区块链数据。

可选的,在一些实施例中,所述更新单元,具体可以用于所述第一记账节点对所述背书信息和所述第二记账节点的签名信息进行校验;当所述背书信息和第二记账节点的签名信息校验通过时,所述第一记账节点确定所述根哈希值对应的多个叶哈希值;所述第一记账节点从所述第二记账节点中分别获取不同叶哈希值对应的子状态数据,以并行获取所述状态数据。

可选的,在一些实施例中,所述更新单元,具体可以用于所述第一记账节点根据所述第二记账点的数量对所述叶哈希值进行分类;所述第一记账节点根据分类结果,确定所述第二记账节点对应的目标叶哈希值;所述第一记账节点从所述第二记账节点获取所述目标叶哈希值对应的子状态数据,得到所述状态数据。

此外,本发明实施例还提供一种电子设备,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序实现本发明实施例提供的区块链数据归档方法。

此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种区块链数据归档方法中的步骤。

本发明实施例在第一记账节点与共识节点进行区块链数据同步后,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档;由于该方案可以备份当前交易所需的目标状态数据,并基于备份后的目标状态数据生成状态数据快照,解决了快照和原有交易的冲突问题,实现了对状态数据的实时快照,而且让区块链中的其他记账节点针对状态数据快照等信息进行签名背书,使得这些信息具有公信力,因此,可以大大提升区块链数据归档的归档效率和归档效果。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的区块链数据归档方法的场景示意图;

图2是本发明实施例提供的区块链数据归档的流程示意图;

图3是本发明实施例提供的子状态数据备份的示意图;

图4是本发明实施例提供的状态数据对应的默克尔树的快照示意图;

图5是本发明实施例提供的第一记账节点的区块链数据归档示意图;

图6是本发明实施例提供的区块链系统中区块链数据归档的流程示意图;

图7是本发明实施例提供的状态数据对应的默克尔树的结构示意图;

图8是本发明实施例提供的第一记账节点构建本地世界状态的流程示意图;

图9是本发明实施例提供的区块链数据归档的另一流程图;

图10是本发明实施例提供的第一记账节点获取最新的区块链数据的流程示意图;

图11是本发明实施例提供的区块链数据归档装置的第一结构示意图;

图12是本发明实施例提供的区块链数据归档装置的确定单元的结构示意图;

图13是本发明实施例提供的区块链数据归档装置的归档单元的结构示意图;

图14是本发明实施例提供的区块链数据归档装置的第二结构示意图;

图15是本发明实施例提供的区块链数据归档装置的第三结构示意图;

图16是本发明实施例提供的电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种区块链数据归档方法、装置和计算机可读存储介质。其中,该区块链数据归档装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。

其中,本申请的区块链数据归档方法主要应用于区块链系统中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。

区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。

平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。

其中,该电子设备可以包括共识节点和多个记账节点,记账节点可以为负责通过执行链码实现对账本的读写操作,也可以称之为peer节点,主要负责维护状态数据和账本的副本。共识节点也可以称之为共识排序节点(orderer),在区块链系统中主要用于接收包含背书签名信息的交易,对未打包的交易进行排序生成区块,并广播给peer节点,在区块链系统中共识节点可以为一个节点,还可以为节点集群。在本申请中,为了描述方便,特需要进行归档操作的记账节点称为第一记账节点,将其他记账节点称为第二记账节点。

其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(contentdeliverynetwork,cdn)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

例如,参见图1,以区块链数据归档装置集成在电子设备中为例,电子设备中的第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,该同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档。

其中,区块链数据可以区块链中包含的区块数据和描述世界状态的状态数据组成,其中区块数据是描述实际区块链上发生的每一笔交易的记录,区块数据又可以包括普通区块数据和配置区块数据。状态数据可以为记录了每个账户和智能合约的当前状态。

其中,归档可以理解为数据归档,主要是指的是对区块链数据中的一些重要数据进行拷贝,生成快照,再就是对一定范围内的区块数据进行删除或者转存至其他分布式存储的冷存储中,以节省记账节点的本地数据库中的存储空间。

以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。

本实施例将从区块链数据归档装置的角度进行描述,该区块链数据归档装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备;其中,该终端可以包括平板电脑、笔记本电脑、以及个人计算(pc,personalcomputer)等设备。

一种区块链数据归档方法,包括:

第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,该同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档。

如图2所示,该区块链数据归档方法的具体流程如下:

101、第一记账节点与共识节点进行区块链数据同步,并确定同步后区块数据的同步区块高度。

其中,同步后区块数据包括状态数据,状态数据可以为记录了每个账户和智能合约的当前状态。

其中,同步区块高度可以为第一记账节点与共识节点进行区块数据同步后的同步后区块链数据的区块高度,比如,第一记账节点的同步后区块链数据中存在5个区块,则同步区块高度就可以为5。

例如,第一记账节点可以向共识节点发送同步请求,该同步请求中可以携带第一记账节点的身份标识,共识节点在接收到同步请求后,确定第一记账节点的身份没有问题时,将共识节点的最新的区块发送至第一记账节点,第一记账节点接收到最新的区块后,根据接收到的最新的区块,对区块链数据进行更新,更新完成后就完成了区块链数据同步,得到同步后区块链数据。第一记账节点在同步后区块链数据中识别出存在的区块数量,根据区块数量确定同步后区块链数据的同步区块高度,比如,同步后区块链数据中包含5个区块,则同步后区块链数据的同步区块高度为5。

其中,第一记账节点向共识节点发送同步请求的时间可以为需要进行归档时触发这个同步请求,也可以每隔一个时间段,第一记账节点自动触发同步请求的发送,比如,第一记账节点可以设定每隔5分钟或每隔20分钟等时间段就触发一次同步请求,然后确定同步后区块链数据的同步区块高度。

102、当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份。

其中,状态数据可以包括多个子状态数据,这些子状态数据存储在第一记账节点的本地数据库。

例如,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签,第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签,第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,第一记账节点对目标子状态数据进行备份。具体可以如下:

s1、当同步区块高度达到预设归档点对对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签。

其中,存储标签可以为在本地数据库的键值对k-v(key-value),每一个k(键)对应一个v(值),比如,某一个子状态数据在本地数据库中的存储标签就可以为k1-v1。k1为子状态数据在本地数据库中的编号,v1为这个编号在本地数据库中对应的值。

例如,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点触发归档操作,预设归档点对应的区块高度可以包含间隔相同的多个区块高度,比如,可以设定每隔10个区块就进行归档,则预设归档点对应的区块高度就可以包含区块高度为10的整数倍,譬如,10,20,30,…,10n。不同的子状态数据可能对应不同的区块高度,第一记账节点根据子状态数据对应的区块编号,确定子状态数据对应的区块高度,比如,第一子状态数据对应的第一区块,就可以说明第一子状态数据的区块高度就为1,第二子状态数据对应的第三区块,就可以说明第二子状态数据的区块高度为3。第一记账节点并在本地数据库中读取出每一个子状态数据对应的键值对,将该键值对作为子状态数据的存储标签。

s2、第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签。

例如,第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,比如,第一记账节点可以在子状态数据的存储标签中添加一个版本号(version),将这个子状态数据对应的区块高度作为版本号,譬如,子状态数据对应的区块高度为5,存储标签为(k1-v1),则对存储标签添加区块高度这个版本号进行标记后,标记后存储标签就可以为(k1-v1,版本(5))。

s3、第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据。

例如,第一记账节点获取当前交易对应的交易信息,第一记账节点根据获取到的交易信息,确定第一记账节点的区块链数据的当前区块高度,比如,在触发归档操作后,如果当前交易中还存在交易信息,就意味着此时记账节点还在进行交易,因此,就会接收共识节点发送的新区块,此时,第一记账节点就需要根据当前的区块链数据,确定区块链数据的当前区块高度,在此需要说明的是,此时区块链数据并不是同步后区块链数据,当前的区块链数据时继续产生交易后对同步后区块链数据进行更新得到的区块链数据。因此,当前区块链数据与同步后区块链数据的区块高度就有可能不一样。如果当前没有产生交易信息,就意味此时的当前区块链数据就为同步后区块链数据。当当前区块高度超过同步区块高度时,第一记账节点就确定在当前区块链数据中存在新区块,第一记账节点在当前区块链数据中筛选出新区块中交易需要的调用信息,调用信息用于指示调用的子状态数据,比如,可以为当前交易需要调用状态数据中的哪个区块高度的哪些子状态数据,譬如,需要调用区块高度为3,子状态数据值为v1的子状态数据。第一记账节点根据调用信息确定需要调用的子状态数据的标记后存储标签,根据确定的标记后存储标签在状态数据中筛选出目标子状态数据,比如,还是以调用信息为需要调用区块高度为3,子状态数据值为v1的子状态数据为例,第一记账节点就可以确定需要调用的目标子状态数据的标记后存储标签为(k1-v1,版本(5)),第一记账节点根据这个标记后存储标签在状态数据中筛选出目标子状态数据,就可以得到目标状态数据。

s4、第一记账节点对目标子状态数据进行备份。

例如,第一记账节点在当前区块链数据的交易信息中筛选出新区块交易需要的交易操作信息,交易操作信息中包含了交易过程中调用的这些目标子状态数据的操作类型,通常操作类型可以为更新或删除等操作类型,第一记账节点根据交易操作信息,确定目标子状态数据对应的交易操作类型,比如,将交易操作信息中的各个目标子状态数据的交易操作类型进行一一对应,最后,确定每一个目标子状态数据对应的交易操作类型。根据目标子状态数据的交易操作类型来备份目标子状态数据,如图3所示,当目标子状态数据的交易操作类型为更新操作时,将更新操作对应的目标子状态数据直接进行备份,比如,更新操作对应的目标子状态数据为(k1-v1,版本(5))对应的子状态数据,则直接将这个子状态数据进行备份即可,将这些备份后的子状态数据作为备份后的目标状态数据。当目标子状态数据的交易操作类型为删除操作时,第一记账节点对删除操作对应的目标子状态数据进行备份,比如,以删除操作对应的目标子状态数据为(k3-v3,版本(4))为例,第一记账节点就直接对这个目标子状态数据进行备份,然后,对备份后的目标子状态数据添加删除标签,比如,以删除操作对应的目标子状态数据为(k3-v3,版本(4))为例,在这个备份后的目标子状态数据中添加一个删除标记,这个删除标记可以为任意标识,譬如,可以为deleted、d还可以直接为中文字符“删除”,还有其他的删除标识符,以删除为例,则标记后的目标子状态数据的存储标签可以为(k3-v3,版本(4),删除)。第一记账节点添加这个删除标识符之后,就会使得备份后的目标子状态数据在交易时不能被读取,将这些添加删除标签的备份后的子状态数据作为备份后的目标状态数据。

103、第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。

其中,状态数据快照可以为对状态数据进行快照拷贝,得到的状态数据的快照。

例如,第一记账节点在状态数据中筛选出区块高度不超过同步区块高度的同步子状态数据,得到同步子状态数据集合,第一记账节点将备份后的目标子状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,第一记账节点对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。具体可以如下:

(1)第一记账节点在状态数据中筛选出区块高度不超过同步区块高度的同步子状态数据,得到同步子状态数据集合。

例如,第一记账节点在状态数据中筛选出区块高度不超过同步区块高度的同步子状态数据,得到同步子状态数据集合,比如,根据状态数据中子状态数据的标记后存储标签,将区块高度不超过同步区块高度的同步子状态数据筛选出来,譬如,以同步区块高度为5,第一记账节点在本地数据库中筛选出标记后存储标签中区块高度不超过5的子状态数据筛选出来,将这些筛选出来的子状态数据作为同步子状态数据,最后可以得到同步子状态数据集合。

(2)第一记账节点将备份后的目标状态数据添加至同步子状态数据集合,以更新同步子状态数据集合。

例如,第一记账节点将备份后的目标状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,比如,备份后的目标状态数据包含备份的更新操作对应的目标子状态数据和添加删除标签的备份后的目标子状态数据,由于新区块中交易的原因,同步子状态数据中更新操作对应的目标子状态数据有可能已经被更新,删除操作对应的目标子状态数据可能已经被删除了,因此,对于更新操作对应的目标子状态数据,就需要利用备份后的更新操作对应的目标子状态数据对这个目标子状态数据进行替换,比如,以更新操作对应的目标子状态数据为(k1-v1,版本(5)),在新区块的交易中,被更新为(k1-v1’,版本(5+1)),则此时,就需要利用先前备份的(k1-v1,版本(5))这个目标子状态数据进行替换,就可以保证生成状态数据快照时,目标子状态数据的准确性。对于删除操作对应的目标子状态数据来说,由于在交易过程中,备份后的这个目标子状态数据添加删除标签,因此,在交易过程中没有被读取到,也就不会被删除,但是未添加删除标签的这个目标子状态数据可能就已经在交易过程中被删除了,所以,同步后子状态数据集合中这个目标子状态数据就有可能已经不存在了,因此,将这个添加删除标签的备份后的目标子状态添加至同步子状态数据集合中,用于补充被删除的目标子状态数据的位置。通过替换和添加的操作,就可以得到更新后的同步子状态数据集合。第一记账节点就可以保证无论怎么交易,同步区块高度以内的状态数据的完整性,就可以保证在对状态数据作快照时,同步区块高度的状态数据快照的准确性。

(3)第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,并对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照。

例如,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,比如,以更新后的同步子状态数据集合包括10个k-v,(k1-v1)—(k10-v10)为例,第一记账节点可以将这些同步子状态数据进行分类,譬如,将(k1-v1)、(k2-v2)和(k3-v3)分为第一类,将(k4-v4)、(k5-v5)和(k6-v6)分为第二类,将(k7-v7)、(k8-v8)和(k9-v9)分为第三类,将(k10-v10)分为第四类,分别对四个类型的同步子状态数据进行哈希运算,得到每个类型对应的哈希值h1、h2、h3和h4,再分别对h1、h2、h3和h4进行哈希运算,中间哈希值h5和h6,继续对中间哈希值h5和h6进行哈希运算,得到根哈希值h7。根据计算出的这些哈希值,生成目标结构的状态数据,比如,可以根据这些哈希值,构建一个默克尔树(merkletree),将每个类型对应的哈希值h1、h2、h3和h4作为默克尔树的叶哈希值,将h5和h6作为默克尔树的中间哈希值,将h7作为默克尔树的根节点哈希值。第一记账节点对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照,比如,以更新后的同步子状态数据集合包括10个k-v,(k1-v1)—(k10-v10)为例,对生成的默克尔树的状态进行拷贝,然后,生成默克尔树的快照,如图4所示。

(4)第一记账节点将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。

例如,第一记账节点将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。比如,第一记账节点对状态数据快照进行签名,生成签名信息。第一记账节点将签名信息、状态数据和同步区块高度打包成归档点信息发送至区块链系统的第二记账节点。

104、第一记账节点接收第二记账节点针对归档点信息的背书信息。

其中,背书信息为用于指示第二记账节点对归档点信息的认可。比如,第二记账节点对第一记账节点发送的归档点信息中的状态数据快照中的根哈希值进行校验,如果第一记账节点的状态数据快照中的根哈希值与自身的状态数据快照中的根哈希值相同,第二记账节点就对该归档点信息认可,并对归档点信息进行签名,生成背书信息。

例如,当第一记账节点向第二记账节点发送归档点信息后,第二记账节点将归档点信息中的状态数据快照中的根哈希值与自身的状态数据快照中的根哈希值进行比较,当第一记账节点与自身的状态数据快照中的根哈希值相同,第二记账节点就向第一记账节点发送背书信息,并将归档点信息向其他第二记账节点进行广播。第一记账节点接收第二记账节点针对归档点信息的背书信息。

105、第一记账节点根据背书信息和归档点信息对同步后区块链数据进行归档。

例如,第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量,当背书数量超过预设数量阈值时,第一记账节点将背书信息添加归档点信息进行更新,得到更新后归档点信息。第一记账节点将更新后归档点信息发送至共识节点,当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。具体可以如下:

(1)第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量。

例如,第一记账节点根据接受到的背书信息,确定发送背书信息的第二记账节点的背书数量,比如,第一记账节点接收到了5个背书信息,就可以确定发送背书信息的第二记账节点的数量为5。

(2)当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息。

例如,当背书数量超过预设数量阈值时,比如,预设数量阈值可以为全部第二记账节点的1/2、1/3或者其他比例对应的数量,还可以直接为一个具体的数量,譬如,3个、5个或者7个等。当发送背书信息的第二记账节点的数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息中,和第一记账节点的签名信息一起组成针对同步区块高度的状态数据的签名证据信息,得到更新后归档点信息。

(3)第一记账节点将更新后归档点信息发送至共识节点。

例如,第一记账节点将更新后归档点信息发送至共识节点,共识节点在更新后归档点信息中筛选出背书信息和签名信息,共识节点对背书信息和签名信息进行校验,比如,共识节点对背书信息和第一记账节点的签名信息组成的签名证据信息进行校验,具体的校验可以为对背书信息的数量进行校验,当超过预设数量阈值就认为校验通过,或者还可以对背书信息对应的第二记账节点的身份标识进行校验,当存在预设的第二记账节点就认为校验通过,或者还可以对第一记账节点的签名信息进行检验,是否满足预设的签名格式或者签名规则等,如果满足预设签名格式或签名规则等,就认为校验通过,校验规则可以根据实际应用来进行设定。当背书信息和签名信息通过校验时,共识节点生成配置区块,并将更新后归档点信息存储至配置区块,得到配置区块数据。共识节点将配置区块数据发送至第一记账节点和第二记账节点。

(4)当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

例如,第一记账节点对更新后归档信息进行拷贝,以生成第一节点在同步区块高度的数据快照,比如,第一记账节点对更新后归档信息中的同步区块高度、签名信息和背书信息进行拷贝,生成这些数据对应的数据快照,然后,将这些数据对应的数据快照和状态数据快照构成同步区块高度的数据快照。第一记账节点将配置区块数据添加至第一区块数据进行更新,得到更新后第一区块数据。第一记账节点在更新后第一区块数据中筛选出区块高度未超过同步区块高度的目标区块数据,比如,以同步区块高度为h为例,则在更新后第一区块数据中筛选出普通区块数据,在筛选出的普通区块数据中提取出区块高度未超过5的目标区块数据,第一记账节点将目标区块数据进行删除,如图5所示。

可选的,当第二记账节点接收到配置区块数据之后,第二记账节点提取出配置区块数据中的签名信息、背书信息、状态数据快照和同步区块高度,对这些数据进行拷贝,生成同步区块高度的数据快照。第二记账节点将配置区块数据添加至第二记账节点的区块链数据进行更新,在更新后的第二记账节点的区块链数据中筛选出区块高度未超过同步区块高度的第二记账节点的目标区块数据,第二记账节点将第二记账节点的目标区块数据进行删除,以完成归档。

其中,第一记账节点和第二记账节点对未超过同步区块高度的目标区块数据进行归档的过程可以是同时归档,也可以是不同时归档,整个归档过程可以如图6所示。在归档过程中,对于删除的那些目标区块数据还可以存储至分布式的存储系统的冷存储中。

可选的,当第二记账节点触发区块链数据同步请求时,第二记账节点的区块链数据的区块高度达到预设归档点对应的区块高度后,第二节点会将生成的状态数据快照、同步区块高度和第二记账节点的签名信息作为归档点信息发送至第一记账节点。当第一记账节点接收到第二记账节点发送的归档点信息时,第一记账节点在归档点信息中提取出第二记账节点的状态数据快照,在状态数据快照中获取状态数据的根哈希值,第一记账节点将第二记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比。当第二记账节点的状态数据的根哈希值与第一记账节点自身的状态数据的根哈希值相同时,第一记账节点对归档点信息进行签名,表示对归档点信息的认可,得到第一记账节点针对该归档点信息的背书信息。第一记账节点将背书信息发送至第二记账节点,并将归档点信息在区块链系统中进行广播。

可选的,当第一记账节点为区块链系统中新增的记账节点时,第一记账节点向共识节点发送同步请求,共识节点在接收到同步请求后,共识节点向第一记账节点发送针对该同步请求的背书信息和归档点信息,第一记账节点接收到背书信息和归档点信息后,从第二记账节点获取目标结构的状态数据,具体的获取过程可以如下:

(1)第一记账节点对背书信息和第二记账节点的签名信息进行校验。

例如,第一记账节点可以对背书信息对应的第二记账节点的背书数量进行校验,还可以对第二记账节点的签名信息进行校验。校验规则主要通过校验安全性入手,比如,校验规则可以为背书数量超过预设数量阈值时,就确定校验通过,校验规则还可以为背书信息是否符合预设的背书规则或者背书要求,第二记账节点的签名信息是否符合预设的签名规则或者签名要求等。具体的校验规则可以根据实际应用来设定。

(2)当背书信息和第二记账节点的签名信息校验通过时,第一记账节点确定根哈希值对应的对个叶哈希值。

例如,当背书信息和第二记账节点的签名信息校验通过时,第一记账节点根据状态数据的根哈希值来确定根哈希值对应的多个叶哈希值,比如,以状态数据对应的默克尔树如图7所示,根哈希值为h7,则第一记账节点在该默克尔树中可以确定的叶哈希值为h1、h2、h3和h4。

(3)第一记账节点从第二记账中分别获取不同叶哈希值对应的子状态数据,以并行获取状态数据。

例如,第一记账节点根据第二记账节点的数量对叶哈希值进行分类,比如,第二记账节点的数量为2个,则第一记账节点可以将h1和h2分为一类,将h3和h4分为一类。然后,第一记账节点根据分类结果,确定第二记账节点对应的目标叶哈希值,比如,第一记账节点可以将分为一类的h1和h2作为第二记账节点a对应目标叶哈希值,将另一类h3和h4作为第二记账节点b对应的目标叶哈希值。第一记账节点从第二记账节点获取目标叶哈希值对应的子状态数据,得到状态数据,比如,第一记账节点可以从第二记账节点a处获取h1和h2对应的子状态数据(k1-v1)至(k6,v6),从第二记账节点b处获取h3和h4对应的子状态数据(k7,v7)至(k10,v10),如图8所示,就可以得到状态数据,利用得到状态数据可以构建第一记账节点本地的世界状态。

在第一记账节点获取到状态数据之后,第一记账节点从共识节点或第二记账节点获取同步区块高度以后的第二区块数据。比如,同步区块高度为5时,则第一记账节点从共识节点或第二记账节点获取区块高度超过5的第二区块数据。第一记账节点获取第二区块数据中的交易信息,根据获取到的交易数据对状态数据进行更新,比如,可以回放区块中的交易,使得第一记账节点的世界状态进行更新,以同步到共识节点和第二记账节点最新的世界状态,得到第一记账节点的当前区块链数据。

由以上可知,本实施在第一记账节点与共识节点进行区块链数据同步后,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档;由于该方案可以备份当前交易所需的目标状态数据,并基于备份后的目标状态数据生成状态数据快照,解决了快照和原有交易的冲突问题,实现了对状态数据的实时快照,而且让区块链中的其他记账节点针对状态数据快照等信息进行签名背书,使得这些信息具有公信力,因此,可以大大提升区块链数据归档的归档效率和归档效果。

根据上面实施例所描述的方法,以下将举例作进一步详细说明。

在本实施例中,将以该区块链数据归档装置具体集成在电子设备,电子设备中包含共识节点、第一记账节点和第二记账节点为例进行说明。

如图9所示,一种区块链数据归档方法,具体流程如下:

201、第一记账节点与共识节点进行区块链数据同步,并确定同步后区块数据的同步区块高度。

例如,第一记账节点可以向共识节点发送同步请求,该同步请求中可以携带第一记账节点的身份标识,共识节点在接收到同步请求后,确定第一记账节点的身份没有问题时,将共识节点的最新的区块发送至第一记账节点,第一记账节点接收到最新的区块后,根据接收到的最新的区块,对区块链数据进行更新,更新完成后就完成了区块链数据同步,得到同步后区块链数据。第一记账节点在同步后区块链数据中识别出存在的区块数量,根据区块数量确定同步后区块链数据的同步区块高度。

202、当同步区块高度达到预设归档点对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签。

例如,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定每一个子状态数据对应的区块编号,然后,根据确定出的区块编号得出每一个子状态数据对应的区块高度,比如,第一子状态数据对应的第一区块,就可以说明第一子状态数据的区块高度就为1,第二子状态数据对应的第三区块,就可以说明第二子状态数据的区块高度为3。第一记账节点并在本地数据库中读取出每一个子状态数据对应的键值对,将该键值对作为子状态数据的存储标签。

203、第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签。

例如,第一记账节点可以在子状态数据的存储标签中添加一个版本号(version),将这个子状态数据对应的区块高度作为版本号,比如,子状态数据对应的区块高度为5,存储标签为(k1-v1),则对存储标签添加区块高度这个版本号进行标记后,标记后存储标签就可以为(k1-v1,版本(5))。

204、第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据。

例如,第一记账获取当前交易对应的交易信息,如果当前交易中还存在交易信息,也就意味着此时记账节点还在进行交易,因此,就会接收共识节点发送的新区块,此时,第一记账节点就需要根据当前的区块链数据,确定区块链数据的当前区块高度,如果当前没有产生交易信息,就意味此时的当前区块链数据就为同步后区块链数据。当当前区块高度超过同步区块高度时,第一记账节点就确定在当前区块链数据中存在新区块,第一记账节点在当前区块链数据中筛选出新区块中交易需要的调用信息,比如,调用信息可以为当前交易需要调用状态数据中的哪个区块高度的哪些子状态数据,譬如,需要调用区块高度为3,子状态数据值为v1的子状态数据。第一记账节点根据调用信息确定需要调用的子状态数据的标记后存储标签,根据确定的标记后存储标签在状态数据中筛选出目标子状态数据,比如,还是以调用信息为需要调用区块高度为3,子状态数据值为v1的子状态数据为例,第一记账节点就可以确定需要调用的目标子状态数据的标记后存储标签为(k1-v1,版本(5)),第一记账节点根据这个标记后存储标签在状态数据中筛选出目标子状态数据,就可以得到目标状态数据。

205、第一记账节点对目标子状态数据进行备份。

例如,第一记账节点在当前区块链数据的交易信息中筛选出新区块交易需要的交易操作信息,将交易操作信息中的各个目标子状态数据的交易操作类型进行一一对应,最后,确定每一个目标子状态数据对应的交易操作类型。根据目标子状态数据的交易操作类型来备份目标子状态数据。当目标子状态数据的交易操作类型为更新操作时,将更新操作对应的目标子状态数据直接进行备份,比如,更新操作对应的目标子状态数据为(k1-v1,版本(5))对应的子状态数据,则直接将这个子状态数据进行备份即可,将这些备份后的子状态数据作为备份后的目标状态数据。当目标子状态数据的交易操作类型为删除操作时,第一记账节点对删除操作对应的目标子状态数据进行备份,比如,以删除操作对应的目标子状态数据为(k3-v3,版本(4))为例,第一记账节点就直接对这个目标子状态数据进行备份,然后,对备份后的目标子状态数据添加删除标签,比如,以删除操作对应的目标子状态数据为(k3-v3,version(4))为例,在这个备份后的目标子状态数据中添加一个删除标记,这个删除标记可以为任意标识,譬如,可以为deleted、d或者中文字符“删除”,还有其他的删除标识符,以deleted为例,则标记后的目标子状态数据的存储标签可以为(k3-v3,版本(4),deleted)。第一记账节点添加这个删除标识符之后,就会使得备份后的目标子状态数据在交易时不能被读取,将这些添加删除标签的备份后的子状态数据作为备份后的目标状态数据。

206、第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。

例如,第一记账节点在状态数据中筛选出区块高度不超过同步区块高度的同步子状态数据,得到同步子状态数据集合,第一记账节点将备份后的目标子状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,第一记账节点对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。具体可以如下:

(1)第一记账节点在状态数据中筛选出区块高度不超过同步区块高度的同步子状态数据,得到同步子状态数据集合。

例如,第一记账节点根据状态数据中子状态数据的标记后存储标签,将区块高度不超过同步区块高度的同步子状态数据筛选出来,譬如,以同步区块高度为5,第一记账节点在本地数据库中筛选出标记后存储标签中区块高度不超过5的子状态数据筛选出来,将这些筛选出来的子状态数据作为同步子状态数据,最后可以得到同步子状态数据集合。

(2)第一记账节点将备份后的目标状态数据添加至同步子状态数据集合,以更新同步子状态数据集合。

例如,备份后的目标状态数据包含备份的更新操作对应的目标子状态数据和添加删除标签的备份后的目标子状态数据,对于更新操作对应的目标子状态数据,就需要利用备份后的更新操作对应的目标子状态数据对这个目标子状态数据进行替换,比如,以更新操作对应的目标子状态数据为(k1-v1,版本(5)),在新区块的交易中,被更新为(k1-v1’,版本(5+1)),则此时,就需要利用先前备份的(k1-v1,版本(5))这个目标子状态数据进行替换。对于删除操作对应的目标子状态数据来说,由于在交易过程中,备份后的这个目标子状态数据添加删除标签,因此,在交易过程中没有被读取到,也就不会被删除,但是未添加删除标签的这个目标子状态数据可能就已经在交易过程中被删除了,所以,同步后子状态数据集合中这个目标子状态数据就有可能已经不存在了,因此,将这个添加删除标签的备份后的目标子状态添加至同步子状态数据集合中,用于补充被删除的目标子状态数据的位置。通过替换和添加的操作,就可以得到更新后的同步子状态数据集合。

(3)第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,并对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照。

例如,以更新后的同步子状态数据集合包括10个k-v,(k1-v1)—(k10-v10)为例,第一记账节点可以将这些同步子状态数据进行分类,譬如,将(k1-v1)、(k2-v2)和(k3-v3)分为第一类,将(k4-v4)、(k5-v5)和(k6-v6)分为第二类,将(k7-v7)、(k8-v8)和(k9-v9)分为第三类,将(k10-v10)分为第四类,分别对四个类型的同步子状态数据进行哈希运算,得到每个类型对应的哈希值h1、h2、h3和h4,再分别对h1、h2、h3和h4进行哈希运算,中间哈希值h5和h6,继续对中间哈希值h5和h6进行哈希运算,得到根哈希值h7。根据计算出的这些哈希值,生成目标结构的状态数据,比如,可以根据这些哈希值,构建一个默克尔树,将每个类型对应的哈希值h1、h2、h3和h4作为默克尔树的叶哈希值,将h5和h6作为默克尔树的中间哈希值,将h7作为默克尔树的根节点哈希值。第一记账节点对目标结构的状态数据进行拷贝,以生成状态数据对应的状态数据快照,比如,以更新后的同步子状态数据集合包括10个k-v,(k1-v1)—(k10-v10)为例,对生成的默克尔树的状态进行拷贝,然后,生成默克尔树的快照,如图4所示。

(4)第一记账节点将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点。

例如,第一记账节点对状态数据快照进行签名,生成签名信息。第一记账节点将签名信息、状态数据和同步区块高度打包成归档点信息发送至区块链系统的第二记账节点。

207、第二记账节点生成针对归档点信息的背书信息,并将背书信息发送至第一记账节点。

例如,当第二记账节点接收到第一记账节点发送的归档点信息时,第二记账节点在归档点信息中提取出第一记账节点的状态数据快照,在状态数据快照中获取状态数据的根哈希值,第二记账节点将第一记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比。当第一记账节点的状态数据的根哈希值与第二记账节点自身的状态数据的根哈希值相同时,第二记账节点对归档点信息进行签名,表示对归档点信息的认可,得到第二记账节点针对该归档点信息的背书信息。第二记账节点将背书信息发送至第一记账节点,并将归档点信息在区块链系统中进行广播。

208、第一记账节点接收第二记账节点针对归档点信息的背书信息。

例如,当第二记账节点通过校验根哈希值,生成针对归档点信息的背书信息后,第一记账节点接收第二记账节点发送的背书信息。

209、第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量。

例如,第一记账节点根据接受到的背书信息,确定发送背书信息的第二记账节点的背书数量,比如,第一记账节点接收到了5个背书信息,就可以确定发送背书信息的第二记账节点的数量为5。

210、当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息,并将归档点信息发送至共识节点。

例如,当背书数量超过预设数量阈值时,比如,预设数量阈值可以为全部第二记账节点的1/2、1/3或者其他比例对应的数量,还可以直接为一个具体的数量,譬如,3个、5个或者7个等。当发送背书信息的第二记账节点的数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息中的签名信息中进行更新,与第一记账节点的签名信息一起组成签名证据信息,得到更新后归档点信息,然后,第一记账节点将更新后归档点信息发送至共识节点。

211、共识节点根据更新后归档点信息生成配置区块数据,并将配置区块数据发送至第一记账节点和第二记账节点。

例如,共识节点对背书信息和第一记账节点的签名信息组成的签名证据信息进行校验,具体的校验可以为对背书信息的数量进行校验,当超过预设数量阈值就认为校验通过,或者还可以对背书信息对应的第二记账节点的身份标识进行校验,当存在预设的第二记账节点就认为校验通过,或者还可以对第一记账节点的签名信息进行检验,是否满足预设的签名格式或者签名规则等,如果满足预设签名格式或签名规则等,就认为校验通过,校验规则可以根据实际应用来进行设定。当背书信息和签名信息通过校验时,共识节点生成配置区块,并将更新后归档点信息存储至配置区块,得到配置区块数据。共识节点将配置区块数据发送至第一记账节点,还可以将配置区块数据发送至第二记账节点。

212、当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

例如,当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对更新后归档信息中的同步区块高度、签名信息和背书信息进行拷贝,生成这些数据对应的数据快照,然后,将这些数据对应的数据快照和状态数据快照构成同步区块高度的数据快照。第一记账节点将配置区块数据添加至第一区块数据进行更新,得到更新后第一区块数据。第一记账节点在更新后第一区块数据中筛选出区块高度未超过同步区块高度的目标区块数据,比如,以同步区块高度未5为例,则在更新后第一区块数据中筛选出普通区块数据,在筛选出的普通区块数据中提取出区块高度未超过5的目标区块数据,第一记账节点将目标区块数据进行删除,已完成区块链数据的归档,区块链数据的归档主要包括生成数据快照和将未超过同步区块高度的普通区块数据进行删除。

213、当第二记账节点接收到配置区块数据时,第二记账节点也可以对第二记账节点的区块链数据进行归档。

例如,当第二记账节点接收到配置区块数据之后,第二记账节点提取出配置区块数据中的签名信息、背书信息、状态数据快照和同步区块高度,对这些数据进行拷贝,生成同步区块高度的数据快照。第二记账节点将配置区块数据添加至第二记账节点的区块链数据进行更新,在更新后的第二记账节点的区块链数据中筛选出区块高度未超过同步区块高度的第二记账节点的目标区块数据,第二记账节点将第二记账节点的目标区块数据进行删除,以完成归档。

其中,第一记账节点和第二记账节点对未超过同步区块高度的目标区块数据进行归档的过程可以是同时归档,也可以是不同时归档。在归档过程中,对于删除的那些目标区块数据还可以存储至分布式的存储系统的冷存储中。

可选的,当第一记账节点为区块链系统中新增的记账节点时,第一记账节点获取区块链系统最新的区块链数据,如图10所示,获取的具体过程可以如下:

214、第一记账节点将同步请求发送至共识节点。

例如,第一记账节将同步请求发送至共识节点,该同步请求中携带第一记账节点的身份信息,该同步请求用于从共识节点中获取背书信息和归档点信息。

215、共识节点根据同步请求,将背书信息和归档点信息发送至第一记账节点。

例如,共识节点接收到同步请求后,对发送背书信息的第一记账节点的身份信息进行校验,确认第一记账节点的身份没有问题之后,将背书信息和归档点信息发送至第一记账节点。

216、第一记账节点根据背书信息和归档点信息从第二记账节点获取状态数据。

例如,第一记账节点对背书信息和第二记账节点的签名信息进行校验,当背书信息和第二记账节点的签名信息校验通过时,第一记账节点确定根哈希值对应的多个叶哈希值,第一记账节点从第二记账节点分别获取不同叶哈希值对应的子状态数据,以并行获取状态数据。具体可以如下:

(1)第一记账节点对背书信息和第二记账节点的签名信息进行校验。

例如,第一记账节点可以对背书信息对应的第二记账节点的背书数量进行校验,还可以对第二记账节点的签名信息进行校验。校验规则主要通过校验安全性入手,比如,校验规则可以为背书数量超过预设数量阈值时,就确定校验通过,校验规则还可以为背书信息是否符合预设的背书规则或者背书要求,第二记账节点的签名信息是否符合预设的签名规则或者签名要求等。具体的校验规则可以根据实际应用来设定。

(2)当背书信息和第二记账节点的签名信息校验通过时,第一记账节点确定根哈希值对应的对个叶哈希值。

例如,当背书信息和第二记账节点的签名信息校验通过时,第一记账节点根据状态数据的根哈希值来确定根哈希值对应的多个叶哈希值,比如,以状态数据对应的默克尔树如图7所示,根哈希值为h7,则第一记账节点在该默克尔树中可以确定的叶哈希值为h1、h2、h3和h4。

(3)第一记账节点从第二记账中分别获取不同叶哈希值对应的子状态数据,以并行获取状态数据。

例如,以第二记账节点的数量为2个为例,第一记账节点可以将h1和h2分为一类,将h3和h4分为一类。然后,第一记账节点根据分类结果,确定第二记账节点对应的目标叶哈希值,比如,第一记账节点可以将分为一类的h1和h2作为第二记账节点a对应目标叶哈希值,将另一类h3和h4作为第二记账节点b对应的目标叶哈希值。第一记账节点从第二记账节点获取目标叶哈希值对应的子状态数据,得到状态数据,比如,第一记账节点可以从第二记账节点a处获取h1和h2对应的子状态数据(k1-v1)至(k6,v6),从第二记账节点b处获取h3和h4对应的子状态数据(k7,v7)至(k10,v10),如图8所示,就可以得到状态数据,利用得到状态数据可以构建第一记账节点本地的世界状态。

217、第一记账节点根据状态数据,获取区块链系统最新的区块链数据。

例如,第一记账节点从共识节点或第二记账节点获取同步区块高度以后的第二区块数据。比如,同步区块高度为5时,则第一记账节点从共识节点或第二记账节点获取区块高度超过5的第二区块数据。第一记账节点获取第二区块数据中的交易信息,根据获取到的交易数据对状态数据进行更新,比如,可以回放区块中的交易,使得第一记账节点的世界状态进行更新,以同步到共识节点和第二记账节点最新的世界状态,得到第一记账节点的在区块链系统中的最新的当前区块链数据。

由以上可知,本实施例电子设备在第一记账节点与共识节点进行区块链数据同步后,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档;由于该方案可以备份当前交易所需的目标状态数据,并基于备份后的目标状态数据生成状态数据快照,解决了快照和原有交易的冲突问题,实现了对状态数据的实时快照,而且让区块链中的其他记账节点针对状态数据快照等信息进行签名背书,使得这些信息具有公信力,因此,可以大大提升区块链数据归档的归档效率和归档效果。

为了更好地实施以上方法,本发明实施例还提供一种区块链数据归档装置,该区块链数据归档装置可以集成在电子设备,比如服务器或终端等设备中,该终端可以包括平板电脑、笔记本电脑和/或个人计算机等。

例如,如图11所示,该区块链数据归档生成装置可以包括同步单元301、确定单元302、生成单元303、接收单元304和归档单元305,如下:

(1)同步单元301;

同步单元301,用于第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度。

例如,同步单元301,具体可以用于第一记账节点可以向共识节点发送同步请求,共识节点在接收到同步请求后,确定第一记账节点的身份没有问题时,将共识节点的最新的区块发送至第一记账节点,第一记账节点接收到最新的区块后,根据接收到的最新的区块,对区块链数据进行更新,更新完成后就完成了区块链数据同步,得到同步后区块链数据,在同步后区块链数据中识别出存在的区块数量,根据区块数量确定同步后区块链数据的同步区块高度。

(2)确定单元302;

确定单元302,用于当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份。

其中,确定单元302还可以包括获取子单元3021、添加子单元3022、筛选子单元3023和备份子单元3024,如图12所示,具体可以如下:

获取子单元3021,用于当同步区块高度达到预设归档点对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签;

添加子单元3022,用于第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签;

筛选子单元3023,用于第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据;

备份子单元3024,用于第一记账节点对目标子状态数据进行备份。

例如,获取子单元3021的第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签,添加子单元3022的第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签,筛选子单元3023的第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据,备份子单元3024的第一记账节点对目标子状态数据进行备份。

(3)生成单元303;

生成单元303,用于第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照。

例如,生成单元303,具体可以用于第一记账节点在所述状态数据中筛选出区块高度不超过所述同步区块高度的同步子状态数据,得到同步子状态数据集合,第一记账节点将备份后的目标子状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,第一记账节点对所述目标结构的状态数据进行拷贝,以生成所述状态数据对应的状态数据快照。

(4)接收单元304;

接收单元304,用于第一记账节点接收所述第二记账节点针对所述归档点信息的背书信息。

例如,接收单元304,具体可以用于当第一记账节点向第二记账节点发送归档点信息后,第二记账节点将归档点信息中的状态数据快照中的根哈希值与自身的状态数据快照中的根哈希值进行比较,当第一记账节点与自身的状态数据快照中的根哈希值相同,第二记账节点就向第一记账节点发送背书信息,并将归档点信息向其他第二记账节点进行广播。第一记账节点接收第二记账节点针对归档点信息的背书信息。

(5)归档单元305;

归档单元305,用于第一记账节点根据背书信息和归档点信息对同步后区块链数据进行归档。

其中,归档单元305还可以包括确定子单元3051、更新子单元3052、发送子单元3053和归档子单元3054,如图13所示,具体可以如下:

确定子单元3051,用于第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量;

更新子单元3052,用于当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息;

发送子单元3053,用于第一记账节点将更新后归档点信息发送至共识节点;

归档子单元3054,用于当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

例如,确定子单元3051的第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量,更新子单元3052当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息,发送子单元3053的第一记账节点将更新后归档点信息发送至共识节点,归档子单元3054当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

可选的,当第二记账节点触发区块链数据同步请求时,第二记账节点的区块链数据的区块高度达到预设归档点对应的区块高度后,第二节点会将生成的状态数据快照、同步区块高度和第二记账节点的签名信息作为归档点信息发送至第一记账节点时,区块链数据归档装置还可以包括背书单元306,如图14所示,具体可以如下:

背书单元306,用于第一记账节点对第二记账节点发送的归档点信息进行背书。

例如,背书单元306,具体可以用于当第一记账节点接收到第二记账节点发送的归档点信息时,第一记账节点在归档点信息中提取出第二记账节点的状态数据快照,在状态数据快照中获取状态数据的根哈希值,第一记账节点将第二记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比。当第二记账节点的状态数据的根哈希值与第一记账节点自身的状态数据的根哈希值相同时,第一记账节点对归档点信息进行签名,表示对归档点信息的认可,得到第一记账节点针对该归档点信息的背书信息。

可选的,当第一记账节点为区块链系统中新增的记账节点时,区块链数据归档装置还可以包括更新单元307,如图15所示,具体可以如下:

更新单元307,用于获取区块链系统的最新的区块链数据。

例如,更新单元307,具体可以用于当第一记账节点为区块链系统中新增的记账节点时,第一记账节点向共识节点发送同步请求,并接收共识节点针对同步请求发送的背书信息和归档点信息,第一记账节点根据背书信息和归档点信息,从第二记账节点获取状态数据,第一记账节点从共识节点或第二记账节点获取同步区块高度以后的第二区块数据,第一记账节点根据第二区块数据中的交易信息,对状态数据进行更新,得到第一记账节点的当前区块链数据。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

由以上可知,本实施例在同步单元301的第一记账节点与共识节点进行区块链数据同步后,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,确定单元302当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,生成单元303的第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,接收单元304的第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,归档单元305的第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档;由于该方案可以备份当前交易所需的目标状态数据,并基于备份后的目标状态数据生成状态数据快照,解决了快照和原有交易的冲突问题,实现了对状态数据的实时快照,而且让区块链中的其他记账节点针对状态数据快照等信息进行签名背书,使得这些信息具有公信力,因此,可以大大提升区块链数据归档的归档效率和归档效果。

本发明实施例还提供一种电子设备,如图16所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:

该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图16中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。

存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。

电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:

第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档。

例如,第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签,第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签,第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据,第一记账节点对目标子状态数据进行备份,第一记账节点在所述状态数据中筛选出区块高度不超过所述同步区块高度的同步子状态数据,得到同步子状态数据集合,第一记账节点将备份后的目标子状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,第一记账节点对所述目标结构的状态数据进行拷贝,以生成所述状态数据对应的状态数据快照。第一记账节点接收所述第二记账节点针对所述归档点信息的背书信息,第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量,当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息,第一记账节点将更新后归档点信息发送至共识节点,当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

可选的,当第一记账节点接收到第二记账节点发送的归档点信息时,第一记账节点在归档点信息中提取出第二记账节点的状态数据快照,在状态数据快照中获取状态数据的根哈希值,第一记账节点将第二记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比。当第二记账节点的状态数据的根哈希值与第一记账节点自身的状态数据的根哈希值相同时,第一记账节点对归档点信息进行签名,表示对归档点信息的认可,得到第一记账节点针对该归档点信息的背书信息。

可选的,当第一记账节点为区块链系统中新增的记账节点时,第一记账节点向共识节点发送同步请求,并接收共识节点针对同步请求发送的背书信息和归档点信息,第一记账节点根据背书信息和归档点信息,从第二记账节点获取状态数据,第一记账节点从共识节点或第二记账节点获取同步区块高度以后的第二区块数据,第一记账节点根据第二区块数据中的交易信息,对状态数据进行更新,得到第一记账节点的当前区块链数据。

以上各个操作的具体实施可参见前面的实施例,在此不作赘述。

由以上可知,本发明实施例在第一记账节点与共识节点进行区块链数据同步后,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档;由于该方案可以备份当前交易所需的目标状态数据,并基于备份后的目标状态数据生成状态数据快照,解决了快照和原有交易的冲突问题,实现了对状态数据的实时快照,而且让区块链中的其他记账节点针对状态数据快照等信息进行签名背书,使得这些信息具有公信力,因此,可以大大提升区块链数据归档的归档效率和归档效果。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种区块链数据归档方法中的步骤。例如,该指令可以执行如下步骤:

第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度后,同步后区块链数据包括状态数据,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点在状态数据中确定当前交易所需的目标状态数据,并对目标状态数据进行备份,第一记账节点根据备份后的目标状态数据生成同步区块高度的状态数据快照,并将状态数据快照、同步区块高度和第一记账节点的签名信息作为归档点信息发送至第二记账节点,第一记账节点接收第二记账节点针对归档点信息的背书信息,该背书信息用于指示第二记账节点对所述归档点信息的认可,第一记账节点根据所背书信息和归档点信息对同步后区块链数据进行归档。

例如,第一记账节点与共识节点进行区块链数据同步,并确定同步后区块链数据的同步区块高度,当同步区块高度达到预设归档点对应的区块高度时,第一记账节点获取子状态数据对应的区块高度和在本地数据库中的存储标签,第一记账节点将子状态数据对应的区块高度添加至存储标签进行标记,得到标记后存储标签,第一记账节点根据标记后存储标签,在状态数据中筛选出当前交易所需的目标子状态数据,得到目标状态数据,第一记账节点对目标子状态数据进行备份,第一记账节点在所述状态数据中筛选出区块高度不超过所述同步区块高度的同步子状态数据,得到同步子状态数据集合,第一记账节点将备份后的目标子状态数据添加至同步子状态数据集合,以更新同步子状态数据集合,第一记账节点对更新后的同步子状态数据集合中的同步子状态数据进行哈希运算,以生成目标结构的状态数据,第一记账节点对所述目标结构的状态数据进行拷贝,以生成所述状态数据对应的状态数据快照。第一记账节点接收所述第二记账节点针对所述归档点信息的背书信息,第一记账节点根据背书信息,确定发送背书信息的第二记账节点的背书数量,当背书数量超过预设数量阈值时,第一记账节点将背书信息添加至归档点信息进行更新,得到更新后归档点信息,第一记账节点将更新后归档点信息发送至共识节点,当第一记账节点接收到共识节点发送的配置区块数据时,第一记账节点对同步后区块链数据进行归档。

可选的,当第一记账节点接收到第二记账节点发送的归档点信息时,第一记账节点在归档点信息中提取出第二记账节点的状态数据快照,在状态数据快照中获取状态数据的根哈希值,第一记账节点将第二记账节点的状态数据的根哈希值与自身状态数据的根哈希值进行对比。当第二记账节点的状态数据的根哈希值与第一记账节点自身的状态数据的根哈希值相同时,第一记账节点对归档点信息进行签名,表示对归档点信息的认可,得到第一记账节点针对该归档点信息的背书信息。

可选的,当第一记账节点为区块链系统中新增的记账节点时,第一记账节点向共识节点发送同步请求,并接收共识节点针对同步请求发送的背书信息和归档点信息,第一记账节点根据背书信息和归档点信息,从第二记账节点获取状态数据,第一记账节点从共识节点或第二记账节点获取同步区块高度以后的第二区块数据,第一记账节点根据第二区块数据中的交易信息,对状态数据进行更新,得到第一记账节点的当前区块链数据。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该计算机可读存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种区块链数据归档方法中的步骤,因此,可以实现本发明实施例所提供的任一种区块链数据归档方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本发明实施例所提供的一种区块链数据归档方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1