数据查询方法、装置及节点设备
技术领域
本公开涉及区块链技术领域,尤其涉及一种数据查询方法、装置及节点设备。
背景技术
区块链是由区块链网络中所有节点共同参与维护的去中心化分布式数据库***,它是由一系列基于密码学方法产生的数据块组成,每个数据块即为区块链中的一个区块。根据产生时间的先后顺序,区块被有序地链接在一起,形成一个数据链条,被形象地称为区块链。区块链有其特有的区块产生、交易产生和验证协议,具有不可篡改、不可伪造和完全可追溯等安全特性。
区块链网络基于P2P网络,每个参与交易和区块存储、验证、转发的P2P网络节点都是一个区块链网络中的节点。区块链数据对每个节点是完全公开的,节点可以随意查看任何一个区块任意一笔交易的信息。
相关技术中,当查询者需要查询区块链中的数据时,若查询者本身就是区块链网络中的一个节点,则只要从自己存储的区块链副本中进行查询即可;若查询者并不是区块链网络中的节点,则需要向区块链网络中的节点发送查询请求,以实现数据查询。
由于区块链网络中的单一节点有被数据篡改或黑客攻击的可能性,因此,若某一节点的区块链副本已经被篡改了,则查询者向其发送查询请求后会接收到错误的查询结果。
发明内容
为克服相关技术中存在的问题,本公开提供一种数据查询方法、装置及节点设备。
根据本公开实施例的第一方面,提供一种数据查询方法,应用于区块链网络的区块链节点,所述方法包括:
接收查询请求,确定与所述查询请求对应的待查询数据的安全等级;
根据所述安全等级确定查询节点,所述查询节点为区块链网络中的节点;
发送所述查询请求给所确定的所述查询节点;
接收所述查询节点返回的查询结果,如果比例最高的查询结果满足预设条件,将所述比例最高的查询结果作为所述待查询数据对应的查询结果。
根据本公开实施例的第二方面,提供一种数据查询方法,应用于区块链网络的区块链节点,所述方法包括:
根据目标区块链节点发送的查询请求,确定与所述查询请求对应的待查询数据的安全等级;
根据所述安全等级确定响应所述查询请求的概率;
当根据所述概率,确定响应所述查询请求时,返回查询结果给所述目标区块链节点。
根据本公开实施例的第三方面,提供一种数据查询装置,应用于区块链网络的区块链节点,所述装置包括:
安全等级确定模块,被配置为接收查询请求,确定与所述查询请求对应的待查询数据的安全等级;
第一查询节点确定模块,被配置为根据所述安全等级确定查询节点,所述查询节点为区块链网络中的节点;
第一查询请求转发模块,被配置为发送所述查询请求给所确定的所述查询节点;
第一查询结果确定模块,被配置为接收所述查询节点返回的查询结果,如果比例最高的查询结果满足预设条件,将所述比例最高的查询结果作为所述待查询数据对应的查询结果。
根据本公开实施例的第四方面,提供一种数据查询装置,应用于区块链网络的区块链节点,所述装置包括:
安全等级确定模块,被配置为根据目标区块链节点发送的查询请求,确定与所述查询请求对应的待查询数据的安全等级;
查询概率确定模块,被配置为根据所述安全等级确定响应所述查询请求的概率;
第一查询结果返回模块,被配置为在根据所述概率,确定响应所述查询请求时,返回查询结果给所述目标区块链节点。
根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品包含能够由可编程的装置执行的计算机程序,所述计算机程序具有当由所述可编程的装置执行时用于执行上述第一方面的方法的代码部分。
根据本公开实施例的第六方面,提供一种非临时性计算机可读存储介质,所述非临时性计算机可读存储介质中包括一个或多个程序,所述一个或多个程序用于执行上述第一方面所述的方法。
根据本公开实施例的第七方面,提供一种节点设备,包括:
上述第六方面所述的非临时性计算机可读存储介质;以及
一个或者多个处理器,用于执行所述非临时性计算机可读存储介质中的程序。
根据本公开实施例的第八方面,提供一种计算机程序产品,其特征在于,所述计算机程序产品包含能够由可编程的装置执行的计算机程序,所述计算机程序具有当由所述可编程的装置执行时用于执行上述第二方面所述的方法的代码部分。
根据本公开实施例的第九方面,提供一种非临时性计算机可读存储介质,所述非临时性计算机可读存储介质中包括一个或多个程序,所述一个或多个程序用于执行上述第二方面所述的方法。
根据本公开实施例的第十方面,提供一种节点设备,包括:
上述第九方面所述的非临时性计算机可读存储介质;以及
一个或者多个处理器,用于执行所述非临时性计算机可读存储介质中的程序。
本公开实施例至少包括以下有益效果:根据不同安全等级确定不同的查询策略,避免了单个节点被攻击、数据被篡改等导致的查询错误;提高查询结果的可信度和正确率,防止区块链数据被篡改带来的查询错误和安全风险。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是本公开一实施例的区块链网络的示意图;
图2是本公开一实施例的数据查询方法的流程示意图;
图3是本公开另一实施例的数据查询方法的流程示意图;
图4是本公开一实施例中候选结果未满足预先条件时的处理流程示意图;
图5是本公开一实施例中查询失败时,目标区块链节点发布信息的示意图;
图6是本公开一实施例的数据查询方法的流程示意图;
图7是本公开另一实施例的数据查询方法的流程示意图;
图8是本公开一实施例的数据查询装置的框图;
图9是本公开另一实施例的数据查询装置的框图;
图10是根据一示例性实施例示出的一种用于数据查询方法的装置的框图。
具体实施方式
在对本公开提供的区块链权限控制方法、装置及节点设备进行说明之前,先对本公开各个实施例所涉及的区块链进行介绍。
本公开实施例中,将区块链中的数据根据属性设置不同安全等级,而不同安全等级的数据在查询时则对应不同的查询节点随机抽取比例,进而由相应数量的查询节点进行数据查询;并根据查询节点返回的查询结果统计是否达到该安全级数据的查询成功判断阈值,如果达到查询成功判断阈值则认为此查询结果可信,达不到查询成功判断阈值则需要以更高比例或者直接以百分百的比例进行第二次查询,如果第二次查询依然达不到相应安全级数据对应的查询成功判断阈值,则可进行预警或由人工及其他方式判定此数据的准确性。由此,本公开实施例的数据查询方法、装置和节点设备可提高查询结果的可信度和正确率,防止区块链数据被篡改带来的查询错误和安全风险。
本公开实施例的,区块链数据的查询方法,可应用于查询端不是区块链中的节点的场景,也可应用于查询端是区块链中的节点的场景,提高查询结果的可信度和正确率,防止区块链数据被篡改带来的查询错误和安全风险。
在对本公开提供的数据查询方法、装置和节点设备进行说明之前,先对本公开各个实施例所涉及的区块链进行介绍。
区块链节点:区块链是由区块链网络中所有节点共同参与维护的去中心化分布式数据库***,它是由一系列基于密码学方法产生的数据块组成,每个数据块即为区块链中的一个区块。根据产生时间的先后顺序,区块被有序地链接在一起,形成一个数据链条,被形象地称为区块链。下面对区块链网络的一些概念进行介绍。
区块链网络中的节点可以称为区块链节点,其中区块链网络基于P2P(Peer toPeer,对等网络)网络,每个参与交易和区块存储、验证、转发的P2P网络节点都是一个区块链网络中的节点。
用户身份:区块链中的用户身份可以使用公钥或者是根据该公钥生成的账户地址表示,并且公钥和私钥是成对出现的,其中私钥由用户掌握而不发布到上述的区块链网络中,公钥或者上述的账户地址可随意发布在区块链网络中。其中,公钥可以通过特定的哈希和编码后成为上述的账户地址。值得一提的是,用户身份和区块链节点不存在一一对应关系,用户可以在任意一个区块链节点上使用自己的私钥。
区块链数据写入:由区块链节点通过向区块链网络发布交易(Transaction)实现向区块链写入数据。该交易包括:区块链节点按照预设的交易数据格式对生成的交易数据包,以及利用该区块链节点自己的私钥对该交易数据包进行的数字签名,该数字签名用于证明该区块链节点的用户的身份;而后,该交易被发布到区块链网络后,被区块链网络中的“矿工”(即执行PoW(Proof Of Work,工作证明)共识竞争机制的区块链节点)记录入区块链中产生的新区块,并将该新区块发布到区块链网络中,在该新区块以及该新区块所记录的交易其他区块链节点验证通过和接受后,该新区块所记录的交易即被写入区块链。其中,区块链中的新区块是由上述的“矿工”通过执行PoW或PoS等共识竞争机制而定期产生的,因此产生新区块的时间间隔通常和上述的预设技术要求相关,通过设置不同的预设技术要求可以改变区块链产生新区块的时间间隔。
参见图1,为本公开一实施例的区块链网络的示意图。
该区块链网络100中包括:一个或多个区块链节点101,这些区块链节点101可以各种形式来实施,例如,可以为手机、智能电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、服务器、矿机等。
在一个实施例中,区块链中的每个区块包括区块头和区块主体。区块主体保存交易数据。交易数据通过默克尔树进行保存。默克尔树根的哈希值存储到区块头中。区块头至少包括:上一区块头的哈希值、默克尔树根的哈希值、时间戳和区块号等。
交易数据可为任何类型的数据,包括但不限于:各种类型的统计数据(例如,人口数据、医疗数据等),各种类型的货币交易数据(例如,转账交易数据),以及各种类型的请求数据(例如,查询请求、节点加入请求等)等。
本公开实施例中,为了保证信息查询的安全性,将对区块链数据按照数据属性进行安全等级设置,不同的安全等级对应不同的查询策略,提高数据查询的安全性和准确率。
参见表1,为本公开一实施例的不同安全等级的区块链数据与不同的查询策略的对应关系。
表1
其中,查询节点比例是指,查询节点数与区块链节点总数的比值,如式(1)所示。在本公开的一实施例中,查询节点为响应查询请求的节点,或接收到查询请求的节点。
其中,n为查询节点数,N为区块链网络中的区块链节点总数。
查询成功判定阈值是指,查询节点返回的查询结果中,比例最高的查询结果的数量与查询节点总数的比值,如式(2)所示。
其中,m为比例最高的查询结果的数量。
应理解,由于区块链中可能存在一些查询节点因关机或死机等异常造成无法响应任何请求的情况,公式(1)和公式(2)中的n包括了这些本应响应查询请求,返回查询结果,但由于异常未返回查询结果的查询节点以及返回查询结果的查询节点的总数。
在本公开的一实施例中,可根据区块链数据所属的类别,确定其安全等级。第一安全等级的区块链数据可为与个人信息相关的数据、货币交易数据等;第二安全等级的区块链数据可为各种类型的统计数据;第三安全等级的区块链数据可为各种类型的请求数据(例如,查询请求、节点加入请求等)。应理解,区块链数据的安全等级可根据实际情况进行设定,并不限于这里所给出的示例。
在另一些实施例中,在新建区块时,确定要写入到区块链的数据的安全等级。将数据的安全等级与数据一起写入到区块链中。由此,在进行数据查询时,可从区块链中查询到数据的安全等级。
上述表1所示的区块链数据的安全等级与查询策略的对应关系被存储到区块链的一区块中。当区块链节点接收到查询请求时,可根据查询请求,确定待查询数据,并从区块链的区块中查询区块链数据的安全等级与查询策略的对应关系,确定待查询数据的查询策略。
参见图2,为本公开一实施例的数据查询方法的流程示意图。该方法包括以下步骤:
在步骤201中,接收查询请求,确定与查询请求对应的待查询数据的安全等级。
在步骤202中,根据安全等级确定查询节点。
在步骤203中,发送查询请求给所确定的查询节点。
在步骤204中,接收查询节点返回的查询结果,如果比例最高的查询结果满足预设条件,将比例最高的查询结果作为待查询数据对应的查询结果。
以下将结合图3至图5对本公开实施例的数据查询方法进行介绍。
参见图3,在步骤301中,目标区块链节点根据查询请求,确定待查询数据的安全等级。
在一个实施例中,当要进行数据查询时,查询端生成查询请求,并将查询请求发送给目标区块链节点。这里的查询端为非区块链网络中的电子设备。
在另一实施例中,查询请求由目标区块链节点自己生成,即该目标区块链节点即为查询端。
查询请求中包括以下信息中的至少一者:交易哈希、账户地址和查询关键字。
当查询请求中包括交易哈希时,确定的待查询数据可包括:交易哈希对应的交易是否生效、货币交易数据等。在一个实施例中,当查询请求中包括交易哈希时,将待查询数据的安全等级确定为第一安全等级。
当查询请求中包括账户地址时,确定的待查询数据可包括:账户地址对应的账户的信息、账户地址对应的账户的交易记录等。在一个实施例中,当查询请求中包括账户地址时,将待查询数据的安全等级确定为第一安全等级。
当查询请求中包括查询关键字时,确定的待查询数据可包括:与关键字相对应的数据。在一个实施例中,可根据关键字,确定待查询数据的安全等级,当关键字包括:账户、交易等信息时,将待查询数据的安全等级确定为第一安全等级;当关键字未包括账户、交易等信息时,将待查询数据的安全等级确定为第二安全等级或其它等级。
由此,本公开实施例,可实现根据查询请求,确定待查询数据的安全等级。
在步骤302中,目标区块链节点根据待查询数据的安全等级,确定查询策略。
在本公开的一实施例中,可从存储有上述表1所示的对应关系的区块中,查询安全等级对应的查询策略。
在步骤303中,目标区块链节点根据安全等级对应的查询策略,确定查询节点。
在步骤304中,目标区块链节点向查询节点转发查询请求。
在本公开的一实施例中,每个区块链节点均保存有区块链网络中的所有节点的地址信息,并在有新节点加入区块链网络和有节点退出区块链网络时,更新所保存的地址信息。由此,目标区块链节点可根据存储的区块链节点的地址信息,例如IP地址信息,随机选择和查询策略相对应个数的区块链节点作为查询节点,并根据区块链节点的IP地址,进行查询请求的转发。例如,根据查询策略确定查询节点比例为w1%时,在区块链网络的节点中随机选择w1%×N个节点作为查询节点,根据其IP地址,向这w1%×N个查询节点发送查询请求。
应理解,目标区块链节点所确定的查询节点中可包括自身,且包括自身时,无需进行查询请求的转发。
在步骤305中,目标区块链节点接收查询节点返回查询结果。
接收到查询请求的查询节点,根据查询请求进行查询,获得查询结果,并将查询结果返回给目标区块链节点。在一个实施例中,目标区块链节点在转发查询请求时,将自己的地址信息与查询请求一起进行转发,由此,查询节点在获取到查询结果时,可根据目标区块链节点的地址信息,将查询结果返回给目标区块链节点。
查询节点根据查询请求获取查询结果时:当查询请求中包括交易哈希时,查询节点根据交易哈希,确定待查询数据所在的区块,并从相应的区块中获取数据,以及将获取的数据作为查询结果返回给目标区块链节点。
在一些实施例中,查询节点根据交易哈希,对交易哈希对应的交易进行验证,即根据交易哈希,在区块链中进行查询,判断交易是否被记录到某个区块中,并且根据区块在区块链中的位置,确定该区块得到了多少确认。由此,查询结果包括交易验证结果,该交易验证结果至少包括:交易是否已被记录到区块中,以及得到的确认区块数。
当查询请求中包括账户地址时,查询节点根据账户地址,确定账户地址所对应的区块,并从相应的区块中获取数据,以及将获取的数据作为查询结果返回给目标区块链节点。
当查询请求中包括查询关键字时,查询节点根据查询关键字,对区块链进行遍历,获得与关键字相对应的数据,以及将与关键字相对应的数据作为查询结果返回给目标区块链节点。
在步骤306中,目标区块链节点根据查询节点返回的查询结果,确定候选结果。
目标区块链节点接收查询节点返回的查询结果,并将不同查询结果进行统计,将比例最高的查询结果作为候选结果。例如,若返回的查询结果数为100个,其中有85个查询结果都为A,则将A为比例最高的查询结果,将其作为候选结果。
在步骤307中,当候选结果满足预设条件时,将候选结果作为待查询数据对应的查询结果。
在一个实施例中,预设条件为:返回的查询结果为候选结果的查询节点数与查询节点总数的比值大于或等于待查询数据对应的查询成功判断阈值。由此,目标区块链节点将返回的查询结果为候选结果的查询节点数与查询节点总数相比,当比值大于或等于待查询数据对应的查询策略中的查询成功判定阈值时,即将候选结果作为待查询数据对应的查询结果。
在本公开的实施例中,并不是所有的查询节点都会返回查询结果,例如,查询节点可能由于异常(例如,被非法控制,被篡改,关机或故障等)未返回查询结果,但比值的计算中,将返回的查询结果为候选结果的查询节点数与查询节点总数相比,从而使得未返回查询结果的查询节点对查询结果会产生影响,提高查询结果的可参考性,降低查询风险。
参见图4,当候选结果未满足预设条件时,则重新进行查询。在本公开的一实施例中,重新进行查询时,对查询节点的数量进行调整,以提高查询结果的可信度和正确率。
在步骤401中,目标区块链节点按照第一预设比例增加查询节点的数量。
在本公开的实施例中,第一预设比例可设置为10%-50%。在一些实施例中,若第一次查询未成功(即候选结果未满足预设条件),则将查询节点的比例提高至100%。
在步骤402中,目标区块链节点向查询节点转发查询请求。
在步骤403中,目标区块链节点接收查询节点返回查询结果。
在步骤404中,目标区块链节点根据查询节点返回的查询结果,确定候选结果。
在步骤405中,当候选结果满足预设条件时,将候选结果作为待查询数据对应的查询结果。
应理解,步骤402-405和上述步骤304-307的实施原理相同,在此不再赘述。且在步骤405中,确定候选结果是否满足预设条件时,查询成功判定阈值与步骤307中相同。当然,在一些实施例中,也可在步骤405中,将查询成功判定阈值按比例提高,本公开对此不作限定。
参见图5,在本公开的实施例中,当进行该第二次查询时,候选结果仍未满足预设条件,则第二次查询失败,目标区块链节点发布预警信息到区块链网络中。该预警信息中包括:查询请求中的交易哈希、账户地址或查询关键字。该预警信息用于提示区块链网络中的节点,查询请求所对应的数据出现安全风险。在一个实施例中,若查询端为非区块链网络中的节点设备,则目标区块链节点向查询端发送提示信息,该提示信息用于提示查询结果不可用或查询无效等。
应理解,当第二次查询失败时,还可进行第三次、第四次……查询,查询的次数可根据实际情况进行设置,直到查询次数达到最大查询次数,仍查询失败时,按照图5所示输出预警信息和提示信息。每增加一次查询,可将查询节点的比例提高一次。
本公开实施例的数据查询方法,根据不同安全等级确定不同的查询策略,避免了单个节点被攻击、数据被篡改等导致的查询错误;提高查询结果的可信度和正确率,防止区块链数据被篡改带来的查询错误和安全风险;可避免因只通过单个节点进行查询,而该单个节点被攻击或数据被篡改,而使查询到错误信息的可能性;另一方面,也避免了所有的查询请求都采用同一比例查询节点进行查询带来的资源浪费,以及每次查询都通过100%的区块链节点进行查询对所有区块链节点带来的负担,可在保证查询结果可靠性的情况下,降低对区块链并发性造成的负面影响。
参见图6,为本公开另一实施例的数据查询方法的流程示意图。该方法包括以下步骤:
在步骤601中,根据目标区块链节点发送的查询请求,确定与查询请求对应的待查询数据的安全等级;
在步骤602中,根据安全等级确定响应查询请求的概率;
在步骤603中,当根据概率,确定响应查询请求时,返回查询结果给目标区块链节点。
在本公开的该实施例中,目标区块链节点(即接收到查询端发送的查询请求的区块链节点或自身产生查询请求的区块链节点)将查询请求发布到区块链网络中,使得区块链网络中的所有节点都可接收到查询请求。接收到查询请求的区块链节点,可根据查询请求所对应的查询策略,确定响应查询请求的概率,从而按照概率进行查询结果的返回。
参见图7,在本公开一实施例的数据查询方法中,在步骤701中,目标区块链节点将查询请求发布到区块链网络中。
与上述图3所示的实施例相同,查询请求可为目标区块链节点自己生成,或非区块链网络中的电子设备生成。
在该实施例中,目标区块链节点将查询请求发送给与自己连接的区块链节点,而这些区块链节点又将查询请求发送给其它区块链节点,使得区块链网络中的每个区块链节点都可以接收到查询请求。
在步骤702中,接收到查询请求的区块链节点,根据查询请求,确定待查询数据的安全等级。
在步骤703中,根据待查询数据的安全等级,确定查询策略。
应理解,步骤702确定待查询数据的安全等级,以及步骤703确定查询策略的实施原理与上述图3所示的实施例相同,在此不再赘述。
在步骤704中,区块链节点根据安全等级对应的查询策略,确定响应查询请求的概率。
在本公开的一实施例中,响应查询请求的概率和上述表1中查询节点的比例相同,由此,区块链节点可从存储表1所示信息的区块中查询到与不同安全等级对应的响应查询请求的概率。
由于安全等级和响应查询请求的概率是相对应的,因此,区块链节点可根据安全等级获得自己需要响应查询请求的概率。在一个实施例中,区块链节点获得响应查询请求的概率后,即以生成随机数的方法来确定自身是否响应此查询请求。
例如,若响应查询请求的概率为80%,则随机数可以为1至10之间的任意整数。则可知1,2,3,4,5,6,7,8,9,10这十个数字在随机数组里面出现的概率都是10%。由于响应查询请求的概率为80%,则可设定如果生成的随机数是1或2则不响应查询请求,如果生成的随机数是3至10之间的任一数则响应查询请求。按照此方法,由于每个节点都有80%的概率会返回结果,根据概率论原理,则区块链网络中正常工作的节点中约80%会响应查询请求,而返回查询结果。因为区块链中可能存在一些节点因关机或死机等原因造成无法响应任何请求,因此80%的区块链网络中的节点总数应作为之后判定查询结果是否满足查询成功判定阈值百分比的分母。而响应查询请求的区块链节点返回的查询结果中占比例最高的查询结果的数量则为判定是否满足查询成功判定阈值百分比的分子。
应理解,区块链节点还可根据其它的方式,确定是否响应查询请求,例如,若安全等级对应的查询节点比例高于一预设值时,则响应查询请求的方式,本公开实施例对此不作限定。
在步骤705中,响应查询请求的查询节点,返回查询结果给目标区块链节点。
应理解,查询节点获取查询结果的实施过程和上述图2所示实施例相同,在此不再赘述。
在步骤706中,目标区块链节点根据查询节点返回的查询结果,确定候选结果。
在步骤707中,当候选结果满足预设条件时,将候选结果作为待查询数据对应的查询结果。
应理解,步骤706和步骤707和上述图3所示实施例的步骤306和307的实施过程相同,在此不再赘述。
当候选结果未满足查询结果判别阈值预设条件时,则重新进行查询。在本公开的一实施例中,重新进行查询时,目标区块链节点重新将查询请求发布到区块链网络中,区块链节点若再次接收到相同的查询请求,则将响应查询请求的概率按照第二预设比例增加,第二预设比例可设置为10%-50%。在一些实施例中,若第一次查询未成功(即候选结果未满足预设条件),则将再次接收到同样的查询请求的区块链节点将响应查询请求的概率提高至100%,即区块链网络中的所有接收到查询请求的节点均响应查询请求
响应查询请求的查询节点将查询结果返回给目标区块链节点。目标区块链节点根据查询节点返回的查询结果,确定候选结果。
当候选结果满足预设条件时,将候选结果作为待查询数据对应的查询结果。
应理解,确定候选结果是否满足预设条件时,查询成功判定阈值可保持不变,或比例提高,本公开对此不作限和上述图4所示的实施例相同,当进行第二次查询时,候选结果仍未满足预设条件,则第二次查询失败,目标区块链节点发布预警信息到区块链网络中。该预警信息中包括:查询请求中的交易哈希、账户地址或查询关键字。该预警信息用于提示区块链网络中的节点,查询请求所对应的数据出现安全风险。在一个实施例中,若查询端为非区块链网络中的节点设备,则目标区块链节点向查询端发送提示信息,该提示信息用于提示查询结果不可用或查询无效等。
应理解,当第二次查询失败时,还可进行第三次、第四次……查询,查询的次数可根据实际情况进行设置,直到查询次数达到最大查询次数,仍查询失败时,按照图5所示输出预警信息和提示信息。每增加一次查询,可将响应查询请求的概率提高一次。
本公开实施例的数据查询方法,根据不同安全等级确定不同的查询策略,避免了单个节点被攻击、数据被篡改等导致的查询错误;提高查询结果的可信度和正确率,防止区块链数据被篡改带来的查询错误和安全风险;可避免因只通过单个节点进行查询,而该单个节点被攻击或数据被篡改,而使查询到错误信息的可能性;另一方面,也避免了所有的查询请求都采用同一比例查询节点进行查询带来的资源浪费,以及每次查询都通过100%的区块链节点进行查询对所有区块链节点带来的负担,可在保证查询结果可靠性的情况下,降低对区块链并发性造成的负面影响。
参见图8,本公开实施例还提供一种数据查询装置,应用于区块链网络的区块链节点,该装置包括:
安全等级确定模块801,被配置为接收查询请求,确定与所述查询请求对应的待查询数据的安全等级;
第一查询节点确定模块802,被配置为根据所述安全等级确定查询节点,所述查询节点为区块链网络中的节点;
第一查询请求转发模块803,被配置为发送所述查询请求转发给所确定的所述查询节点;
第一查询结果确定模块804,被配置为接收所述查询节点返回的查询结果,如果比例最高的查询结果满足预设条件,将所述比例最高的查询结果作为所述待查询数据对应的查询结果。
在一个实施例中,所述安全等级确定模块801,被配置为在存储有所述待查询数据与安全等级的对应关系的区块中,查询所述待查询数据对应的安全等级。
在一个实施例中,第一查询结果确定模块804包括:
第一候选结果确定子模块,被配置为将所述比例最高的查询结果作为第一候选结果;
第一查询结果确定子模块,被配置为在返回的查询结果为所述第一候选结果的查询节点数与查询节点总数的比值大于或等于所述待查询数据对应的查询成功判断阈值时,将所述比例最高的查询结果作为所述待查询数据对应的查询结果。
在一个实施例中,所述装置800还包括:
查询节点调整模块805,被配置为当比例最高的查询结果未满足预设条件时,对查询节点的数量进行调整;
第二查询节点确定模块806,被配置为根据调整后的查询节点数量,确定查询节点;
第二查询请求转发模块807,被配置为将所述查询请求转发给所确定的所述查询节点;以及
第二查询结果确定模块808,被配置为根据查询节点返回的查询结果,确定所述待查询数据对应的查询结果。
在一个实施例中,第二查询结果确定模块808包括:
第二候选结果确定子模块,被配置为将比例最高的查询结果作为第二候选结果;
预警信息发布子模块,被配置为在返回的查询结果为所述第二候选结果的查询节点数与查询节点总数的比值小于所述待查询数据对应的查询成功判断阈值时,向区块链网络发布预警信息。
参见图9,本公开实施例还提供一种数据查询装置,应用于区块链网络的区块链节点,该装置900包括:
安全等级确定模块901,被配置为根据目标区块链节点发送的查询请求,确定与所述查询请求对应的待查询数据的安全等级;
查询概率确定模块902,被配置为根据所述安全等级确定响应所述查询请求的概率;
第一查询结果返回模块903,被配置为在根据所述概率,确定响应所述查询请求时,返回查询结果给所述目标区块链节点。
在一个实施例中,装置900还包括:
概率调整模块904,被配置为在重复接收到所述查询请求时,对所述概率进行调整;
第二查询结果返回模块905,被配置为在根据调整后的概率,确定响应所述查询请求时,返回查询结果给所述目标区块链节点
在一个实施例中,第一查询结果返回模块903包括:
第一区块确定子模块,被配置为在所述查询请求中包括交易哈希时,根据所述交易哈希,确定所述待查询数据所在的区块;
第一查询结果确定子模块,被配置为从确定的区块中获取数据,以及将获取的数据作为查询结果返回给所述目标区块链节点。
在一个实施例中,第一查询结果返回模块903包括:
交易验证子模块,被配置为在所述查询请求中包括交易哈希时,根据所述交易哈希,对交易哈希对应的交易进行验证;
第二查询结果确定子模块,被配置为将验证结果作为所述查询结果返回给所述目标区块链节点,所述验证结果至少包括:交易是否已被记录到区块中,以及得到的确认区块数。
在一个实施例中,第一查询结果返回模块903包括:
第二区块确定子模块,被配置为当所述查询请求中包括账户地址时,根据所述账户地址,确定账户地址所对应的区块;
第三查询结果确定子模块,被配置为从确定的区块中获取数据,以及将获取的数据作为所述查询结果返回给所述目标区块链节点。
在一个实施例中,第一查询结果返回模块903包括:
第三区块确定子模块,被配置为当所述查询请求中包括查询关键字时,根据所述查询关键字,对区块链进行遍历,获得与关键字相对应的数据;以及
第四查询结果确定子模块,被配置为将与所述关键字相对应的数据作为所述查询结果返回给所述目标区块链节点。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图10是根据一示例性实施例示出的一种用于数据查询方法的装置1000的框图,该装置1000可以是区块链中的节点设备。如图10所示,该装置1000可以包括:处理器1001,存储器1002,多媒体组件1003,输入/输出(I/O)接口1004,以及通信组件1005。
其中,处理器1001用于控制该装置1000的整体操作,以完成上述的数据查询方法的全部或部分步骤。存储器1002用于存储操作***,各种类型的数据以支持在该装置1000的操作,这些数据的例如可以包括用于在该装置1000上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器1002可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-OnlyMemory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-OnlyMemory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
多媒体组件1003可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器1002或通过通信组件1005发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口1004为处理器1001和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件1005用于该装置1000与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件1005可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,装置1000可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的数据查询方法。
在另一示例性实施例中,还提供了一种计算机程序产品,所述计算机程序产品包含能够由可编程的装置执行的计算机程序,所述计算机程序具有当由所述可编程的装置执行时用于执行上述的数据查询方法的代码部分。
在另一示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1002,上述指令可由装置1000的处理器1001执行以完成上述的数据查询方法。示例地,该非临时性计算机可读存储介质可以是ROM、随机存取存储器(Random Access Memory,简称RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
流程图中或在本公开的实施例中以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本公开实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开的实施例所述技术领域的技术人员所理解。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。