首页 / 专利库 / 银行与财务事项 / 分布式账本技术 / 区块链 / 区块头 / 一种基于区块链网络的数据验证方法和装置

一种基于链网络的数据验证方法和装置

阅读:421发布:2020-05-14

专利汇可以提供一种基于链网络的数据验证方法和装置专利检索,专利查询,专利分析的服务。并且本 申请 公开了一种基于 区 块 链 网络的数据验证方法和装置,该方法包括:第一区块链 节点 响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果。采用本申请,可提高针对业务数据的查验效率以及查验准确性。,下面是一种基于链网络的数据验证方法和装置专利的具体信息内容。

1.一种基于链网络的数据验证方法,其特征在于,包括:
第一区块链节点响应针对目标业务数据的验证操作,获取所述目标业务数据对应的哈希值;
对本地存储的区块账本进行遍历,从所述区块账本中选择与所述目标业务数据相关联的目标区块;所述区块账本包括来自于全量区块链中的至少一个区块;
根据所述目标业务数据对应的哈希值和所述目标区块中的区块参数,对所述目标业务数据进行离线验证,得到验证结果;所述验证结果包括合法数据结果和非法数据结果。
2.根据权利要求1所述的方法,其特征在于,所述对本地存储的区块账本进行遍历,从所述区块账本中选择与所述目标业务数据相关联的目标区块,包括:
根据所述目标业务数据对应的哈希值,对本地存储的所述区块账本进行遍历;
将在所述区块账本中遍历到的包含所述目标业务数据对应的哈希值的区块,确定为与所述目标业务数据相关联的所述目标区块。
3.根据权利要求1所述的方法,其特征在于,所述目标业务数据为电子票据;所述对本地存储的区块账本进行遍历,从所述区块账本中选择与所述目标业务数据相关联的目标区块,包括:
获取所述电子票据中的开票时间;
基于所述开票时间确定目标区块高度,基于所述目标区块高度遍历所述区块账本;
将遍历到的所述区块账本中区块高度为所述目标区块高度的区块,确定为与所述目标业务数据相关联的所述目标区块。
4.根据权利要求1所述的方法,其特征在于,所述目标区块中的区块参数包括属于所述目标区块的所有业务数据分别对应的哈希值;所述根据所述目标业务数据对应的哈希值和所述目标区块中的区块参数,对所述目标业务数据进行离线验证,得到验证结果,包括:
遍历所述目标区块中的哈希值;
当在所述目标区块中遍历到所述目标业务数据对应的哈希值时,得到所述合法数据结果;
当在所述目标区块中未遍历到所述目标业务数据对应的哈希值时,得到所述非法数据结果。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标业务数据对应的哈希值和所述目标区块中的区块参数,对所述目标业务数据进行离线验证,得到验证结果,包括:
遍历所述目标区块中的业务数据;
当在所述目标区块中遍历到所述目标业务数据时,根据所述目标业务数据对应的哈希值以及所述目标区块中的区块参数,确定所述目标业务数据对应的所述验证结果。
6.根据权利要求5所述的方法,其特征在于,所述目标区块中的区块参数包括区块头参数以及属于所述目标区块的所有业务数据分别对应的哈希值;所述所有业务数据包括所述目标业务数据;所述根据所述目标业务数据对应的哈希值以及所述目标区块中的区块参数,确定所述目标业务数据对应的所述验证结果,包括:
根据所述目标区块中属于所述目标区块的所有业务数据分别对应的哈希值,确定所述目标区块对应的待验证默克尔树根值;
从所述目标区块的所述区块头参数中获取合法默克尔树根值,对比所述待验证默克尔树根值和所述合法默克尔树根值;
当对比出所述待验证默克尔树根值和所述合法默克尔树根值相同时,得到所述目标业务数据对应的所述合法数据结果;
当对比出所述待验证默克尔树根值和所述合法默克尔树根值不相同时,得到所述目标业务数据对应的所述非法数据结果。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标区块中属于所述目标区块的所有业务数据分别对应的哈希值,确定所述目标区块对应的待验证默克尔树根值,包括:
获取属于所述目标区块的每个业务数据分别对应的数据索引;
根据所述每个业务数据分别对应的数据索引,确定所述每个业务数据分别对应的哈希值之间的排列顺序;
基于所述每个业务数据分别对应的哈希值之间的排列顺序,确定所述目标区块对应的所述待验证默克尔树根值。
8.根据权利要求6所述的方法,其特征在于,所述根据所述目标区块中属于所述目标区块的所有业务数据分别对应的哈希值,确定所述目标区块对应的待验证默克尔树根值,包括:
获取属于所述目标区块的每个业务数据分别对应的生成时间;
根据所述每个业务数据分别对应的生成时间,确定所述每个业务数据分别对应的哈希值之间的排列顺序;
基于所述每个业务数据分别对应的哈希值之间的排列顺序,确定所述目标区块对应的所述待验证默克尔树根值。
9.根据权利要求1所述的方法,其特征在于,还包括:
从所述区块账本中获取所述目标区块对应的子区块;所述目标区块和所述子区块在所述全量区块链上的区块高度相邻;所述子区块的区块高度大于所述目标区块的区块高度;
基于所述目标区块中的区块头,确定所述目标区块对应的待验证区块头哈希值;
获取所述子区块的区块头中的前区块头哈希值,基于所述前区块头哈希值验证所述待验证区块头哈希值;
当验证出所述待验证区块头哈希值与所述前区块头哈希值相同时,确定所述目标区块中的所述区块参数具备参数合法性。
10.根据权利要求1所述的方法,其特征在于,所述区块账本中的区块为过滤区块;所述过滤区块为将所述全量区块链上的区块中的无关联业务数据进行过滤,且保留所述无关联业务数据对应的哈希值后所得到的区块;所述无关联业务数据指与所述第一区块链节点之间不具有业务关系的业务数据。
11.根据权利要求1所述的方法,其特征在于,所述目标区块中包括属于第二区块链节点的存证业务数据;所述第二区块链节点持有所述目标区块在所述全量区块链中的区块高度;还包括:
所述第一区块链节点获取所述第二区块链节点发送的所述目标区块的区块高度;
基于所述目标区块的区块高度,在所述全量区块链中获取所述目标区块;
将所述目标区块缓存至所述区块账本;
则,所述根据所述目标业务数据对应的哈希值和所述目标区块中的区块参数对所述目标业务数据进行离线验证,得到验证结果,包括:
根据所述目标业务数据对应的哈希值和所述目标区块中的所述存证业务数据对所述目标业务数据进行离线验证,得到所述验证结果。
12.一种基于区块链网络的数据验证装置,其特征在于,包括:
响应模块,用于响应针对目标业务数据的验证操作,获取所述目标业务数据对应的哈希值;
遍历模块,用于对本地存储的区块账本进行遍历,从所述区块账本中选择与所述目标业务数据相关联的目标区块;所述区块账本包括来自于全量区块链中的至少一个区块;
验证模块,用于根据所述目标业务数据对应的哈希值和所述目标区块中的区块参数,对所述目标业务数据进行离线验证,得到验证结果;所述验证结果包括合法数据结果和非法数据结果。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1-11中任一项所述方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-11任一项所述的方法。

说明书全文

一种基于链网络的数据验证方法和装置

技术领域

[0001] 本申请涉及数据处理的技术领域,尤其涉及一种基于区块链网络的数据验证方法和装置。

背景技术

