一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于区块链的数据溯源查询方法及装置

2022-06-16 06:45:19 来源:中国专利 TAG:


1.本发明涉及区块链技术领域,尤其涉及一种基于区块链的数据溯源查询方法及装置。


背景技术:

2.近年来,区块链技术因其具备防篡改、全程留痕、可追溯及公开透明等优点,而被广泛应用于各种业务数据的溯源查询中,比如产品供应、产品加工及奢侈品产地等溯源查询应用中。因此,如何快速且准确查询数据溯源成为热门研究方向。
3.相关技术中,区块链采用链式结构且存储有大量交易数据,当接收到溯源查询请求时,通过依次对区块链中区块的所有交易进行检验,或者针对区块链中交易数据所重构的默克尔有向无环图进行溯源查询,从而获取溯源查询结果。
4.然而,由于现有技术基于区块链进行溯源查询时,每次都需要遍历整个区块或者重构的默克尔有向无环图,从而导致区块链上包含大量的区块和大量交易数据时,不仅溯源查询效率低,而且不利于后续交易数据的安全审计。


技术实现要素:

5.本发明提供一种基于区块链的数据溯源查询方法及装置,用以解决现有技术基于区块链进行溯源查询时的溯源查询效率低以及不利于后续交易数据的安全审计的缺陷,实现对交易数据进行安全高效的溯源查询以及方便后续交易数据的安全审计。
6.本发明提供一种基于区块链的数据溯源查询方法,包括:
7.基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;
8.根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;
9.向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至溯源链中。
10.根据本发明提供的一种基于区块链的数据溯源查询方法,在所述基于用户的溯源查询请求,从溯源链上获取所述用户的查询权限和查询条件的步骤之前,所述方法还包括:
11.采用有向无环图,对交易链中的交易数据进行重构,得到溯源有向图;其中,所述溯源有向图表包括逆向溯源有向图和前向溯源有向图;
12.采用邻接表,将所述溯源有向图重构为溯源邻接表;
13.采用映射图,将所述溯源邻接表的顶点和所述顶点的编号之间的关系重构为溯源映射表;
14.确定所述溯源邻接表和所述溯源映射表为溯源存储数据,并将所述溯源存储数据存储至内存中。
15.根据本发明提供的一种基于区块链的数据溯源查询方法,在所述将所述溯源存储
数据存储至内存中的步骤之后,所述方法还包括:
16.将所述溯源邻接表和所述溯源映射表以文件形式存储至本地硬盘中,并将所述本地硬盘中文件的哈希值存储至溯源链中。
17.根据本发明提供的一种基于区块链的数据溯源查询方法,在所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤之前,所述方法还包括:
18.基于重启指令,检验所述本地硬盘中文件的哈希值与所述溯源链上的哈希值是否一致;
19.如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值一致,则将所述本地硬盘中的溯源邻接表和溯源映射表加载至内存中,并执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
20.根据本发明提供的一种基于区块链的数据溯源查询方法,如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值不一致,则更新所述本地硬盘中的文件。
21.根据本发明提供的一种基于区块链的数据溯源查询方法,在所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤之前,所述方法还包括:
22.基于接收的新区块,对所述内存中的溯源存储数据进行更新,以及更新所述本地硬盘中的文件,并将更新后文件的哈希值存储至所述溯源链中,然后执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
23.根据本发明提供的一种基于区块链的数据溯源查询方法,所述更新所述本地硬盘中的文件的过程,包括:
24.针对所述本地硬盘中的第j个文件,查询所述第j个文件包含的最新区块编号为t,确定所述第j个文件在当前的最新版本为j
t
,并判断所述溯源链上存储的第j个文件在j
t
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致;
25.若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致,则基于所述交易链中大于编号t的区块重构所述本地硬盘中的所述第j个文件;
26.若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值不一致,则判断所述溯源链上存储的第j个文件在j
t-1
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t-1
版本时的哈希值一致;
27.直至所述溯源链上存储的第j个文件在j
t-x
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t-x
版本时的哈希值一致为止;然后基于所述交易链中编号大于t-x的区块重构所述本地硬盘中的所述第j个文件;其中,t、x和j均为正整数,j为所述本地硬盘中的一个文件。
28.根据本发明提供的一种基于区块链的数据溯源查询方法,所述根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间,包括:
29.当内存中的溯源存储数据包括表征交易链中交易数据之间依赖关系的溯源邻接表和溯源映射表时,根据所述查询权限和所述查询条件,对所述内存中的所述溯源存储数据进行广度优先搜索,得到查询结果和查询时间。
30.根据本发明提供的一种基于区块链的数据溯源查询方法,所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件,包括:
31.基于用户的溯源查询请求,从溯源链上获取所述用户的查询权限;
32.从所述溯源查询请求中获取所述用户输入的查询条件。
33.本发明还提供一种基于区块链的数据溯源查询装置,包括:
34.获取模块,用于基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;
35.查询模块,用于根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;
36.处理模块,用于向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至溯源链中。
37.本发明提供的基于区块链的数据溯源查询方法及装置,其中基于区块链的数据溯源查询方法,基于接收到的用户的溯源查询请求,首先获取用户的查询权限和查询条件,并基于查询权限和查询条件,对内存中已存储的溯源存储数据进行搜索,从而得到查询结果和查询时间戳。由于溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据,因此通过在内存中搜索溯源存储数据的方式进行溯源查询过程,不仅大幅节省溯源查询时间,也能确保溯源查询的高效率性和高准确性;进一步的,再将查询结果反馈至用户时,将针对用户的本次溯源查询请求的查询权限、查询条件、查询结果和查询时间戳存储至溯源链,以此结合交易链存储具备依赖关系的交易数据以及溯源链中存储的溯源存储数据的方式,既能够实现便于后续的安全审计及交易数据管理的目的,也能够提高溯源查询的安全性和高效性,从而也能够灵活满足各种溯源需求。
附图说明
38.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1是本发明提供的基于区块链的数据溯源查询方法的流程示意图;
40.图2是本发明提供的溯源有向图的结构示意图;
41.图3是本发明提供的溯源邻接表的结构示意图;
42.图4是本发明提供的溯源映射表的结构示意图;
43.图5是本发明提供的基于区块链的数据溯源查询装置的结构示意图;
44.图6是本发明提供的电子设备的结构示意图。
具体实施方式
45.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
46.下面结合图1-图6描述本发明的基于区块链的数据溯源查询方法及装置,其中,基于区块链的数据溯源查询方法的执行主体可以为区块链上所有全节点中的任意一个全节
点,该全节点可以为个人计算机(personal computer,pc)、便携式设备、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备等其它电子设备,也可以为一台服务器或者由多台服务器构成的服务器集群、云计算中心等。本发明对全节点的具体形式不做限定。
47.需要说明的是,下述方法实施例的执行主体可以是上述全节点的部分或者全部。下述方法实施例以执行主体为全节点为例进行说明,全节点为区块链上所有全节点中的任意一个全节点。
48.图1为本发明提供的基于区块链的数据溯源查询方法的流程示意图,如图1所示,该基于区块链的数据溯源查询方法,包括以下步骤:
49.步骤110、基于用户的溯源查询请求,获取所述用户的查询权限和查询条件。
50.具体的,全节点在其正常运行时,可以接收用户的溯源查询请求,获取用户的查询权限和查询条件,查询权限可以基于用户输入的账号、个人身份证标识号(identity document,id)是身份标识码等唯一标识或指代用户身份的信息申请授权通过后获取,查询条件可以基于用户输入的溯源查询需求提取,比如用户输入的溯源查询需求可以为所需溯源查询的数据id或数据哈希值,也可以为所需溯源查询的数据类型或数据范围等限定查询范围的具体数据。
51.步骤120、根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳。
52.其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据。
53.具体的,全节点的内存中预先存储有由交易链中具备依赖关系的交易数据分别以邻接表和映射图重构后的数据,因此可以基于用户的查询权限和查询条件直接进行搜索,并快速搜索到与查询权限和查询条件匹配的查询结果,查询时间戳在搜索到查询结果时可直接显示且用于表示查询结果的时间,查询结果为符合用户查询权限范围的结果。
54.步骤130、向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至所述溯源链中。
55.具体的,当全节点搜索其内存的溯源存储数据后得到与用户的查询权限和查询条件匹配的查询结果,可以将查询结果反馈至用户,同时也可以将针对用户本次溯源查询请求的查询权限、查询条件、查询结果和查询时间戳组成溯源查询记录存储至溯源链中,以此确保所有的溯源查询都能够被记录,确保溯源查询的安全。
56.本发明提供的基于区块链的数据溯源查询方法,基于接收到的用户的溯源查询请求,首先获取用户的查询权限和查询条件,并基于查询权限和查询条件,对内存中已存储的溯源存储数据进行搜索,从而得到查询结果和查询时间戳。由于溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据,因此通过在内存中搜索溯源存储数据的方式进行溯源查询过程,不仅大幅节省溯源查询时间,也能确保溯源查询的高效率性和高准确性;进一步的,再将查询结果反馈至用户时,将针对用户的本次溯源查询请求的查询权限、查询条件、查询结果和查询时间戳存储至溯源链,以此结合交易链存储具备依赖关系的交易数据以及溯源链中存储的溯源存储数据的方式,既能够实现便于后续的安全审计及交易数据管理的目的,也能够提高溯源查询的安全性和高效性,从而也能够灵活满足各种溯源需求。
57.可选的,在步骤110之前,所述方法还可以包括:
58.首先,采用有向无环图,对交易链中的交易数据进行重构,得到溯源有向图;其中,所述溯源有向图表包括逆向溯源有向图和前向溯源有向图;其次,采用邻接表,将所述溯源有向图重构为溯源邻接表;然后,采用映射图,将所述溯源邻接表的顶点和所述顶点的编号之间的关系重构为溯源映射表;最后,确定所述溯源邻接表和所述溯源映射表为溯源存储数据,并将所述溯源存储数据存储至内存中。
59.具体的,将交易链中具备依赖关系的交易数据先采用有向无环图重构为溯源有向图,如图2所示,溯源有向图包括图2中(a)所示的逆向溯源有向图和(b)所示的前向溯源有向图;再采用邻接表将溯源有向图重构为溯源邻接表,并使用预设数据结构将溯源邻接表存储至内存中,预设数据结构可以至少满足push功能和数据结构长度可扩展功能,push功能可以向数组末尾添加新数据,并返回新长度,能改变数组长度。比如,当预设数据结构为c 语言中的二维vector数据结构时,可将图2中(a)所示的逆向溯源有向图和(b)所示的前向溯源有向图对应重构为如图3中(a)所示的逆向溯源邻接表和(b)所示的前向溯源邻接表。此外,还可以采用映射图,建立溯源邻接表的顶点的编号和顶点之间以及溯源邻接表的顶点和顶点的编号之间的一一对应关系,编号从0开始递增,得到的溯源映射表包括如图4中(a)所示的溯源邻接表的顶点的编号和顶点对应关系,以及(b)溯源邻接表的顶点和顶点的编号对应关系,然后再进一步将溯源邻接表和溯源映射表作为溯源存储数据存储于内存中,此时溯源邻接表的顶点的编号和顶点对应关系,以及溯源邻接表的顶点和顶点的编号对应关系,均与逆向溯源邻接表和前向溯源邻接表相对应,方便后续直接访问内存进行溯源查询。
60.需要说明的是,如图2所示,溯源邻接表是一种带有区块链区块号作为版本标记的邻接表且表示为{0

{(1,e1,v1),(3,e2,v1)},1

{(4,e3,v2)},

}的形式,其中0,1,2,

表示溯源邻接表的顶点的不同编号;e1,e2,e3,

表示溯源邻接表不同的边,也即顶点之间的交易关系,可以是数值、文本等形式;v1,v2,

表示不同区块的高度或版本,v1表示第1个区块,v2表示第2个区块,依此类推进行编号递增;0

{(1,e1,v1)}表示从溯源邻接表的顶点0指向顶点为1且边为e1的交易数据出现在第1个区块v1中。比如,用户a为顶点0、用户b为顶点1、e1表示用户a向用户b转账50元时,0

{(1,e1,v1)}可以表示用户a向用户b转账50元的交易数据记录在第1个区块v1中。
61.此外,溯源邻接表的顶点和顶点的编号对应关系可以表示为{(hash1,(num1,v0)),((hash2,(num2,v0)),((hash3,(num3,v0)),

}的关系,溯源邻接表的顶点的编号和顶点对应关系可以表示为{(num1,(hash1,v0)),(num2,(hash2,v0)),(num3,(hash3,v0)),

}的关系,如图4所示,hash1,hash2,

是以不同的哈希值表示溯源邻接表中的顶点,num1,num2,num3,

表示溯源邻接表中的顶点所对应的编号,每个顶点都对应着唯一的编号,每个编号也对应着唯一的顶点,编号从1开始递增,溯源邻接表中每添加一个新的顶点时,编号加1。特别是,图4中的编号和图3中存储溯源邻接表的预设数据结构的下标相对应。
62.本发明提供的基于区块链的数据溯源查询方法,通过采用有向无环图重构交易链中的交易数据得到溯源有向图、采用邻接表将溯源有向图重构为溯源邻接表以及采用映射图将溯源邻接表的顶点和顶点的编号之间的关系重构为溯源映射表,再将溯源邻接表和溯源映射表作为溯源存储数据存储至内存中,以此使得正常运行中的全节点接收到用户的溯
源查询请求时能够通过直接且快速访问内存中溯源存储数据的方式,快速且准确的执行溯源查询,从而提高了溯源查询的高效性和准确性。
63.可选的,在执行将所述溯源存储数据存储至内存中的步骤之后,所述方法还可以包括:
64.将所述溯源邻接表和所述溯源映射表以文件形式存储至本地硬盘中,并将所述本地硬盘中文件的哈希值存储至溯源链中。
65.其中,本地硬盘中文件包括溯源邻接表(包括逆向溯源邻接表和前向溯源邻接表)文件、溯源邻接表的顶点的编号和顶点对应关系文件以及溯源邻接表的顶点和顶点的编号对应关系文件。
66.具体的,在将包含有溯源邻接表和溯源映射表的溯源存储数据存储于内存中之后,也可以使用智能合约将溯源邻接表和溯源映射表以文件形式表示为邻接表相关文件,再将邻接表相关文件存储于本地硬盘中,并将本地硬盘中邻接表相关文件的哈希值存储至溯源链中。基于此可知,溯源链的功能除了存储查询权限、查询条件、查询结果和查询时间戳之外,还可以存储本地硬盘中邻接表相关文件的哈希值。
67.本发明提供的基于区块链的数据溯源查询方法,通过将溯源邻接表和溯源映射表以文件形式存储于本地硬盘且将本地硬盘中文件的哈希值存储于溯源链的方式,不仅提高了溯源链的功能多样性,也便于后续对本地硬盘中文件的真实性进行校验。
68.可选的,在步骤110之前,所述方法还可以包括:
69.基于重启指令,检验所述本地硬盘中文件的哈希值与所述溯源链上的哈希值是否一致;如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值一致,则将所述本地硬盘中的溯源邻接表和溯源映射表加载至内存中,并执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
70.具体的,考虑到全节点存在断电或故障等导致停止运行或关机的异常情况时,会在处理该异常情况后重启全节点,并在全节点接收到重启指令重启后,可以首先检验本地硬盘中文件的哈希值与溯源链上的哈希值是否一致,当确定本地硬盘中文件的哈希值与溯源链上的哈希值一致,则将本地硬盘中的溯源邻接表和溯源映射表加载至内存中,并基于区块链本身含有的同步机制,对重启的全节点进行同步操作,使得当前全节点的版本与其它正常状态下全节点的版本保持一致,从而便于后续接收到溯源查询请求时执行对应的溯源查询操作。其中,重启指令可以基于人为触摸开机键生成,也可以在异常故障处理完成时自动生成,此处不作具体限定。
71.需要说明的是,通常区块链上含有很多全节点,当其中一个全节点由于故障关机一段时间再重启时,即使其通过数据校验,也只能说明断电之前的存储的数据没问题,并不包含断连过程中新增加的区块的数据,也即不能保证当前版本与其它全节点的最新版本保持一致,因此可以使用区块链自带的同步机制进行同步操作,以此使得整个区块链上的所有全节点的版本保持一致。
72.本发明提供的基于区块链的数据溯源查询方法,针对全节点的重启指令,检验本地硬盘中文件的哈希值与溯源链上的哈希值一致时,通过将本地硬盘中的溯源邻接表和溯源映射表加载至内存中的方式,实现后续可正常接收溯源查询请求并执行溯源查询的操作,从而确保溯源查询的高效性,也节省了时间。
73.可选的,在检验所述本地硬盘中文件的哈希值与所述溯源链上的哈希值是否一致时,所述方法还可以包括:
74.如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值不一致,则更新所述本地硬盘中的文件。
75.具体的,当判定本地硬盘中文件的哈希值与溯源链上的哈希值不一致时,可以认为本地硬盘中某个区块的哈希值与区块链上对应区块的哈希值不一致,此时该区块之前的交易数据没有错且未被更改,该区块之后的交易数据发生了变化且并不清楚哪个数据的变化导致了哈希值不一致,考虑到交易链上的交易内容不会发生变化,因此可以从交易链中寻找发生变化的数据,也即可以使用该区块之后所有区块的交易数据更新本地硬盘中的溯源邻接表和溯源映射表,直至与溯源链上的哈希值一致。
76.本发明提供的基于区块链的数据溯源查询方法,在检验本地硬盘中文件的哈希值与溯源链上的哈希值是否一致时,如果确定本地硬盘中文件的哈希值与溯源链上的哈希值不一致,通过更新本地硬盘中的文件的方式,实现本地硬盘中文件达到最新版本且与溯源链上的哈希值保持一致,从而确保了后续溯源查询的安全高效性。
77.可选的,在步骤110之前,所述方法还可以包括:
78.基于接收的新区块,对所述内存中的溯源存储数据进行更新,以及更新所述本地硬盘中的文件,并将更新后文件的哈希值存储至所述溯源链中,然后执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
79.具体的,当全节点接收到新的区块后,可以先基于新接收的区块中交易数据的依赖关系更新溯源存储数据,也即将新区块的交易数据采用有向无环图的邻接表的方式添加至溯源存储数据的当前溯源邻接表之后,以此实现对溯源邻接表的更新,并基于更新的溯源邻接表,相应更新溯源映射表,从而实现了对溯源存储数据的更新。
80.然后,将更新后的溯源邻接表和更新后的溯源映射表以文件的形式存储至本地硬盘中,以此实现对本地硬盘中文件的更新,并将更新后文件的哈希值存储至溯源链中,从而便于后续接收到溯源查询请求时执行对应的溯源查询操作。
81.本发明提供的基于区块链的数据溯源查询方法,针对全节点接收的新区块,对内存中的溯源存储数据以及本地硬盘中的文件进行更新,并将更新后文件的哈希值存储至溯源链中,以此实现区块链上每接收到一个新区块时都能够及时且快速更新内存中的溯源存储数据、本地硬盘中的文件以及溯源链上的哈希值,从而确保溯源查询的可靠稳定性和准确高效性。
82.可选的,所述更新所述本地硬盘中的文件的过程,包括:
83.针对所述本地硬盘中的第j个文件,查询所述第j个文件包含的最新区块编号为t,确定所述第j个文件在当前的最新版本为j
t
,并判断所述溯源链上存储的第j个文件在j
t
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致;若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致,则基于所述交易链中大于编号t的区块重构所述本地硬盘中的所述第j个文件;若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值不一致,则判断所述溯源链上存储的第j个文件在j
t-1
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t-1
版本时的哈希值一致;直至所述溯源链上存
储的第j个文件在j
t-x
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t-x
版本时的哈希值一致为止;然后基于所述交易链中编号大于t-x的区块重构所述本地硬盘中的所述第j个文件;其中,t、x和j均为正整数,j为所述本地硬盘中的一个文件。
84.具体的,针对本地硬盘中文件的更新,本发明采用回退法进行更新,设定本地硬盘中的文件包括前向溯源邻接表文件、逆向溯源邻接表文件、溯源邻接表的顶点的编号和顶点对应关系文件以及溯源邻接表的顶点和顶点的编号之间对应关系文件这4个文件,j为本地硬盘的4个文件中的一个文件,首先找到全节点存储的文件中最大版本号为t,t与交易链中区块的编号相对应,因此也表示全节点当前最多包含了区块t之前的交易数据;然后,依次对全节点存储的4个文件的哈希值与溯源链上的对应文件在最新版本时的哈希值进行比对,也即,针对本地硬盘中的第j个文件,查询第j个文件包含的最新区块编号为t,并确定第j个文件在当前的最新版本为j
t
,然后判断溯源链上存储的第j个文件在j
t
版本时的哈希值是否与本地硬盘中第j个文件在j
t
版本时的哈希值一致,若溯源链上存储的第j个文件在j
t
版本时的哈希值与本地硬盘中第j个文件在j
t
版本时的哈希值一致,则基于交易链中编号大于的区块重构本地硬盘中的第j个文件,并直接将第j个文件加载至全节点的内存中;反之,若溯源链上存储的第j个文件在j
t
版本时的哈希值与本地硬盘中第j个文件在j
t
版本时的哈希值不一致,则将第j个文件更新至与溯源链上j
t
版本对应文件一致后加载至内存中,也即将第j个文件中带有j
t
版本标记的内容删除,使第j个文件回退至t-1版本,然后判断溯源链上存储的第j个文件在t-1版本时的哈希值是否与本地硬盘中第j个文件在t-1版本时的哈希值一致,如果溯源链上存储的第j个文件在t-1版本时的哈希值与本地硬盘中第j个文件在t-1版本时的哈希值还不一致,再使第j个文件回退至版本v
t-2
。以此类推,直至溯源链上存储的第j个文件在t-x版本时的哈希值与本地硬盘中第j个文件在t-x版本时的哈希值一致。最后基于编号大于t-x的区块重构本地硬盘中的第j个文件。以此实现对本地硬盘中每个文件的更新。其中,0≤t-x≤m,0≤x≤t,t、x和j均为正整数,j=1、2、3、4,m为区块链中最高或最新区块的编号。
85.需要说明的是,本发明中的哈希值校验、内存中溯源存储数据存储和更新、本地硬盘中文件的存储及更新、交易数据的上链操作等都由区块链上部署的智能合约自动完成。
86.本发明提供的基于区块链的数据溯源查询方法,通过判断本地硬盘中文件在当前最新版本时的哈希值是否与溯源链上对应文件在该最新版本时的哈希值是否一致且判定不一致时将该文件的版本回退后再次进行哈希值比对,直至比对结果一致为止。以此实现针对全节点重启或接收到新区块时快速且及时更新本地硬盘中文件以及内存中溯源存储数据的目的,从而确保了全节点正常运行时执行溯源查询的精确可靠性和灵活有效性。
87.可选的,步骤120的实现过程可以包括:
88.当内存中的溯源存储数据包括表征交易链中交易数据之间依赖关系的溯源邻接表和溯源映射表时,根据所述查询权限和所述查询条件,对所述内存中的所述溯源存储数据进行广度优先搜索,得到查询结果和查询时间。
89.具体的,当内存中的溯源存储数据包括表征交易链中交易数据之间依赖关系的溯源邻接表时,可以示例为图3所示的逆向溯源邻接表和前向溯源邻接表,其中的顶点采用哈希值表示且指代用户的地址、加工数据等,边可以表示顶点之间的关系且关系可以为转账、加工、操作等,采用图3中(a)所示的逆向溯源邻接表对给定的哈希值为hash6的顶点进行逆
向溯源时,以三元组形式表示的查询结果为{(hash6,hash3,e5),(hash6,hash4,e6),(hash3,hash0,e2),(hash4,hash1,e3)},采用图3中(b)所示的前向溯源邻接表对给定的哈希值为hash0的顶点进行前向溯源时,获得前向溯源的查询结果且可以表示为{(hash0,hash2,e1),(hash0,hash3,e2),(hash2,hash5,e4),(hash3,hash6,e5)}。
90.当溯源映射表如图4所示的溯源邻接表的顶点的编号和顶点对应关系以及溯源邻接表的顶点和顶点的编号对应关系时,图3是以预设数据结构存储图2所示的逆向溯源有向图和前向溯源有向图所形成的的逆向溯源邻接表和前向溯源邻接表,图4是对图3所示的逆向溯源邻接表和前向溯源邻接表的依赖关系中顶点的一一映射且将哈希值映射为数字编号,数字编号对应于图3所示的溯源邻接表的下标,以此方便对溯源邻接表中顶点的访问。比如,采用图3中(a)所示的逆向溯源邻接表中对输入为hash6的顶点进行溯源查询时,其过程可以描述为:首先,在图4中(b)所示的溯源邻接表的顶点和顶点的编号对应关系中找到hash6所对应的顶点编号为6;再在图3中(a)所示的逆向溯源邻接表中找到6的后继节点为3和4,并以三元组的形式输出为{(6,3,e5),(6,4,e6)};接着找出节点3和4的后继节点,并以三元组的方式输出为{(3,0,e2),(4,1,e3)};以此获取hash6的总的查询结果为{(6,3,e5),(6,4,e6),(3,0,e2),(4,1,e3)};最后,基于图4中(a)所示的溯源邻接表的顶点的编号和顶点对应关系,可以获得hash6的查询结果为{(hash6,hash3,e5),(hash6,hash4,e6),(hash3,hash0,e2),(hash4,hash1,e3)},并在显示查询结果的同时反馈获取查询结果的查询时间戳。
91.本发明提供的基于区块链的数据溯源查询方法,当内存中的溯源存储数据包括表征交易链中交易数据之间依赖关系的溯源邻接表和溯源映射表时,通过对溯源存储数据进行广度优先搜索的方式,快速得到查询结果和查询时间,以此提高了溯源查询的高效性和可靠性。
92.可选的,步骤110的具体实现过程可以包括:
93.基于用户的溯源查询请求,从溯源链上获取所述用户的查询权限;从所述溯源查询请求中获取所述用户输入的查询条件。
94.具体的,本发明的溯源链中可以存储有区块链所属范围内每个用户及其对应的溯源查询权限信息,因此可以通过用户输入的个人身份信息向溯源链获取对应查询范围的查询权限,基于此,当全节点接收到用户的溯源查询请求时,可以从溯源链上获取用户的查询权限,比如基于用户输入的账号和密码等个人身份信息进行授权申请,当申请通过时会反馈与用户对应查询范围的查询权限。并且,全节点可以从溯源查询请求中提取用户输入的查询条件,比如,基于用户输入的查询条件、个人身份信息生成溯源查询请求,查询条件可以为所需溯源查询的数据id或数据哈希值,也可以为所需溯源查询的数据类型或数据范围等限定查询范围的具体数据,因此可以从溯源查询请求中提取用户输入的查询条件。
95.本发明提供的基于区块链的数据溯源查询方法,通过基于用户的溯源查询请求,从溯源链上获取用户的查询权限以及从溯源查询请求中提取用户输入的查询条件,以此确保溯源查询的安全性和可靠性。
96.下面对本发明提供的基于区块链的数据溯源查询装置进行描述,下文描述的基于区块链的数据溯源查询装置与上文描述的基于区块链的数据溯源查询方法可相互对应参照。
97.图5示例了一种基于区块链的数据溯源查询装置,如图5所示,该基于区块链的数
据溯源查询装置500,包括:
98.获取模块510,用于基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;查询模块520,用于根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;处理模块530,用于向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至溯源链中。
99.可选的,所述装置还可以包括重构模块,用于采用有向无环图,对交易链中的交易数据进行重构,得到溯源有向图;其中,所述溯源有向图表包括逆向溯源有向图和前向溯源有向图;采用邻接表,将所述溯源有向图重构为溯源邻接表;采用映射图,将所述溯源邻接表的顶点和所述顶点的编号之间的关系重构为溯源映射表;确定所述溯源邻接表和所述溯源映射表为溯源存储数据,并将所述溯源存储数据存储至内存中。
100.可选的,所述装置还可以包括存储模块,用于将所述溯源邻接表和所述溯源映射表以文件形式存储至本地硬盘中,并将所述本地硬盘中文件的哈希值存储至溯源链中。
101.可选的,所述装置还可以包括校验模块,用于基于重启指令,检验所述本地硬盘中文件的哈希值与所述溯源链上的哈希值是否一致;如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值一致,则将所述本地硬盘中的溯源邻接表和溯源映射表加载至内存中,并执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
102.可选的,校验模块,还可以用于如果所述本地硬盘中文件的哈希值与所述溯源链上的哈希值不一致,则更新所述本地硬盘中的文件。
103.可选的,所述装置还可以包括更新模块,用于基于接收的新区块,对所述内存中的溯源存储数据进行更新,以及更新所述本地硬盘中的文件,并将更新后文件的哈希值存储至所述溯源链中,然后执行所述基于用户的溯源查询请求,获取所述用户的查询权限和查询条件的步骤。
104.可选的,更新模块,还可以用于针对所述本地硬盘中的第j个文件,查询所述第j个文件包含的最新区块编号为t,确定所述第j个文件在当前的最新版本为j
t
,并判断所述溯源链上存储的第j个文件在j
t
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致;
105.若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值一致,则基于所述交易链中大于编号t的区块重构所述本地硬盘中的所述第j个文件;
106.若所述溯源链上存储的第j个文件在j
t
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t
版本时的哈希值不一致,则判断所述溯源链上存储的第j个文件在j
t-1
版本时的哈希值是否与所述本地硬盘中所述第j个文件在j
t-1
版本时的哈希值一致;
107.直至所述溯源链上存储的第j个文件在j
t-x
版本时的哈希值与所述本地硬盘中所述第j个文件在j
t-x
版本时的哈希值一致为止;然后基于所述交易链中编号大于t-x的区块重构所述本地硬盘中的所述第j个文件;其中,t、x和j均为正整数,j为所述本地硬盘中的一个文件。
108.可选的,查询模块520,具体可以用于当内存中的溯源存储数据包括表征交易链中交易数据之间依赖关系的溯源邻接表和溯源映射表时,根据所述查询权限和所述查询条
件,对所述内存中的所述溯源存储数据进行广度优先搜索,得到查询结果和查询时间。
109.可选的,获取模块510,具体可以用于基于用户的溯源查询请求,从溯源链上获取所述用户的查询权限;从所述溯源查询请求中获取所述用户输入的查询条件。
110.图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备600可以包括:处理器(processor)610、通信接口(communicationsinterface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行基于区块链的数据溯源查询方法,该方法包括:
111.基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;
112.根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;
113.向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至溯源链中。
114.此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
115.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的基于区块链的数据溯源查询方法,该方法包括:
116.基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;
117.根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;
118.向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询结果和所述查询时间戳存储至溯源链中。
119.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的基于区块链的数据溯源查询方法,该方法包括:
120.基于用户的溯源查询请求,获取所述用户的查询权限和查询条件;
121.根据所述查询权限和所述查询条件,搜索内存中的溯源存储数据,得到查询结果和查询时间戳;其中,所述溯源存储数据包括分别以邻接表和映射图重构交易链中交易数据后存储的数据;
122.向所述用户反馈所述溯源查询结果,并将所述查询权限、所述查询条件、所述查询
结果和所述查询时间戳存储至溯源链中。
123.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
124.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
125.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献