[0002] 当前技术中,若用户想要对某个电子票据(例如电子发票)的真伪性进行查验时,则用户可以在用户终端中的客户端录入想要查验的电子票据的关键信息(例如电子票据的唯一识别码),以向客户端请求查验该电子票据的真伪性。其中,上述客户端也是专用于查验电子票据真伪性的客户端。客户端可以响应用户针对电子票据的查验请求,进一步向服务器端请求获取针对该电子票据的查验结果。当服务器端对该电子票据的真伪性查验完毕时,服务器端可以将查验结果再通过客户端返回给用户终端。
[0003] 由此可知,现有技术中,用户对电子票据的查验过程太过繁琐,导致针对电子票据的查验效率低。并且,在用户通过客户端向服务器端请求获取针对电子票据的查验结果的过程中,该查验结果极易遭到恶意网址的篡改,导致最后返回给用户终端的电子票据的验证结果并不准确。
[0004] 申请内容
[0005] 本申请提供了一种基于区块链网络的数据验证方法和装置,可提高针对业务数据的查验效率以及查验准确性。
[0006] 本申请一方面提供了一种基于区块链网络的数据验证方法,包括:
[0007] 第一区块链节点响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;
[0008] 对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;
[0009] 根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。
[0010] 本申请一方面提供了一种基于区块链网络的数据验证装置,包括:
[0011] 响应模块,用于响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;
[0012] 遍历模块,用于对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;
[0013] 验证模块,用于根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。
[0014] 本申请一方面提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行如本申请中一方面中的方法。
[0015] 本申请一方面提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行上述一方面中的方法。
[0016] 本申请通过第一区块链节点响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。由此可见,本申请中第一区块链节点可以在不联网的前提下,通过本地存储的区块账本自行对目标业务数据的合法性进行离线验证,提高了针对业务数据的验证效率。附图说明
[0017] 为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018] 图1是本申请提供的一种区块链网络的系统架构示意图;
[0019] 图2是本申请提供的一种数据验证的场景示意图;
[0020] 图3是本申请提供的一种基于区块链网络的数据验证方法的流程示意图;
[0021] 图4是本申请提供的一种计算默克尔树根的场景示意图;
[0022] 图5是本申请提供的一种验证区块合法性的场景示意图;
[0023] 图6是本申请提供的一种基于区块网络的区块获取方法的流程示意图;
[0024] 图7是本申请提供的一种遍历区块的场景示意图;
[0025] 图8是本申请提供的一种数据验证的场景示意图;
[0026] 图9是本申请提供的一种基于区块链网络的数据验证装置的结构示意图;
[0027] 图10是本申请提供的一种计算机设备的结构示意图。

具体实施方式

[0028] 下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0029] 请参见图1,是本申请提供的一种区块链网络的系统架构示意图。如图1所示,该系统架构示意图包括服务器100、服务器200、服务器300和服务器400。其中,服务器100、服务器200、服务器300和服务器400分别对应于区块链网络中的一个区块链节点。实际上,区块链网络中的每个区块链节点都可以对应于多个服务器,此处仅以一个区块链节点对应于1个服务器为例进行本申请的说明。当某个区块链节点对应于多个服务器时,该多个服务器可以用于分摊该区块链节点不同的业务处理过程,以减轻该区块链节点的业务处理负担。上述4个区块链节点(包括服务器100、服务器200、服务器300和服务器400)均具备在区块链网络对应的全量区块链中上链自己的业务数据或者请求上链自己的业务数据的能
[0030] 请一并参见图2,是本申请提供的一种数据验证的场景示意图。如图2所示,服务器115e可以是上述服务器100、服务器200、服务器300和服务器400中的任意一个服务器。服务器115e在本地离线存储有区块账本100e,区块账本100e中包括服务器115e在区块链网络对应的全量区块链上拉取得到的多个区块。区块账本中所存储的区块可以是在全量区块链上拉取到的多个连续的区块。由于全量区块链上的区块可以是根据区块高度递增机制进行缓存的,因此多个连续的区块是指,在全量区块链中区块高度相邻并依次递增的多个区块。例如全量区块链上的区块的区块高度依次为1、2、3、4、5、……、n,则区块账本中拉取到的区块可以包括区块高度为1的区块、区块高度为2的区块、……以及区块高度为n的区块。当服务器115e获取到目标业务数据101e,并想要对该目标业务数据101e进行验证时,服务器115e可以对区块账本100e中的区块进行遍历。其中,若目标业务数据101e为属于服务器115e的业务数据时,则当服务器115e成功请求将目标业务数据101e上链至全量区块链时,服务器
115e可以记录下目标业务数据101e在全量区块链中所在的区块的区块高度。因此,服务器
115e可以通过目标业务数据101e所在的区块的区块高度遍历区块账本100e中的区块。服务器115e可以将在区块账本100e中遍历到的区块高度为目标业务数据101e对应的区块高度的区块,作为与目标业务数据相关联的目标区块,此处假设为目标区块103e。该目标区块
103e用于对目标业务对象101e进行验证(具体指数据合法性的验证,即验证目标业务数据的真实性)。目标区块103e中包括区块头104e和区块体113e,区块体113e中包括多个业务数据(此处具体包括业务数据105e、业务数据106e、业务数据107e和业务数据108e)以及每个业务数据对应的哈希值(具体包括业务数据105e对应的哈希值109e、业务数据106e对应的哈希值110e、业务数据107e对应的哈希值111e、业务数据108e对应的哈希值112e)。验证的具体过程可以是:服务器115e可以对目标业务数据101e进行哈希运算,得到目标业务数据
101e对应的哈希值102e。服务器115e可以遍历目标区块103e中的业务数据对应的哈希值,当遍历到哈希值102e时,则可以停止遍历,并可以得到针对目标业务数据101e的验证结果
114e。验证结果114e具体为:验证出目标业务数据101e具备数据合法性,即验证出目标业务数据101e为真实的业务数据。更多的,当服务器115e未在目标区块103e中遍历到目标业务数据101e对应的哈希值102e,则判定目标业务数据101e不具备数据合法性,即验证出目标业务数据101e不是真实的业务数据。
[0031] 通过本申请所提供的方法,区块链节点可以在本地离线存储区块账本,该区块账本中包括至少一个区块,该区块账本中的区块中可以包括区块链节点的业务数据,此外,区块账本的区块中还可以包括属于该区块的所有业务数据的哈希值。因此,当区块链节点需要对某个业务数据进行合法性验证时,可以在区块账本中获取到与该业务数据相关联的区块,进而通过获取到的与该业务数据相关联的区块,对该业务数据进行离线验证。本申请提供的方法支持区块链节点通过区块账本自行对业务数据的数据合法性进行验证,提高了区块链节点针对业务数据的合法性验证的效率,并且即使在区块链节点断网的情况下,也不会影响到区块链节点对业务数据的验证。此外,由于可以对区块账本中所获取到的区块的合法性进行自行验证(包括对区块头中的前区块哈希值的验证以及通过默克尔树根对区块中的业务数据的验证),因此,保障了从区块账本中获取到的用于对业务数据的合法性进行验证的区块的合法性,进而保障了获取到的针对业务数据的验证结果的准确性。
[0032] 请参见图3,是本申请提供的一种基于区块链网络的数据验证方法的流程示意图,如图3所示,方法可以包括:
[0033] 步骤S101,第一区块链节点响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;
[0034] 具体的,第一区块链节点可以是区块链节点网络中的任意一个节点,例如,第一区块链节点可以是区块链网络中的全量节点、第一区块链节点或者一般的区块链节点。第一区块链节点可以响应针对目标业务数据的验证操作,获取到该目标业务数据的哈希值。第一区块链节点可以通过哈希算法对目标业务数据进行哈希运算,以得到目标业务数据对应的哈希值。其中,通过上述验证操作主要是对目标业务数据的数据合法性进行验证,即验证目标业务数据是否是真实的业务数据,而不是被伪造或者被篡改过的业务数据。第一区块链节点可以是具备终端显示和操作功能的服务器,因此,上述验证操作可以是用户通过第一区块链的终端显示和操作功能所执行的。
[0035] 步骤S102,对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;
[0036] 具体的,第一区块链节点可以对本地所存储的区块账本进行遍历,并从区块账本中获取与目标业务数据相关联的目标区块。该区块账本中存储有第一区块链节点在全量区块链中拉取到的至少一个区块。全量区块链指第一区块链节点所在的区块链网络所对应的包含该区块链网络中所有业务数据的区块链。由于现在是需要对目标业务数据的数据真实性进行验证,即目标业务数据有可能是真实的业务数据,目标业务数据也有可能是被篡改过或者被伪造的不真实的业务数据,因此与目标业务数据相关联的目标区块可以指包含有之前上链的目标业务数据所对应的真实的业务数据的区块。
[0037] 第一区块链节点可以通过目标业务数据对应的哈希值对区块账本进行遍历,即通过目标业务数据对应的哈希值在区块账本中离线找到该目标业务数据对应的真实的业务数据所在的目标区块。具体为:区块账本中的任意一个区块中都包含有属于该区块的所有业务数据分别对应的哈希值,例如区块账本中包括区块A,则该区块A中包括属于区块A的所有业务数据分别对应的哈希值。因此,第一区块链节点可以通过目标业务数据对应的哈希值,对区块账本中的区块进行遍历,并将遍历到的包括目标业务数据对应的哈希值的区块,作为与目标业务数据相关联的目标区块。
[0038] 第一区块链节点还可以通过目标业务数据对应的真实的业务数据所在的区块的区块高度,遍历区块账本中的业务数据,具体为:区块账本中所存储的区块均对应存储有该区块在全量区块链上的区块高度。若目标业务数据为第一区块链节点的业务数据,则在第一区块链节点请求将目标业务数据对应的真实的业务数据上链(即缓存至全量区块链)成功时,第一区块链节点可以将目标业务数据对应的真实的业务数据在全量区块链上的区块高度保存下来。可以将目标业务数据对应的真实的业务数据在全量区块链上的区块高度,称之为目标区块高度。因此,第一区块链节点可以通过预先保存的目标区块高度,遍历区块账本中的区块,并将遍历到的区块高度为目标区块高度的区块,作为与目标业务数据相关联的目标区块。
[0039] 更多的,上述目标业务数据还可以电子票据(例如电子发票),该电子票据中会包含有开票时间。第一区块链节点可以获取电子票据中的开票时间,并可以根据该开票时间确定目标业务数据对应的真实的业务数据所在的区块在全量区块链上的区块高度,可以将该区块高度,称之为目标区块高度。因此,第一区块链节点可以通过该目标区块高度,遍历区块账本中的区块,并将遍历到的区块高度为目标区块高度的区块,作为与目标业务数据相关联的目标区块。
[0040] 步骤S103,根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;
[0041] 具体的,目标区块中的区块参数可以包括区块头参数(即区块头中的参数),以及区块体参数(即区块体中的参数),目标区块的区块体中的参数可以包括属于该目标区块的所有业务数据分别对应的哈希值,目标区块的区块体中的参数还可以包括属于该目标区块的所有或者部分业务数据。上述验证结果为针对目标业务数据的验证结果,该验证结果可以包括合法验证结果和非法验证结果。当得到合法验证结果时,表明验证出目标业务数据具备数据合法性,即目标业务数据是真实的业务数据,没有被伪造过或者被篡改过。当得到非法验证结果时,表明目标业务数据不具备数据合法性,即目标业务数据不是真实的业务数据,有被伪造过或者被篡改过。
[0042] 第一种验证方式:第一区块链节点可以遍历目标区块中的哈希值,当在目标区块中遍历到目标业务数据对应的哈希值时,则可以得到上述针对目标业务数据的合法验证结果。当在目标区块中未遍历到目标业务数据对应的哈希值时,则可以得到上述针对目标业务数据的非法验证结果。
[0043] 第二种验证方式:第一区块链节点可以遍历目标区块中的业务数据,当在目标区块中遍历到目标业务数据时,则可以根据目标区块中属于目标区块的所有业务数据的哈希值(包括目标业务数据的哈希值),计算得到目标区块对应的待验证默克尔树根值。具体为:目标区块中所有的哈希值之间具有排列顺序。该排列顺序的第一种确定方式:第一区块链节点可以获取属于目标区块中的每个业务数据分别对应的数据索引,该数据索引是用于找到对应的业务数据的索引,目标区块中每个业务数据的数据索引在将目标区块进行上链(即添加至全量区块链)时,就已确定了。每个业务数据对应的数据索引也可以分别作为每个业务数据对应的哈希值的索引。当目标区块包括属于该目标区块的所有业务数据时,可以根据目标区块中每个业务数据在目标区块中所在的位置(前后位置,先后位置),确定目标区块中的每个业务数据对应的数据索引之间的排列顺序,进而可以通过每个数据索引所对应的每个业务数据的哈希值,确定目标区块中每个哈希值之间的排列顺序。目标区块中的每个哈希值之间的排列顺序即为目标区块中每个业务数据的索引值的排列顺序。该排列顺序的第一种确定方式:若目标区块中包括属于该目标区块的所有的业务数据,则第一区块链节点可以获取到目标区块中的每个业务数据的生成时间,并可以将目标区块中,每个业务数据分别对应的生成时间的时间先后顺序,作为目标区块中每个业务数据对应的哈希值之间的排列顺序。
[0044] 第一区块链节点可以根据目标区块中每个哈希值之间的排列顺序,依次计算目标区块中每相邻的两个哈希值对应的哈希值(可以将相邻的两个哈希值进行拼接,对拼接之后的哈希值进行哈希值运算,得到该相邻的两个哈希值所对应的哈希值),通过计算结果,可以进一步地计算得到目标区块对应的待验证默克尔树根值,该待验证默克尔树根值是通过目标区块中的所有哈希值计算得到的一个哈希值。第一区块链节点可以从目标区块的区块头参数中获取到一个合法默克尔树根值,第一区块链节点可以对比上述计算得到的待验证默克尔树根值和获取到的合法默克尔树根值,当对比出待验证默克尔树根值和合法默克尔树根值相同时,则认为目标区块中的所有业务数据(包括目标业务数据)均具备数据合法性,即可以得到目标业务数据对应的合法验证结果。反之,当对比出待验证默克尔树根值和合法默克尔树根值不相同时,则认为目标区块中的至少一个业务数据不具备数据合法性,并得到目标业务数据对应的非法验证结果。
[0045] 请参见图4,是本申请提供的一种计算默克尔树根的场景示意图。如图4所示,目标区块中依次(可以是哈希值对应的业务数据的产生时间的时间先后顺序)包括业务数据1对应的哈希值1、业务数据2对应的哈希值2、业务数据3对应的哈希值3、业务数据4对应的哈希值4、业务数据5对应的哈希值5、业务数据6对应的哈希值6、业务数据7对应的哈希值7以及业务数据8对应的哈希值8。其中,业务数据1为关联业务数据,业务数据2、业务数据3、业务数据4、业务数据5、业务数据6、业务数据7和业务数据8为无关联业务数据。即目标区块中包括业务数据1,而不包括业务数据2、业务数据3、业务数据4、业务数据5、业务数据6、业务数据7和业务数据8。可以通过目标区块中所包括的哈希值1、哈希值2、哈希值3、哈希值4、哈希值5、哈希值6、哈希值7和哈希值8,对目标区块中的业务数据1的业务数据合法性进行验证。分别计算每相邻两个哈希值所对应的哈希值,此处计算得到哈希值1和哈希值2对应的哈希值9,哈希值3和哈希值4对应的哈希值10,哈希值5和哈希值6对应的哈希值11,哈希值7和哈希值8对应的哈希值12,进一步地,继续计算每相邻两个哈希值对应的哈希值,此处计算得到哈希值9和哈希值10对应的哈希值13,哈希值11和哈希值12对应的哈希值14,再进一步地,计算得到哈希值13和哈希值14对应的哈希值15。最后计算得到的哈希值15即是目标区块对应的待验证默克尔树根值,待验证默克尔树根值的计算方式即是层层计算每相邻两个哈希值对应的哈希值,直到最后只计算得到1个哈希值,则该哈希值即是最后计算得到的待验证默克尔树根值。
[0046] 更多的,第一区块链节点还可以对目标区块中的区块参数的参数合法性进行验证,即验证目标区块中的区块参数是否是真实的,未被伪造或者未被篡改过的。具体为:上述区块账本中还包括目标区块的子区块,其中,目标区块和其的子区块,在全量区块链上的区块高度相邻,并且子区块的区块高度大于目标区块的区块高度。换句话说,目标区块在全量区块链中上链成功后,接着后一个上链至全量区块链的就为目标区块的子区块,目标区块又称为子区块的父区块。第一区块链节点可以通过目标区块中的区块头计算得到针对目标区块的待验证区块头哈希值。计算方式可以是,目标区块的区块头中包括多个字段(可以包括难度值、时间戳、父区块哈希值以及默克尔树根等),可以将该多个字段进行拼接,再对拼接之后的多个字段进行哈希运算,得到目标区块对应的待验证区块头哈希值。第一区块链节点可以从目标区块的子区块的区块头中获取到前区块头哈希值,第一区块链节点可以对待验证区块头哈希值以及前区块头哈希值进行对比,当对比出待验证区块头哈希值与前区块头哈希值相同时,则认为目标区块具备区块合法性,即目标区块是被第二过滤区块认可上链的。换句话说,目标区块中的区块参数具备参数合法性,目标区块中的区块参数是真实的,未被伪造或者未被篡改过的。
[0047] 区块账本中可以存在多个区块,该多个区块为全量区块链中连续相邻的多个区块,换句话说,该多个区块在全量区块链上的区块高度连续,且区块高度依次递增。并且,可以通过后一个区块的区块头中的前区块头哈希值对前一个区块进行合法性验证(此处,后一个区块和前一个区块,是针对区块的区块高度而言的,即后一个区块的区块高度相较于前一个区块的区块高度增加1)。具体为:请参见图5,是本申请提供的一种验证区块合法性的场景示意图。此处,假设区块账本中包括3个区块高度连续的区块,具体包括区块103c、区块104c和区块105c。其中,区块103b为区块104b的前一个区块,区块104b为区块105b的前一个区块。第一区块链节点可以通过区块103b的区块头100c,计算得到一个待验证区块头哈希值(该待验证区块头哈希值即是区块103b对应的区块头哈希值),若该待验证区块头哈希值与区块104c的区块头101c中的前区块头哈希值相同,则认为区块103c具备区块合法性。此外,第一区块链节点还可以通过区块104b的区块头101c,计算得到另一个待验证区块头哈希值,若该待验证区块头哈希值与区块105c的区块头102c中的前区块头哈希值相同时,则认为区块104c具备区块合法性,当还存在其他过滤区块时,验证方式同上。
[0048] 本申请通过第一区块链节点响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。由此可见,本申请中第一区块链节点可以在不联网的前提下,通过本地存储的区块账本自行对目标业务数据的合法性进行离线验证,提高了针对业务数据的验证效率。
[0049] 其中,上述第一区块链节点可以是区块链网络中的一个轻量节点(又可称之为spv节点),与第一区块链节点在同一区块链网络中的还有全量节点。上述区块账本中的区块可以是过滤区块,区块账本中的过滤区块的来源可以是:首先由全量节点将全量区块链上的区块中的无关联业务数据进行过滤,且保留该无关联业务数据对应的哈希值得到过滤区块,接着,全量节点可以将得到的过滤区块发送给第一区块链节点,再由第一区块链节点存储至本地的区块账本中。其中,无关联业务数据指与第一区块链节点之间不具有业务关系(下面会具体阐述如何为不具有业务关系)的业务数据。具体过程为,全量节点可以对全量区块链上的区块进行遍历(遍历的具体方式参见下述),可以将全量节点遍历到的区块称之为与第一区块链节点相关联的原始区块,全量节点需要将该原始区块中的无关联业务数据过滤掉,得到原始区块对应的过滤区块,进而全量节点可以将原始区块对应过滤区块发送给第一区块链节点,第一区块链节点可以将获取到的过滤区块存储至区块账本。因此,过滤区块就是将原始区块中的无关联业务数据过滤掉,但是保留该原始区块的区块头以及该原始区块中所有业务数据分别对应的哈希值,所得到的区块。下面具体描述了区块账本中的过滤区块的获取方式:
[0050] 请参见图6,是本申请提供的一种基于区块网络的区块获取方法的流程示意图,如图6所示,方法可以包括:
[0051] 步骤S201,全量节点遍历全量区块链上的区块,将遍历到的区块确定为与第一区块链节点相关联的原始区块;
[0052] 具体的,全量节点对应的全量区块链中缓存了区块链网络中上链的所有业务数据,由于第一区块链节点为轻量节点,因此第一区块链节点又可以称之为spv节点。第一区块链节点可以只在区块账本中缓存自己的业务数据。可以为第一区块链节点设置节点权限,例如,该节点权限可以是限制第一区块链节点只能向全量节点拉取到自己所请求上链的业务数据,或者只能向全量节点拉取到第一区块链节点有参与生成的业务数据(例如,业务数据可以对应于一笔交易,第一区块链节点有参与生成的业务数据,即是指第一区块链网络有参与该笔交易)。因此,区块账本中的区块中只包括在第一区块链节点的节点权限内能获取到的业务数据(该业务数据即是第一区块链节点自己的业务数据)。第一区块链节点可以向全量节点发起数据拉取请求,拉取到自己的业务数据。全量节点还可以不需要获取第一区块链节点发起的数据拉取请求,而是自发地向第一区块链节点推送其所对应的业务数据。因此,此处全量节点遍历全量区块链上的区块也可以分为被动的遍历和自发的遍历。自发的遍历是指:全量节点在未接收到第一区块链节点发送的数据拉取请求时,也可以自发主动地遍历全量区块链上的所有区块,并将遍历到的所有区块作为与第一区块链节点相关联的原始区块。被动的遍历是指:全量节点在接收到第一区块链节点发送的数据拉取请求时,才会遍历全量区块链上的区块,其中,根据第一区块链节点向全量节点发送的数据拉取请求中所携带的不同数据,可以得到不同的遍历结果,即遍历得到全量区块链中不同的原始区块。具体为:
[0053] 第一种遍历方式,数据拉取请求携带区块高度阈值。全量节点可以获取第一区块链节点发送的数据拉取请求;数据拉取请求携带区块高度阈值;根据区块高度阈值和区块高度递增机制,依次遍历全量区块链上的区块;当遍历至区块高度为区块高度阈值的区块时,停止遍历,将遍历到的区块确定为与第一区块链节点相关联的原始区块:
[0054] 第一区块链节点可以向全量节点发送数据拉取请求,该数据拉取请求中可以携带区块高度阈值。需要进行说明的是,全量区块链中的区块是以区块高度递增的机制进行缓存的,例如,从高度为1开始,即缓存至全量区块链中的第一个区块的区块高度为1,后续,每在全量区块链中缓存一个区块,相应的,区块高度依次叠加1,即缓存至全量区块链中的第二个区块的区块高度为2,……,缓存至全量区块链中的第n个区块的区块高度为n。因此,可以理解的是,该区块高度阈值是指第一区块链节点想要全量节点在全量区块链上遍历至的区块的区块高度。全量节点可以从全量区块链上缓存的第一个区块开始,按照区块高度递增机制进行遍历。其中,区块高度递增机制是指,每次遍历(除开遍历到的第一个区块),遍历到的后一个区块的区块高度大于前一个区块的区块高度,并且,后一个区块的区块高度比前一个区块的区块高度大1。当全量节点遍历至区块高度为数据拉取请求中所携带的区块高度阈值的区块时,可以停止遍历,并将遍历到的区块作为与第一区块链节点相关联的原始区块。例如,当区块高度阈值为3,则从全量区块链上第一个区块(区块高度为1)开始遍历,一直遍历到区块高度为3的区块,停止遍历,并将遍历到的第一个区块(区块高度为1)、第二个区块(区块高度为2)和第三个区块(区块高度为3)作为与第一区块链节点相关联的原始区块。
[0055] 第二种遍历方式,数据拉取请求携带目标地址。全量节点可以获取第一区块链节点发送的数据拉取请求;数据拉取请求携带目标地址;根据第一区块链节点的节点权限,验证目标地址针对第一区块链节点的地址合法性;当验证出目标地址为属于第一区块链节点的合法地址时,遍历全量区块链上的所有区块,作为与第一区块链节点相关联的原始区块:
[0056] 全量节点可以获取第一区块链节点发送的数据拉取请求,该数据拉取请求中可以携带目标地址。该目标地址为属于第一区块链节点的交易地址。全量节点可以根据数据拉取请求获取到第一区块链节点的节点权限,该节点权限表征了第一区块链节点在全量区块链上拉取业务数据的权限,即该节点权限表征了全量区块链上哪些业务数据属于(与该第一区块链节点有关联关系的业务数据,例如,该第一区块链节点参与上链的业务数据)该第一区块链节点,哪些业务数据不属于(与该第一区块链节点没有关联关系的业务数据,例如,其他节点请求上链,并且第一区块链节点未参与上链的业务数据)该第一区块链节点。全量节点可以根据第一区块链节点的节点权限,获取到该第一区块链节点拥有的(即所关联的)所有交易地址。全量节点可以通过该第一区块链节点所拥有的所有交易地址对数据拉取请求中所携带的目标地址进行匹配,当匹配出第一区块链节点所拥有的的交易地址中包括该目标地址,则认为对该目标地址的地址合法性验证成功,即判定该目标地址为属于第一区块链节点的合法地址。在确定目标地址为属于第一区块链节点的合法地址的基础上,全量节点可以开始遍历全量区块链上的所有区块(从全量区块链上的第一个区块开始遍历,一直遍历到全量区块链上最后一个区块),将全量区块链上遍历到的所有区块都作为与第一区块链节点相关联的原始区块。可选的,全量节点还可以在第一次遍历到包含上述目标地址的区块时,就停止遍历,并将遍历到的区块作为上述原始区块。例如,当全量区块链上第3个区块包含该目标地址,第1个区块和第2个区块都不包含该目标地址,则全量节点可以在遍历到全量区块链上第3个区块时就停止遍历,将遍历到的第1个区块、第2个区块和第3个区块,作为与第一区块链节点相关联的原始区块。可以理解的是,当全量节点匹配出第一区块链节点所拥有的所有交易地址中没有上述目标地址时,则不会遍历全量区块链上的区块。
[0057] 第三种遍历方式,数据拉取请求中携带目标哈希值。全量节点可以获取第一区块链节点发送的数据拉取请求;数据拉取请求携带目标哈希值;根据目标哈希值和区块高度递增机制,依次遍历全量区块链上的区块;当遍历到的区块中包括目标哈希值时,停止遍历,将遍历到的区块确定为与第一区块链节点相关联的原始区块:
[0058] 第一区块链节点可以向全量节点发送数据拉取请求,该数据拉取请求中可以携带目标哈希值,该目标哈希值是针对业务数据的哈希值,即该目标哈希值是通过对某个业务数据进行哈希运算得到的。当全量节点接收到第一区块链节点发送的数据拉取请求时,全量节点可以基于区块高度递增机制依次遍历全量区块链上的区块,当遍历到的区块中包括哈希值为该目标哈希值时,停止遍历,并将遍历到的区块作为与第一区块链节点相关联的原始区块。例如,若上述目标哈希值存在于全量区块链上第3个区块,则全量节点可以从全量区块链上第一个区块开始遍历,在遍历到全量区块链上第3个区块时就停止遍历,并将遍历到的第1个区块、第2个区块和第3个区块,作为与第一区块链节点相关联的原始区块。
[0059] 第四种遍历方式,数据拉取请求中携带目标时间段。全量节点可以获取第一区块链节点发送的数据拉取请求;数据拉取请求携带目标时间段;基于区块高度递增机制,依次遍历全量区块链上生成时间处于目标时间段内的区块;将遍历到的区块确定为与第一区块链节点相关联的原始区块:
[0060] 第一区块链节点可以向全量节点发送数据拉取请求,该数据拉取请求中可以携带目标时间段,该目标时间段的起始时间可以是全量区块链上缓存第一个区块的时间点,目标时间段的结束时间可以是该起始时间之后的任意一个时间点。当全量节点获取到第一区块链节点发送的数据拉取请求时,全量节点可以基于区块高度递增机制,依次遍历全量区块链上生成时间(缓存时间)在该目标时间段内的区块,并将遍历到的区块作为与第一区块链节点相关联的原始区块。例如,当全量区块链上第一个区块的生成时间是2018年06月06日06时06分06秒,目标时间段为2018年06月06日06时06分06秒到2018年08月08日08时08分08秒,则全量节点可以从全量区块链中依次遍历生成时间在2018年08月08日08时08分08秒之前的所有区块,作为原始区块。
[0061] 请参见图7,是本申请提供的一种遍历区块的场景示意图。如图7所示,全量区块链100b上包括4个区块,该4个区块分别为区块105b、区块106b、区块107b和区块108b。其中,区块105b的区块高度为1,区块106b的区块高度为2,区块107b的区块高度为3,区块108b的区块高度为4。方式101b、方式102b、方式103b和方式104b为全量节点对全量区块链100b的4种遍历方式。方式101b为上述第一种遍历方式:数据拉取请求中携带的区块高度阈值为2,则全量节点可以从区块105b开始遍历,遍历到区块106b停止,将遍历到的区块105b和区块
106b作为原始区块。方式102b为上述第二种遍历方式:数据拉取请求中携带目标地址,全量节点可以从区块105b开始遍历,一直遍历到全量区块链100b上的最后一个区块,即区块
108b。全量节点可以将遍历到的区块105b、区块106b、区块107b和区块108b都作为原始区块。由图7可见,区块105b和区块107b中都包括目标地址,后续全量节点可以据此对原始区块中的业务数据进行过滤(具体参见下述步骤S102)。方式103b为上述第三种遍历方式:数据拉取请求中携带目标哈希值。由图7可见,区块107b中包括该目标哈希值。全量节点可以从区块105b开始遍历,遍历至包括目标哈希值的区块(即区块107b),就停止遍历,并将遍历到的区块105b、区块106b和区块107b作为原始区块。方式104b为上述第四种遍历方式:数据拉取请求中携带目标时间段,目标时间段为时间点t1-时间点t2,时间点t1为目标时间段的起始时间,时间点t2为目标时间段的结束时间。时间点t3为区块107b的生成时间(即上链时间),时间点t4为区块108b的生成时间。由图7可见,时间点t3早于时间点t2,时间点t4晚于时间点t2。由此可知,全量区块链上在区块107b之前的区块(即区块高度小于区块107b的区块高度的区块)的生成时间都在目标时间段内,而在区块107b之后的区块(即区块高度大于区块107b的区块高度的区块)的生成时间则不在目标时间段内。因此,全量节点可以从区块
105b开始遍历,遍历生成时间在目标时间段内的所有区块,包括区块105b、区块106b和区块
107b,全量节点可以将遍历到的区块105b、区块106b和区块107b作为原始区块。
[0062] 步骤S202,全量节点根据第一区块链节点的节点权限,过滤原始区块的区块体中的无关联业务数据,且保留无关联业务数据对应的哈希值,得到过滤区块;
[0063] 具体的,全量节点可以根据上述第一区块链节点的节点权限,对原始区块中的无关联业务数据进行过滤。无关联业务数据是指与第一区块链节点之间不具备业务关系的业务数据,对于不同的业务场景,业务关系也会不同,当某个业务数据与第一区块链节点之间具备业务关系时,可以理解为是第一区块链节点需要(想要)拉取到该个业务数据。并且,当某个业务数据与第一区块链节点之间具备业务关系时,需要该个业务数据为在第一区块链节点的节点权限之内可以获取到的业务数据,全量节点才不会过滤到该业务数据。具体为:
[0064] 第一种过滤方式,为全量节点是自发地遍历全量区块链上的区块的前提下的一种遍历方式。当全量节点是在未接收到第一区块链节点发送的数据拉取请求的前提下自发地遍历全量区块链上的区块,得到原始区块时,全量节点可以根据第一区块链节点的节点权限,确定第一区块链节点对应的关联业务数据,此处,该关联业务数据是指与第一区块链节点之间具备业务关系的业务数据,例如该关联业务数据可以为第一区块链节点在进行业务交易时所产生的业务数据,该关联业务数据还可以是第一区块链节点在进行业务交易时,需要用到的业务数据。换句话说,此处,关联业务数据为在第一区块链节点的节点权限之内可以获取到的所有业务数据。全量节点可以将原始区块中除了关联业务数据之外的其他所有业务数据,作为第一区块链节点对应的无关联业务数据,此处,该无关联业务数据是指与第一区块链节点之间不具备业务关系的关联数据。换句话说,此处,无关联业务数据为在第一区块链节点的节点权限之内不能获取到的所有业务数据,即不在第一区块链节点的节点权限之内的业务数据。全量节点可以将原始区块中的无关联业务数据过滤掉(即去掉,删掉),保留原始区块中的区块头、所有业务数据(包括关联业务数据和无关联业务数据)对应的哈希值以及关联业务数据的具体内容,得到过滤区块。由此可知,原始区块中包括区块头和区块体,该区块体中可以包括关联业务数据、关联业务数据对应的哈希值、无关联业务数据以及无关联业务数据对应的哈希值,过滤区块中包括区块头、关联业务数据、关联业务数据对应的哈希值以及无关联业务数据对应的哈希值。需要进行说明的是,原始区块中可以只包含关联业务数据,也可以只包含无关联业务数据,还可以既包含关联业务数据,又包含无关联业务数据,在过滤时,将每个原始区块中的无关联业务数据的具体内容过滤掉,即可得到每个原始区块分别对应的过滤区块。通过此种过滤方式,获取到的关联业务数据为在第一区块链节点的节点权限范围内能获取到的所有业务数据,即无关联业务数据也是指在第一区块链节点的节点权限范围内不能获取到的所有业务数据。换句话说,此种过滤方式旨在获取在第一区块链节点的节点权限范围内能获取到的所有业务数据。
[0065] 第二种过滤方式:为在步骤S101中的第一种遍历方式(即数据拉取请求中包括区块高度阈值的遍历方式)的前提下的一种过滤方式。该种过滤方式可以与上述第一种过滤方式相同,即仅通过第一区块链节点的节点权限来确定无关联业务数据,进而将原始区块中的无关联业务数据进行过滤,得到过滤区块。
[0066] 第三种过滤方式:为在步骤S101中的第二种遍历方式(即数据拉取请求中包括目标地址的遍历方式)的前提下的一种过滤方式。由于全量节点已经通过第一区块链节点的节点权限,判定数据拉取请求中携带的目标地址为属于第一区块链节点的合法地址,因此,全量节点可以将关联该目标地址的业务数据作为关联业务数据,将未关联该目标地址的业务数据作为无关联业务数据,即将关联有该目标地址的业务数据作为与第一区块链节点之间具备业务关系的业务数据,将未关联有该目标地址的业务数据作为与第一区块链节点之间不具备业务关系的业务数据。由于第一区块链节点可以关联有多个交易地址,该目标地址仅为该多个交易地址中的1个或者多个,因此,此处,无关联业务数据中有可能会包含在第一区块链节点的节点权限内可以获取到的业务数据,即关联业务数据有可能是在第一区块链节点的节点权限内可以获取到的业务数据中的部分业务数据。全量节点可以将原始区块中的无关联业务数据进行过滤,得到过滤区块。通过此种过滤方式,旨在获取包含目标地址的业务数据,即得到的过滤区块中的业务数据仅包含具有目标地址的业务数据。全量节点可以将原始区块中的无关联业务数据(不包含目标地址的业务数据)过滤掉,保留无关联业务数据对应的哈希值、关联业务数据(包含目标地址的业务数据)、关联业务数据对应的哈希值以及区块头,得到过滤区块。
[0067] 第四种过滤方式,为在步骤S101中的第三种遍历方式(即数据拉取请求中包括目标哈希值的遍历方式)的前提下的一种过滤方式。全量节点可以根据第一区块链节点的节点权限,验证该目标哈希值是否为上述第一区块链节点的业务数据的哈希值,即验证该目标哈希值针对第一区块链节点的哈希值合法性。当全量节点验证出该目标哈希值是属于第一区块链节点的合法哈希值时(即该目标哈希值是该第一区块链节点的业务数据的哈希值),全量节点可以将哈希值为该目标哈希值的业务数据,作为关联业务数据,将哈希值不为该目标哈希值的业务数据,作为无关联业务数据,即将哈希值为该目标哈希值的业务数据作为与第一区块链节点之间具备业务关系的业务数据,将哈希值不为该目标哈希值的业务数据作为与第一区块链节点之间不具备业务关系的业务数据。该目标哈希值可以有1个,也可以有多个。通过此种过滤方式,得到的关联业务数据有可能是在第一区块链节点的节点权限之内可以获取到的业务数据中的部分业务数据,无关联业务数据中也可能会包含在第一区块链节点的节点权限之内可以获取到的业务数据。换句话说,此种过滤方式,旨在获取第一区块链节点的业务数据中哈希值为目标哈希值的业务数据。全量节点可以将原始区块中的无关联业务数据(即哈希值不为目标哈希值的业务数据)过滤掉,保留无关联业务数据对应的哈希值、关联业务数据、关联业务数据对应的哈希值以及区块头,得到过滤区块。
[0068] 第五种过滤方式,为在步骤S101中的第四种遍历方式(即数据拉取请求中包括目标时间段的遍历方式)的前提下的一种过滤方式。该种过滤方式可以与上述第一种过滤方式相同,即仅通过第一区块链节点的节点权限来确定无关联业务数据,进而将原始区块中的无关联业务数据进行过滤,得到过滤区块。
[0069] 通过上述过滤方式可知,若过滤区块中存在业务数据,则所存在的业务数据必然是与第一区块链节点的节点权限相关联的业务数据,即在第一区块链节点的节点权限之内可以获取到的业务数据。此外,过滤区块中存在的业务数据,可以是在第一区块链节点的节点权限之内可以获取到的部分业务数据,也可以是在第一区块链节点的节点权限之内可以获取到的全部业务数据。
[0070] 步骤S203,全量节点可以将过滤区块发送给第一区块链节点,以使第一区块链节点缓存过滤区块;
[0071] 具体的,全量节点可以将上述获取到的过滤区块发送给第一区块链节点,过滤区块可以是1个或多个。全量节点可以将所有过滤区块进行打包,发送给第一区块链节点。第一区块链节点可以将获取到的过滤区块缓存至区块账本中。后续,第一区块链节点可以通过在区块账本中本地缓存的过滤区块,对过滤区块中所包含的自己的业务数据的合法性进行验证(验证的具体过程可以参见上述步骤S103)。
[0072] 本申请所提供的数据验证方法还可以应用于电子存证的场景中,在这种场景中,上述目标区块可以是完整的原始区块,即无需对目标区块中的无关联业务数据进行过滤。具体为:区块链网络中还可以包括第二区块链节点,该第二区块链节点可以看成是在第一区块链节点所在的区块链网络中的另外一个轻量节点。上述第一区块链节点获取到的目标区块中可以包括属于第二区块链节点的存证业务数据,因此,该目标区块是由第二区块链节点参与请求上链的。在目标区块在全量区块链中上链成功时,第二区块链节点可以记录下目标区块在全量区块链上的区块高度,以便于后续获取到所上链的自己的存证业务数据。
[0073] 之后,第一区块链节点获取第二区块链节点发送的目标区块的区块高度;基于目标区块的区块高度,在全量区块链中获取目标区块;将目标区块缓存至区块账本:当第二区块链节点想要第一区块链节点获取到自己的存证业务数据时,第二区块链节点可以向第一区块链节点发送上述目标区块的区块高度。之后,第一区块链节点可以向全量节点发送数据获取请求,该数据获取请求中携带有上述目标区块的区块高度。全量节点可以根据第一区块链节点发送的数据获取请求中所携带的目标区块的区块高度,在全量区块链中获取到目标区块,并将获取到的目标区块(此处可以不对目标区块中的无关联业务数据进行过滤)发送给第一区块链节点。第一区块链节点可以将获取到的目标区块存储至本地的区块账本。
[0074] 若上述目标业务数据是需要被验证的存证业务数据,即目标业务数据对应的真实的已被上链的业务数据即是目标区块中的存证业务数据,则第一区块链节点可以通过区块账本中的目标区块中的存证业务数据对目标业务数据进行验证,即验证目标业务数据和目标区块中的业务数据是否是同一个业务数据。此处验证方法包括:可以计算目标区块中的存证业务数据的哈希值,然后对比目标业务数据的哈希值是否与存证业务数据的哈希值相同。当对比出目标业务数据的哈希值与存证业务数据的哈希值相同时,则得到目标业务数据对应的合法验证结果,当当对比出目标业务数据的哈希值与存证业务数据的哈希值不相同时,则得到目标业务数据对应的非法验证结果。提供一个具体的场景:第二区块链节点可以指在法院上诉的用户对应的节点,而第一区块链节点可以是法院对应的节点,当第二区块链节点需要将目标业务数据(即需验证的存证业务数据)发送给第一区块链节点作为上诉的证据时,第二区块链节点可以一并将目标区块在全量区块链中的区块高度发送给第一区块链节点,进而第一区块链节点可以向全量节点发起数据获取请求,从而获取到第二区块链节点上链的存证业务数据(即包含存证业务数据的目标区块,该目标区块中的存证业务数据即是目标业务数据对应的真实的业务数据),也就是法院对应的节点可以向全量节点请求获取二区块链节点在全量区块链上上链的包含真实的存证业务数据的目标区块,第一区块链节点可以将获取到的目标区块存储在本地的区块账本中。后续,第一区块链节点(即法院对应的节点)可通过本地的区块账本中的目标区块中真实的存证业务数据,对第二区块链节点向其发送的目标业务数据进行验证,即验证第二区块链节点向其发送的目标业务数据是否是真实的存证业务数据。
[0075] 本申请提供的数据验证方法还可以应用在电子票据的场景中,即上述区块中的业务数据可以是电子票据,该电子票据可以是发票数据。具体为:上述第一区块链节点可以是企业或者机构对应的节点,全量节点可以根据第一区块链节点的节点权限,自发主动地向第一区块链节点发送与第一区块链节点相关的发票数据(即电子票据),发送的方式,也是发送发票数据所在的过滤区块。即全量节点可以向第一区块链节点发送过滤区块(通过遍历得到的原始区块获得,具体过程参见上述步骤S101-步骤S102),该过滤区块中包括第一区块链节点相关的发票数据、第一区块链节点相关的发票数据对应的哈希值、第一区块链节点不相关的发票数据对应的哈希值以及区块头。也有可能存在过滤区块中只有第一区块链节点相关的发票数据、第一区块链节点相关的发票数据对应的哈希值以及区块头的情况,还有可能存在过滤区块中只有第一区块链节点不相关的发票数据对应的哈希值以及区块头的情况。第一区块链节点可以将获取到的包含自己的发票数据的过滤区块存储在本地的区块账本中,后续,第一区块链节点可以通过区块账本中的过滤区块,离线对过滤区块中与自己相关的发票数据进行验证,即使在第一区块链节点断网的前提下,第一区块链节点也可以通过过滤区块对所获取到的自己相关的发票数据进行验证,对发票数据的验证方式与上述步骤S103中对目标业务数据的验证方式相同,此处不再进行赘述。
[0076] 请参见图8,是本申请提供的一种数据验证的场景示意图。服务器500为上述全量节点,服务器600为上述第一区块链节点(还是以第一区块链节点为轻量节点为例)。服务器600可以向服务器500发送数据拉取请求,以拉取得到自己的业务数据。其中,服务器600对应有一条全量区块链,用于存储区块链网络中上链的所有业务数据,服务器600在本地创建有一个区块账本,用于离线存储从全量节点处拉取到的区块。服务器500接收到服务器600发送的数据拉取请求之后,可以获取到服务器600的节点权限。通过该节点权限,服务器500可以知道全量区块链中哪些业务数据是属于服务器600的,即哪些业务数据是在服务器600的的节点权限内可以获取到的业务数据,以及哪些业务数据是不属于服务器600的,即哪些业务数据是在服务器600的的节点权限内获取不到的业务数据。服务器500可以遍历全量区块链中所有的区块,并将遍历到的区块中不属于服务器600的业务数据进行过滤(即去掉),但是保留不属于服务器600的业务数据的哈希值。通过此种过滤方式可以得到针对服务器
600的过滤区块,该过滤区块中可以包括区块头、属于服务器600的业务数据、属于服务器
600的业务数据的哈希值以及不属于服务器600的业务数据的哈希值。换种说法,通过此种过滤方式可以使得服务器600只能获取到属于自己的节点权限内的业务数据,而不能获取到不属于自己的节点权限内的其他业务数据,对于不属于服务器600的节点权限内的业务数据,服务器600只能获取到该业务数据对应的哈希值,保障了不属于服务器600的业务数据的私密性。
[0077] 如图8所示,区块100a即是服务器500在全量区块链上遍历到的一个区块,区块100a中包括区块头102a和区块体112a。区块体112a中包括4个业务数据(分别为业务数据
104a、业务数据105a、业务数据106a和业务数据107a),区块体112a中还包括业务数据104a对应的哈希值108a、业务数据105a对应的哈希值109a、业务数据106a对应的哈希值110a和业务数据107a对应的哈希值111a。此处仅以区块体112a中包括4个业务数据为例进行说明,区块体112a中具体包括几个业务数据根据实际应用场景决定,这里不作限制。其中,上述业务数据又可以称为交易数据,业务数据中的input指交易的输入,output指交易的输出,这里以转账交易为例说明上述业务数据中的input和output的具体含义。当用户A向用户B执行转账交易时,inuput可以指用户A向用户B转账时资金的来源(即用户A向用户B转移的资金的提供者,例如第三方或者用户A的账户),相应的,output可以指用户A向用户B转账时资金的去向(例如用户B的账户)。实际上,一个业务数据中可以存在多个intput以及多个output,当一个转账交易中存在多个intput,则表明该笔转账交易中资金的来源有多个,相应的,当一个转账交易中存在多个output,则表明该笔转账交易中资金的去向有多个,例如多人向多人进行转账交易。上述一个业务数据中存在的input和output的个数根据实际应用场景决定,对此不作限制。服务器500可以对区块100a中不属于服务器600的业务数据进行过滤,此处以区块体112a中的业务数据104a属于服务器600,而业务数据105a、业务数据
106a和业务数据107a不属于服务器600为例进行说明。如图8所示,服务器将区块100a的区块体112a中的业务数据105a、业务数据106a和业务数据107a过滤掉之后可以得到对应的过滤区块101a。区块101a中包括区块体113a以及区块100a中的区块头102a,区块体113a中包括业务数据104a、业务数据104a对应的哈希值108a、业务数据105a对应的哈希值109a、业务数据106a对应的哈希值110a和业务数据107a对应的哈希值111a。其中,当服务器500遍历到的区块中没有属于服务器600的业务数据,则服务器500可以将该区块中的业务数据全部过滤掉,保留该区块中业务数据的哈希值以及区块头,得到对应的过滤区块。服务器500可以将得到的所有的过滤区块发送给服务器600,例如,服务器500可以将此处得到的过滤区块
101a发送给服务器600。服务器600可以将获取到的过滤区块缓存至本地的区块账本中。
[0078] 若通过遍历区块账本中的区块,得出上述目标业务数据为区块101a中的业务数据104a,则可以将上述区块101a作为目标区块。第一区块链节点可以从区块账本中获取到区块101a,并通过区块101a对目标业务数据进行离线验证,得到验证结果:
[0079] 如图8所示,服务器600可以通过区块体102a中的所有哈希值计算得到一个待验证的默克尔树根值(默克尔树根值实际也是一个哈希值),具体为:服务器600可以依次计算区块体113a中相邻的两个哈希值对应的哈希值(例如,可以将相邻的两个哈希值进行拼接,得到一个字符串,对该字符串进行哈希值运算,得到该相邻的两个哈希值对应的哈希值)。此处,服务器600可以计算得到相邻的哈希值108a和哈希值109a对应的哈希值H1,计算得到相邻的哈希值110a和哈希值111a对应的哈希值H2。进一步地,服务器600可以计算得到哈希值H1和哈希值H2对应的哈希值H3,此处也可以是对拼接后的哈希值H1和哈希值H2进行哈希运算,得到的对应的哈希值H3。该哈希值H3即是通过区块体113a中的所有哈希值计算得到的待验证的默克尔根树根值。服务器600可以从区块101a的区块头102a中获取到一个合法的默克尔树根值。服务器600可以对上述计算得到的待验证的默克尔树根值和上述获取到的合法的默克尔树根值进行对比,当对比出该两个默克尔树根值相同时,则判定区块体113a中的业务数据104a合法,即目标业务数据具备数据合法性,得到目标业务数据对应的合法验证结果114a。
[0080] 通过本申请所提供的方法,其一,全量节点在向第一区块链节点推送对应的业务数据时,会先将不属于该第一区块链节点的业务数据过滤掉,保障了不属于该第一区块链节点的业务数据的隐私性。并且,由于不需要向该第一区块链节点发送不属于其的业务数据,也提高了全量节点和第一区块链节点之间的通信效率,同时,还减少了第一区块链节点需要从全量节点处下载缓存的业务数据的数据量,提升了第一区块链节点的缓存容量。其二,全量节点在向第一区块链节点推送对应的业务数据时,虽然不会向第一区块链节点推送不属于其的业务数据,但会将不属于其的业务数据的哈希值一起推送给第一区块链节点。实际上,在第一区块链节点对自己的业务数据进行合法性验证时,也只需要所有业务数据的哈希值,因此,本申请所提供的方法不会影响第一区块链节点通过拉取得到的过滤区块实现对自己的业务数据的合法性验证,并且该合法性验证还可以是离线的验证,即使第一区块链节点在断网的情况下,也可以对获取到的自己的业务数据进行离线验证。
[0081] 请参见图9,是本申请提供的一种基于区块链网络的数据验证装置的结构示意图。如图9所示,数据验证装置1可以包括:响应模块101、遍历模块102和验证模块103;
[0082] 响应模块101,用于响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;
[0083] 遍历模块102,用于对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;
[0084] 验证模块103,用于根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。
[0085] 其中,响应模块101、遍历模块102和验证模块103的具体功能实现方式请参见图3对应的实施例中的步骤S101-步骤S103,这里不再进行赘述。
[0086] 其中,遍历模块102,包括:第一遍历单元1021和第一确定单元1022;
[0087] 第一遍历单元1021,用于根据目标业务数据对应的哈希值,对本地存储的区块账本进行遍历;
[0088] 第一确定单元1022,用于将在区块账本中遍历到的包含目标业务数据对应的哈希值的区块,确定为与目标业务数据相关联的目标区块。
[0089] 其中,第一遍历单元1021和第一确定单元1022的具体功能实现方式请参见图3对应的实施例中的步骤S102,这里不再进行赘述。
[0090] 其中,目标业务数据为电子票据;遍历模块102,包括:获取单元1023、[0091] 第二遍历单元1024和第二确定单元1025;
[0092] 获取单元1023,用于获取电子票据中的开票时间;
[0093] 第二遍历单元1024,用于基于开票时间确定目标区块高度,基于目标区块高度遍历区块账本;
[0094] 第二确定单元1025,用于将遍历到的区块账本中区块高度为目标区块高度的区块,确定为与目标业务数据相关联的目标区块。
[0095] 其中,获取单元1023、第二遍历单元1024和第二确定单元1025的具体功能实现方式请参见图3对应的实施例中的步骤S102,这里不再进行赘述。
[0096] 其中,目标区块中的区块参数包括属于目标区块的所有业务数据分别对应的哈希值;验证模块103,包括:第三遍历单元1031、第一结果确定单元1032和第二结果确定单元1033;
[0097] 第三遍历单元1031,用于遍历目标区块中的哈希值;
[0098] 第一结果确定单元1032,用于当在目标区块中遍历到目标业务数据对应的哈希值时,得到合法数据结果;
[0099] 第二结果确定单元1033,用于当在目标区块中未遍历到目标业务数据对应的哈希值时,得到非法数据结果。
[0100] 其中,第三遍历单元1031、第一结果确定单元1032和第二结果确定单元1033的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0101] 其中,验证模块103,包括:第四遍历单元1034和第三确定单元1035;
[0102] 第四遍历单元1034,用于遍历目标区块中的业务数据;
[0103] 第三确定单元1035,用于当在目标区块中遍历到目标业务数据时,根据目标业务数据对应的哈希值以及目标区块中的区块参数,确定目标业务数据对应的验证结果。
[0104] 其中,第四遍历单元1034和第三确定单元1035的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0105] 其中,目标区块中的区块参数包括区块头参数以及属于目标区块的所有业务数据分别对应的哈希值;所有业务数据包括目标业务数据;第三确定单元1035,包括:确定子单元10351、对比子单元10352、第一结果子单元10353和第二结果子单元10354;
[0106] 确定子单元10351,用于根据目标区块中属于目标区块的所有业务数据分别对应的哈希值,确定目标区块对应的待验证默克尔树根值;
[0107] 对比子单元10352,用于从目标区块的区块头参数中获取合法默克尔树根值,对比待验证默克尔树根值和合法默克尔树根值;
[0108] 第一结果子单元10353,用于当对比出待验证默克尔树根值和合法默克尔树根值相同时,得到目标业务数据对应的合法数据结果;
[0109] 第二结果子单元10354,用于当对比出待验证默克尔树根值和合法默克尔树根值不相同时,得到目标业务数据对应的非法数据结果。
[0110] 其中,确定子单元10351、对比子单元10352、第一结果子单元10353和第二结果子单元10354的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0111] 其中,确定子单元10351,包括:第一获取子单元103511、第一顺序子单元103512和第一树根子单元103513;
[0112] 第一获取子单元103511,用于获取属于目标区块的每个业务数据分别对应的数据索引;
[0113] 第一顺序子单元103512,用于根据每个业务数据分别对应的数据索引,确定每个业务数据分别对应的哈希值之间的排列顺序;
[0114] 第一树根子单元103513,用于基于每个业务数据分别对应的哈希值之间的排列顺序,确定目标区块对应的待验证默克尔树根值。
[0115] 其中,第一获取子单元103511、第一顺序子单元103512和第一树根子单元103513的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0116] 其中,确定子单元10351,包括:第二获取子单元103514、第二顺序子单元103515和第二树根子单元103516;
[0117] 第二获取子单元103514,用于获取属于目标区块的每个业务数据分别对应的生成时间;
[0118] 第二顺序子单元103515,用于根据每个业务数据分别对应的生成时间,确定每个业务数据分别对应的哈希值之间的排列顺序;
[0119] 第二树根子单元103516,用于基于每个业务数据分别对应的哈希值之间的排列顺序,确定目标区块对应的待验证默克尔树根值。
[0120] 其中,第二获取子单元103514、第二顺序子单元103515和第二树根子单元103516的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0121] 其中,数据验证装置1,还包括:第一获取模块104、第一确定模块105、第二获取模块106和第二确定模块107;
[0122] 第一获取模块104,用于从区块账本中获取目标区块对应的子区块;目标区块和子区块在全量区块链上的区块高度相邻;子区块的区块高度大于目标区块的区块高度;
[0123] 第一确定模块105,用于基于目标区块中的区块头,确定目标区块对应的待验证区块头哈希值;
[0124] 第二获取模块106,用于获取子区块的区块头中的前区块头哈希值,基于前区块头哈希值验证待验证区块头哈希值;
[0125] 第二确定模块107,用于当验证出待验证区块头哈希值与前区块头哈希值相同时,确定目标区块中的区块参数具备参数合法性。
[0126] 其中,第一获取模块104、第一确定模块105、第二获取模块106和第二确定模块107的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0127] 其中,区块账本中的区块为过滤区块;过滤区块为将全量区块链上的区块中的无关联业务数据进行过滤,且保留无关联业务数据对应的哈希值后所得到的区块;无关联业务数据指与第一区块链节点之间不具有业务关系的业务数据。
[0128] 其中,目标区块中包括属于第二区块链节点的存证业务数据;第二区块链节点持有目标区块在全量区块链中的区块高度;数据验证装置1,还包括:第三获取模块108、第四获取模块109和缓存模块110;
[0129] 第三获取模块108,用于获取第二区块链节点发送的目标区块的区块高度;
[0130] 第四获取模块109,用于基于目标区块的区块高度,在全量区块链中获取目标区块;
[0131] 缓存模块110,用于将目标区块缓存至区块账本;
[0132] 则,验证模块103,还用于:
[0133] 根据目标业务数据对应的哈希值和目标区块中的存证业务数据对目标业务数据进行离线验证,得到验证结果。
[0134] 其中,第三获取模块108、第四获取模块109和缓存模块110的具体功能实现方式请参见图3对应的实施例中的步骤S103,这里不再进行赘述。
[0135] 本申请通过第一区块链节点响应针对目标业务数据的验证操作,获取目标业务数据对应的哈希值;对本地存储的区块账本进行遍历,从区块账本中选择与目标业务数据相关联的目标区块;区块账本包括来自于全量区块链中的至少一个区块;根据目标业务数据对应的哈希值和目标区块中的区块参数,对目标业务数据进行离线验证,得到验证结果;验证结果包括合法数据结果和非法数据结果。由此可见,本申请中第一区块链节点可以在不联网的前提下,通过本地存储的区块账本自行对目标业务数据的合法性进行离线验证,提高了针对业务数据的验证效率。
[0136] 请参见图10,是本申请提供的一种计算机设备的结构示意图。如图10所示,计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图10所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
[0137] 在图10所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现前文图3所对应实施例中对数据验证方法的描述。应当理解,本申请中所描述的计算机设备1000也可执行前文图9所对应实施例中对数据验证装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0138] 此外,这里需要指出的是:本申请还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的数据验证装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3所对应实施例中对数据验证方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
[0139] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
[0140] 以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