一种业务校验的方法及装置与流程

文档序号:11590394阅读:222来源:国知局
一种业务校验的方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种业务校验的方法及装置。



背景技术:

区块链技术又称之为分布式账本技术,存储在区块链中的数据具备不可篡改、去中心化等特点,所以,区块链技术为人们提供愈加安全的数据存储环境,并为人们的数据存储提供更多便利。

当前,区块链节点接收到终端向其发送的业务请求时,会将该业务请求存储在自身的业务存储器中,与此同时,区块链节点还会将该业务请求广播给整个共识网络的其他区块链节点,以使其他区块链节点在接收到该业务请求后,将该业务请求存储在自身对应的业务存储器中。

而后,区块链节点将从自身的业务存储器中捞取设定数量的业务请求,并将这些业务请求打包成预处理块广播给整个共识网络中的其他区块链节点进行共识,以确定是否需要将这些业务请求以区块的形式存储在区块链中。

在实际应用中,联盟链中的区块链节点将接收到业务请求广播给其他区块链节点的过程中,由于网络故障等因素的影响,整个共识网络中的一些其他区块链节点可能并没有接收到该区块链节点广播的该业务请求,换句话说,相对于一个区块链节点自身对应的业务存储器中存储的各业务请求来说,其他区块链节点对应的业务存储器中可能会缺失一部分业务请求。而缺少部分业务请求的区块链节点在一定程度上会对整个共识网络的共识校验结果产生较大的影响。

例如,假设整个共识网络中有3个区块链节点a、b、c,其中,区块链节点a存储有#1、#2、#3、#4、#5这5个业务请求,区块链节点b存储有#1、#2、#3、#4这4个业务请求,而区块链节点c存储有#1、#2、#3这3个业务请求,其中,各业务请求均存储在各区块链节点对应的业务存储器中。区块链节点a将#1、#2、#3、#4、#5这5个业务请求打包成预处理块广播给其他的两个区块链节点以对这5个业务请求进行共识校验时,由于区块链节点b和c均缺失有这5个业务请求的部分业务请求,所以,区块链节点b和c会对包含有这5个业务请求的预处理块直接认定为共识校验不通过,这样一来,由于整个共识网络中超过半数的区块链节点认定该预处理块共识校验不通过,则导致该预处理块中包含的这5个业务请求将无法通过整个共识网络的共识校验,继而这5个业务请求也将无法记录在整个共识网络中的区块链中。

由于上述其他区块链节点认定该预处理块不通过共识校验的原因并不是因为该预处理块中有部分业务请求存在非法篡改的情况,而仅是因为该预处理块中有部分业务请求并未存储在其他区块链节点自身所对应的业务存储器中,继而使得该预处理块无法通过整个共识网络共识校验的几率将大大增加,而实际上,该预处理块中包含的各业务请求可能本身并不存在任何问题,这就使正常的业务请求在现有技术中将有很大的几率无法通过各区块链节点的共识校验,从而影响了整个区块链业务的业务处理准确性。



技术实现要素:

本申请实施例提供一种业务校验的方法,用以解决现有技术中区块链业务的业务处理准确性较低的问题。

本申请实施例提供了一种业务校验的方法,包括:

第一区块链节点接收终端发送的业务请求;

将所述业务请求存储在所述第一区块链节点对应的业务存储器中,并将所述业务请求广播给各第二区块链节点,以使所述各第二区块链节点将所述业务请求分别存储在各自对应的业务存储器中;

从所述业务存储器中捞取至少一个业务请求,并将捞取的所述至少一个业务请求打包成预处理块广播给各第二区块链节点,以使所述各第二区块链节点在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求,并通过所述部分业务请求以及自身业务存储器中存储的业务请求对所述预处理块进行共识校验。

本申请实施例提供一种业务校验的装置,用以解决现有技术中区块链业务的业务处理准确性较低的问题。

本申请实施例提供了一种业务校验的装置,包括:

接收模块,接收终端发送的业务请求;

存储模块,将所述业务请求存储在所述装置对应的业务存储器中,并将所述业务请求广播给各第二区块链节点,以使所述各第二区块链节点将所述业务请求分别存储在各自对应的业务存储器中;

请求捞取模块,从所述业务存储器中捞取至少一个业务请求,并将捞取的所述至少一个业务请求打包成预处理块广播给各第二区块链节点,以使所述各第二区块链节点在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求,并通过所述部分业务请求以及自身业务存储器中存储的业务请求对所述预处理块进行共识校验。

本申请实施例提供一种业务校验的方法,用以解决现有技术中区块链业务的业务处理准确性较低的问题。

本申请实施例提供了一种业务校验的方法,包括:

第二区块链节点接收第一区块链节点广播的业务请求;

将所述业务请求存储在所述第二区块链节点对应的业务存储器中;

接收所述第一区块链节点广播的包含有至少一个业务请求的预处理块,并在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求;

通过所述部分业务请求以及自身对应的业务存储器中存储的业务请求,对所述预处理块进行共识校验。

本申请实施例提供一种业务校验的装置,用以解决现有技术中区块链业务的业务处理准确性较低的问题。

本申请实施例提供了一种业务校验的装置,包括:

接收请求模块,接收第一区块链节点广播的业务请求;

请求存储模块,将所述业务请求存储在所述装置对应的业务存储器中;

接收模块,接收所述第一区块链节点广播的包含有至少一个业务请求的预处理块,并在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求;

校验模块,通过所述部分业务请求以及自身对应的业务存储器中存储的业务请求,对所述预处理块进行共识校验。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

在本申请实施例中,第二区块链节点在接收到第一区块链节点广播的包含有各业务请求的预处理块后发现,自身对应的业务存储器中未包含有该预处理块中的部分业务请求时,并不是直接认定该预处理块在该第二区块链节点上共识校验不通过,而是可从整个共识网络中的其他区块链节点获取这部分缺失的业务请求,并通过获取的这部分业务请求以及自身业务存储器中存储的业务请求对该预处理块中包含的业务请求进行共识校验,这样一来就大大降低了因网络故障而对各业务请求的共识校验产生不利影响的情况发生,从而提高了整个区块链业务的业务处理准确性。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的业务效率过程的示意图;

图2为本申请实施例提供的各区块链节点通过预设的分布式中间件将接收的业务请求分别存储在自身对应的业务存储器中的示意图;

图3为本申请实施例提供的确定待校验总特征值的示意图;

图4为本申请实施例提供的共识网络针对第一区块链节点发送的预处理块进行共识的示意图;

图5为本申请实施例提供的一种业务校验的装置示意图;

图6为本申请实施例提供的另一种业务校验的装置示意图。

具体实施方式

当前,区块链节点进行业务处理的过程大致如下:终端向区块链节点发送业务请求后,区块链节点会将接收到的业务请求以广播的形式发送至其他区块链节点中,其他区块链节点会将接收到的该业务请求存储在自身对应的业务存储器中,当然,向其他区块链节点发送该业务请求的区块链节点也会将该业务请求存储在自身的业务存储器中。

在由各区块链节点组成的共识网络中,各区块链节点均有向其他区块链节点发起共识请求的权利,区块链节点可将自身业务存储器中存储的设定数量的业务请求按照一定顺序进行排列,得到一个业务请求队列,并生成针对该业务请求队列的一个哈希(hash)值,而后,区块链节点可将该业务请求队列以及该hash打包成一个预处理块,并将该预处理块以广播的形式的发送至其他的区块链节点,以进行共识校验。

在共识校验的过程中,当其他区块链节点接收到该预处理块后,将对该预处理块中的包含的各业务请求进行非对称签名合法验证,即,区块链节点可根据自身所持有的公钥(或私钥,公钥还是私钥取决于各业务请求在加密时所使用的是私钥还是公钥),将该预处理块中包含的各业务请求进行解析,以验证各业务请求是否为合法的各业务请求。

除此之外,由于区块链节点每当接收终端发送的业务请求时,就会将该业务请求广播给其他的区块链节点,因此,通常情况下,各区块链节点自身对应的业务存储器中均应存储有整个共识网络接收的各业务请求。基于此,其他区块链节点接收到该预处理块后,将对该预处理块中的各业务请求进行哈希完整性验证,即,区块链节点可从自身的业务存储器中查找到该预处理块中包含的各业务请求,并将查找到的各业务请求按照各业务请求在该预处理块中的排列顺序进行排列,得到一个业务请求队列,而后,区块链节点可生成针对该业务请求队列的一个hash值,进而将得到的hash值与该预处理块中包含的hash值进行比对,以确认该预处理块中的各业务请求在内容上是否发生过非法篡改。

各区块链节点将根据对该预处理块进行的非对称签名合法验证以及哈希完整性验证,得到自身针对该预处理块整体是否合法的校验结果,并将自身得到的校验结果以广播的形式广播给其他的区块链节点。

各区块链节点将根据其他区块链节点针对该预处理块所发送的校验结果以及自身得到的校验结果,得到整个共识网络中各区块链节点针对该预处理块是否通过的综合校验结果,并将得到的综合校验结果再次以广播的形式广播给其他的区块链节点。

共识网络中的各区块链节点接收到相互广播的综合校验结果后,将进一步判断共识网络中各区块链节点得出各综合校验结果大部分是否均为校验通过,若是,则将该预处理块中的各业务请求以区块的形式存储在自身的区块链中,若否,则拒绝该预处理块中的各业务请求。

各区块链节点将预处理块中的各业务请求以区块的形式存储在自身的区块链中后,可将该预处理块中包含的各业务请求从自身的业务存储器中释放,以使得到释放的业务存储器能够继续存储区块链节点接收的各业务请求。

然而,在现有技术中,区块链节点将接收到业务请求广播给其他区块链节点的过程中,由于受网络故障等因素的影响,一些其他区块链节点可能并没有接收到该区块链节点广播的该业务请求,这就使得后续区块链节点将包含有设定数量业务请求的预处理块广播给各区块链节点进行共识校验时,一部分区块链节点由于在自身对应的业务存储器中缺失预处理块中的部分业务请求,而导致会直接认定该预处理块在区块链节点本地的共识校验不通过,从而大大增加该预处理块无法通过整个共识网络共识校验的几率,从而影响了整个区块链业务的业务处理准确性。

不仅如此,在实际应用中,若业务请求未通过整个共识网络的共识校验,则区块链节点将会向用户终端返回该业务请求处理失败的消息,所以,上述情况的发生,还会给用户本身带来极大的不便。

为了有效解决上述问题,在本申请中,第二区块链节点在接收到第一区块链节点广播的包含有各业务请求的预处理块后发现自身对应的业务存储器中未包含有该预处理块中的部分业务请求时,可从整个共识网络中的其他区块链节点获取这部分缺失的业务请求,并通过获取的这部分业务请求以及自身业务存储器中存储的业务请求对该预处理块中包含的各业务请求进行共识校验,这样一来就大大降低了因网络故障而对各业务请求的共识校验产生不利影响的情况发生,从而提高了整个区块链业务的业务处理准确性。

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

图1为本申请实施例提供的业务效率过程的示意图,具体包括以下步骤:

s101:第一区块链节点接收终端发送的业务请求。

在本申请实施例中,用户在业务处理的过程中,可在用户所持有的用户终端填写相应的业务处理内容,而终端将根据用户填写的业务处理内容,生成相应的业务请求,并将业务请求发送至整个共识网络中的第一区块链节点中。其中,这里提到的终端可以是诸如电脑、智能手机等设备。当然,用户也可通过终端中安装的客户端向第一区块链节点发送的业务请求,即,用户在客户端中终端上所展示的界面中填写相应的业务处理内容,客户端根据用户在该界面中填写的业务处理内容,生成相应的业务请求,进而通过终端将该业务请求发送至第一区块链节点中。

需要说明的是,在实际应用中,整个共识网络中包含有多个区块链节点,而本申请实施例所提到的第一区块链节点指的是接收终端业务请求的区块链节点,而除第一区块链节点之外其他区块链节点,在本申请实施例中可以称之为第二区块链节点,第一区块链节点和第二区块链节点是一个相对概念,即,从终端接收业务请求的区块链节点为第一区块链节点,而接收由第一区块链节点通过广播的方式所发送的该业务请求的区块链节点则称之为第二区块链节点。由于共识网络中的各区块链节点均可接收终端发送的业务请求,因此,各区块链节点实质上均可以是第一区块链节点,也可以是第二区块链节点,而第一区块链节点和第二区块链节点的划分取决于业务请求是从何处接收的。

当然,在共识校验过程中,第一区块链节点和第二区块链节点的划分也可以通过哪一节点发起共识校验来区分,即,将包含有至少一个业务请求的预处理块广播给整个共识网络的共识校验发起者可以是第一区块链节点,而接收该预处理块的区块链节点则可以称之为第二区块链节点。

s102:将所述业务请求存储在所述第一区块链节点对应的业务存储器中,并将所述业务请求广播给各第二区块链节点,以使所述各第二区块链节点将所述业务请求分别存储在各自对应的业务存储器中。

由于在共识校验过程中,第一区块链节点需要从自身对应的业务存储器中捞取一部分业务请求,并将这部分业务请求打包成预处理块广播给整个共识网络中的各第二区块链节点,而各第二区块链节点接收到包含有这部分业务请求的预处理块后,需要根据自身对应的业务存储器中所包含的与这部分业务请求相匹配的各业务请求共识校验预处理块中的这部分业务请求,而第二区块链节点自身对应的业务存储器中所包含的与这部分业务请求相匹配的各业务请求则需要通过第一区块链节点来获取。

基于此,在本申请实施例中,第一区块链节点在接收到终端发送的业务请求后,可将该业务请求存储在自身对应的业务存储器中,与此同时,第一区块链节点可将该业务请求以广播的形式发送给整个共识网络中的各第二区块链节点,以使各第二区块链节点将该业务请求分别存储在自身对应的业务存储器中。

在现有技术中,第一区块链节点通常是将接收到的业务请求存储在自身的缓存中,即,现有技术中,上述业务存储器即为区块链节点的缓存,而由于缓存的存储空间有限,致使当该缓存的存储空间占满时,该第一区块链节点无法继续接收终端发送的业务请求,只能等到该缓存中的部分业务请求通过整个共识网络所有区块链节点的共识校验后,才能利用这部分业务请求所占有的存储空间,继续存储终端发送的业务请求。因此,在现有技术中,缓存存储空间极大的限制了区块链业务的业务处理效率。

为了有效解决现有技术中出现的问题,在本申请实施例中,区块链节点的运维人员可针对每个区块链节点,分别设置各数据库形式的各业务存储器,即,每个区块链节点均可对应有一个数据库形式的业务存储器,换句话说,本申请实施例所提到的业务存储器是一个用于存储各业务请求的数据库。这样,当第一区块链节点接收到终端发送的业务请求后,可将该业务请求存储在该第一区块链节点所对应的业务存储器中,并待后续过程中,对业务存储器中存储的业务请求进行共识校验。

由于数据库形式的业务存储器的存储空间相比于缓存的存储空间来说要大得多,所以,第一区块链节点通过整个共识网络对该业务存储器中的部分业务请求进行共识校验时,该第一区块链节点依然可以继续接收终端发送的业务请求,即,无需再利用通过共识校验的部分业务请求所占有的存储空间来接收终端发送的业务请求,相比于现有技术而言,第一区块链节点极大的满足了区块链业务的业务量不断提升的需求,并提高了区块链业务的业务处理效率。

不仅如此,在现有技术中,由于整个共识网络中各区块链节点都是通过自身的缓存(即现有技术中的业务存储器即为缓存)存储各业务请求的,当区块链节点出现宕机等故障时,其自身缓存中存储的各业务请求也将消失。而在本申请实施例中,各业务请求均是存储在区块链节点对应的数据库形式的业务存储器中,所以,即使区块链节点出现宕机等故障,存储在数据库形式的业务存储器中的各业务请求也不会消失,从而进一步保证了各业务请求的安全性。

在本申请实施例中,整个共识网络中的各区块链节点和各业务存储器中可通过一个预设的分布式中间件实现数据传输,即,第一区块链节点接收到终端发送的业务请求后,可将该业务请求发送至分布式中间件中,该分布式中间件可根据该第一区块链节点的节点标识,将该业务请求发送至该第一区块链节点所对应的业务存储器中进行存储,同理,第二区块链节点接收到第一区块链节点广播的业务请求后,可将该业务请求发送至该分布式中间件中,该分布式中间件同样可根据该第二区块链节点的节点标识,将该业务请求发送至该第二区块链节点所对应的业务存储器中进行存储,如图2所示。

图2为本申请实施例提供的各区块链节点通过预设的分布式中间件将接收的业务请求分别存储在自身对应的业务存储器中的示意图。

以交易业务为例,当用户需要进行转账业务时,可在自己所持有的终端中选择转账对象并输入转账金额,终端将根据用户输入的内容,生成相应的交易请求,并将这笔交易请求发送至第一区块链节点中。

第一区块链节点接收到终端发送的交易请求(即业务请求)后,可将这笔交易请求发送至预设的分布式中间件中,以是该预设的分布式中间件可以根据该第一区块链节点的节点标识,将该交易请求存储在第一区块链节点所对应的业务存储器中。

而后,第一区块链节点在接收到这笔交易请求时,可将这笔交易请求以广播的形式发送给整个共识网络中的其他区块链节点,即各第二区块链节点,各第二区块链节点在接收到这笔交易请求后,可同样将该交易请求发送至预设的分布式中间件中,以使该预设的分布式中间件根据各第二区块链节点的节点标识,将该交易请求分别存储在各第二区块链节点各自所对应的业务存储器中。

需要说明的是,第二区块链节点接收到第一区块链节点发送的该业务请求时,同样可通过广播的方式,将该业务请求发送至整个共识网络中的其他区块链节点。此举的目的在于,对于一笔正常合法的业务请求来说,整个共识网络实质上是希望该业务请求求能够通过各区块链节点的共识校验,所以,整个共识网络其实希望该业务请求在共识校验之前,均能存在于各区块链节点所对应的业务存储器中。

然而,在实际应用中,各区块链节点之间的网络通信通常会出现诸如断网、网络抖动等情况发生,若该业务请求只由第一区块链节点进行广播,而其他区块链节点(即各第二区块链节点)不对该业务请求进行再次广播,则当第一区块链节点与某一个或某一些第二区块链节点之前的网络通信出现故障时,则这部分第二区块链节点将无法接收到该业务请求,从而在后续过程中对该业务请求的共识校验造成影响。

为了尽可能降低这种情况的发生,在本申请实施例中,第二区块链节点接收到第一区块链节点发送的该业务请求后,可将通过广播的方式将该业务请求再次广播给整个共识网络的其他区块链节点。其他区块链节点在接收到该业务请求时,可先判断此前是否已经接收过该业务请求,若是,则忽略该业务请求,若否,则可通过预设的分布式中间件,该业务请求存储在自身对应的业务存储器中。

例如在图2中,当第一区块链节点与第二区块链节点3之间出现网络通信故障时,第二区块链节点3依然可以通过第二区块链节点2以及第二区块链节点4接收到这笔交易请求,这就保证了当这笔交易请求是一笔正常合法的交易请求时,这笔交易请求将尽可能的存储在整个共识网络中各区块链节点的各业务存储器中。

在本申请实施例中,第一区块链节点在存储该业务请求的过程中,可先确定出该业务请求所对应的业务类型,并根据预设的各业务类型的优先级顺序,将该业务请求与先前接收到的各业务请求进行排序。

此举的目的在于,在实际应用中,不同的业务,所要求的业务处理的延迟性也各不相同,例如,对于交易业务来说,这类业务通常对业务处理的延迟性要求较高,即,希望整个共识网络能够快速完成该业务的处理工作,而对于公益类的业务来说,这类业务对业务处理的延迟性要求则相对较低,即,即使整个共识网络经过较长的时间后才对该业务进行处理,也不会对该业务造成较大的影响。

基于此,在本申请实施例中,第一区块链节点将该业务请求存储在第一区块链节点所对应的业务存储器时,可按照各业务的优先级顺序,将该业务请求在业务存储器中进行排序,从而得到包含有该业务请求的一个业务队列。在该业务队列中,延迟性要求较高的业务请求则相对靠前,而延迟性要求较低的业务请求则相对靠后,具体的排序方式则是通过运维人员预设的各业务类型的优先级顺序来决定的。

需要说明的是,在本申请实施例中,除了通过各业务类型的优先级顺序来决定业务队列中各业务请求的排列顺序外,第一区块链节点也可根据业务请求在业务存储器中的存储时间来综合决定各业务请求在业务存储器中的排列顺序。即,当业务存储器中的某一业务请求在该业务存储器中的存储时间过长时,则即使该业务请求的延迟性要求较低,也可将该业务请求提升至整个业务队列的前端。

s103:从所述业务存储器中捞取至少一个业务请求,并将捞取的所述至少一个业务请求打包成预处理块广播给各第二区块链节点,以使所述各第二区块链节点在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求,并通过所述部分业务请求以及自身业务存储器中存储的业务请求对所述预处理块进行共识校验。

在本申请实施例中,第一区块链节点需要将自身对应的业务存储器中存储的业务请求通过整个共识网络进行共识,以完成该业务请求的处理工作。为此,第一区块链节点可从自身对应的业务存储器中捞取至少一个业务请求,并在后续过程中,通过整个共识网络对这些业务请求进行共识。

其中,第一区块链节点可将所述业务存储器中业务类型高于设定优先级的各业务请求进行捞取,例如,第一区块链节点可以某一业务类型为界限,将业务类型优先级位于该业务类型之上的各业务请求从该业务存储器中捞取出来。

当然,第一区块链节点也可以从该业务存储器中捞取设定数量的业务请求,如,当各业务请求在业务存储器中的存储形式是以上述业务队列的形式存储时,第一区块链节点可从该业务队列中捞取设定数量的业务请求,进一步的,若设定数量用n表示,则第一区块链节点可从该业务队列中捞取前n个业务请求。

除了以设定数量为标准来捞取业务请求外,第一区块链节点也可通过其他的标准来捞取业务请求,例如,第一区块链节点可将在业务存储器中存储时间超过设定时长的业务请求进行捞取;或是,第一区块链节点通过整个共识网络对业务请求进行共识时,可选定一个业务,并将这个业务所对应的各业务请求从业务存储器中捞取出来,其中,第一区块链节点选定业务时,可随机选取,也可按照一定顺序进行选取。当然,第一区块链节点还可通过其他标准来捞取业务请求,在此就不进行详细赘述了。

第一区块链节点捞取设定数量的业务请求后,可通过预设的特征值确定规则,分别确定出各业务请求所对应的各子特征值,如,当预设的特征值确定规则为hash算法时,第一区块链节点可分别确定出各业务请求所对应的各子hash值,而当预设的特征值确定规则为消息摘要算法第五版(messagedigestalgorithm,md5)时,第一区块链节点可分别确定出各业务请求所对应的子md5值。

第一区块链节点确定出各业务请求对应的各子特征值后,可根据确定出的各特征值以及各业务请求在所述业务存储器中的排列顺序,确定出各业务请求唯一对应的待验证特征值。

其中,该待验证特征值与各业务请求整体上唯一对应,即,当各业务请求中的某一业务请求在内容上发生变化时,则该待验证特征值也将发生变化。第一区块链节点确定待验证特征值的方式如图3所示。

图3为本申请实施例提供的确定待验证特征值的示意图。

在图3中,第一区块链节点所采用的特征值确定规则为hash算法,假设,第一区块链节点从其自身对应的业务存储器中捞取设定数量为4的四个业务请求,这四个业务请求在业务队列中的排序如图3所示。第一区块链节点分别确定出这四个业务请求对应的四个hash值后,可将这四个hash值,按照这四个业务请求在业务队列中的排序,从左到右依次置于merkle树的四个叶子节点上,并以此确定出merkle树的非叶子节点以及根节点,而后,第一区块链节点可将该merkle树的根节点hash7确定为这四个业务请求唯一对应的待验证特征值。

需要说明的是,上述说明的确定待验证特征值的方法并不唯一,第一区块链节点也可采用其他的方式进行,只需保证各业务请求在一定顺序下,该待验证特征值与各业务请求唯一对应即可。

第一区块链节点在确定出各业务请求(即从业务存储器中捞取的至少一个业务请求)唯一对应的待验证特征值后,可将该待验证特征值以及各业务请求打包成一个预处理块,其中在该预处理块中包含有各业务请求以及该待验证特征值,与此同时,各业务请求在该预处理块中是按照各业务请求在业务存储器中的排列顺序进行排列的。

第一区块链节点可将确定出的预处理块以广播的形式发送给整个共识网络中的其他区块链节点(即各第二区块链节点),进而通过整个共识网络对该预处理块中包含的这些业务请求进行共识,如图4所示。

图4为本申请实施例提供的共识网络针对第一区块链节点发送的预处理块进行共识的示意图。

在图4中,第一区块链节点可将该预处理块广播给整个共识网络中的各第二区块链节点,而对于每个第二区块链节点来说,当接收到第一区块链节点发送的预处理块时,第二区块链节点可对该预处理块进行解析,以确定出该预处理块中所包含的各业务请求以及上述待验证特征值。

而后,针对每个第二区块链节点来说,第二区块链节点在从该预处理块中解析出各业务请求后,需要对解析出的各业务请求进行非对称签名合法验证,以验证这些业务请求是否均为合法的业务请求。

具体的,由于终端向区块链节点发送业务请求时,通常会使用自己所持有的私钥(当然也可以是公钥)对该业务请求进行加密(或签名),所以,第二区块链节点对上述预处理块中包含的各业务请求进行非对称签名合法验证时,需要通过公钥(或当终端用公钥加密时,第二区块链节点通过自己所持有的私钥对该业务请求进行解密)对该业务请求进行解析,并对解析出的内容进行验证。

例如,第二区块链节点对上述预处理块中的某一笔交易请求(即业务请求)进行非对称签名合法验证时,可通过自身所持有的公钥对这笔交易请求进行解密,以得到这笔交易请求中所涉及的交易双方的账户地址,进而验证交易双方的账户地址是否合法。当确定出这笔交易请求所涉及的交易双方的账户地址均为合法账户,且交易发起方的账户中所存有的金额数大于等于这笔交易请求中所涉及的转账金额数时,则确定这笔交易请求通过非对称签名合法验证,反之,则确定这笔交易请求未通过非对称签名合法验证。

当第二区块链节点确定出上述预处理块中包含的各业务请求均通过非对称签名合法验证后,可进一步通过预设的特征值确定规则,分别确定出这些业务请求所对应的各子特征值,其中,第二区块链节点所采用的特征值确定规定与第一区块链节点的相同。

第二区块链节点确定出各业务请求对应的各子特征值后,可根据各业务请求在该预处理块中的排列顺序以及各子特征值,确定出各业务请求在整体上唯一对应的一个特征值,继而将该特征值与预处理块中的待验证特征值进行对比,当这两个特征值相同时,则可确定出第一区块链节点所要共识的这些业务请求在内容上没有发生过变动,即,确定这些业务请求通过哈希完整性验证。

各第二区块链节点可按照上述方法对该预处理块进行非对称签名合法验证以及哈希完整性验证后,可分别得到各自针对该预处理块在本地的校验结果(其中,只有在该预处理块中的各业务请求均通过非对称签名合法验证以及哈希完整性验证时,该预处理块在本地的校验结果才会是通过,否则只要有一个验证不通过,该预处理块在本地的校验结果均为不通过),随后,各第二区块链节点可将各自得到的校验结果以广播的形式发送给整个共识网络中的其他区块链节点,以进入整个共识网络的共识校验过程,而整个共识网络中的各区块链节点接收到相互广播的各校验结果后,可通过接收到的各校验结果以及自身得到的校验结果,得到整个共识网络中各区块链节点针对该预处理块中包含的各业务请求是否通过校验的综合校验结果,并将得到的综合校验结果再次广播给整个共识网络中的其他区块链节点。

整个共识网络中的各区块链节点接收到相互广播的综合校验结果后,可进一步判断整个共识网络中,各区块链节点得出的各综合校验结果大部分是否均为校验通过,若是,则将该预处理块包含的各业务请求写入到一个区块中进行存储,并进一步将该区块按照时序写入到自身保存的区块链中;若否,则拒绝所述各业务请求。

上述说明的整个共识网络的共识校验过程只是一个大致的共识校验过程,在本申请实施例中,整个共识网络对设定数量的业务请求进行共识校验的过程还会涉及到较为复杂的共识算法,如,拜占庭容错算法(practicalbyzantinefaulttolerance,pbft)、一致性算法(raft)、paxos算法等,而本申请实施例中涉及共识算法的过程与现有技术相同,在此就不进行详细赘述了。

当区块链节点(这里提到的区块链节点即可以是第一区块链节点,也可以是第二区块链节点)将所述各业务请求以区块的形式存储在区块链中后,可将这些业务请求在各自业务存储器中所占用的存储空间进行释放,并将这些业务请求转移至用于保存历史业务请求的数据库中。

需要说明的是,虽然各第二区块链节点会将第一区块链节点广播的业务请求进行再次广播,但是,受网络状况的影响,整个共识网络中的一些区块链节点依然可能无法有效的接收到该业务请求,所以,在共识阶段过程中,当某一第二区块链节点并没有从自身对应的业务存储器中查找到上述预处理块中的部分业务请求时,则该第二区块链节点可通过预设的分布式中间件,向其他区块链节点发送获取这部分业务请求的询问消息,而其他区块链节点在接收到该询问消息后,可确定自身对应的业务存储器中是否包含有这部分业务请求,若是,则向该第二区块链节点返回应答消息,若否,则不向该第二区块链节点返回该应答消息。

该第二区块链节点接收到该应答消息后,可通过预设的分布式中间件从发送该应答消息的区块链节点所对应的业务存储器中获取这部分业务请求,而后,第二区块链节点可对这部分业务请求进行非对称签名合法验证,并当确定出这部分业务请求通过非对称签名合法验证时,将这部分业务请求存储在自身对应的业务存储器中,其中,第二区块链节点可按照预处理块中各业务请求的排列顺序,将这部分业务请求存储在自身对应的业务存储器中。而当该第二区块链节点确定这部分业务请求未通过非对称签名合法验证时,则不对这部分业务请求进行存储,并确定第一区块链节点发送的预处理块未通过本地(即该第二区块链节点)的共识校验。

若第二区块链节点从其他区块链节点接收到这部分业务请求后,依然从其他的区块链节点接收到这部分业务请求,则该第二区块链节点可将后续接收到的这部分业务请求忽略即可,无需再对后续接收到的这部分业务请求进行非对称签名合法验证及存储。

在本申请实施例中,整个共识网络可以是联盟链的共识网络,而各区块链节点则可以是联盟链中的各区块链节点,其中,本申请实施例中,第一区块链节点可以是联盟链共识算法中的leader节点,而第二区块链节点可以是联盟链共识算法中的非leader节点。

从上述方法可以看出,第二区块链节点在接收到第一区块链节点广播的各业务请求后发现自身对应的业务存储器中未包含有各业务请求中的部分业务请求时,并不是直接认定这些业务请求在该第二区块链节点上共识校验不通过,而是可从整个共识网络中的其他区块链节点获取这部分缺失的业务请求,并通过获取的这部分业务请求以及自身业务存储器中存储的业务请求对从第一区块链节点接收到的各业务请求进行共识校验,这样一来就大大降低了因网络故障而对各业务请求的共识校验产生不利影响的情况发生,从而提高了整个区块链业务的业务处理准确性。

不仅如此,由于本申请实施例中,各区块链节点用于存储业务请求的业务存储器是以数据库形式存在的,相对于现有技术中各区块链节点通过各自的缓存存储各业务请求的方式来说,本申请实施例中所提供的数据库形式的业务存储器极大的提高了业务请求的存储能力,并且,区块链节点通过整个共识网络对该业务存储器中的部分业务请求进行共识校验时,该区块链节点依然可以继续接收终端发送的业务请求,即,无需再利用通过共识校验的部分业务请求所占有的存储空间来接收终端发送的业务请求,从而进一步提高了区块链业务的业务处理效率。

以上为本申请实施例提供的业务校验方法,基于同样的思路,本申请实施例还提供两种业务校验的装置,如图5、6所示。

图5为本申请实施例提供的一种业务校验的装置示意图,具体包括:

接收模块501,接收终端发送的业务请求;

存储模块502,将所述业务请求存储在所述装置对应的业务存储器中,并将所述业务请求广播给各第二区块链节点,以使所述各第二区块链节点将所述业务请求分别存储在各自对应的业务存储器中;

请求捞取模块503,从所述业务存储器中捞取至少一个业务请求,并将捞取的所述至少一个业务请求打包成预处理块广播给各第二区块链节点,以使所述各第二区块链节点在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求,并通过所述部分业务请求以及自身业务存储器中存储的业务请求对所述预处理块进行共识校验。

所述业务存储器为存储业务请求的数据库。

所述存储模块502,将所述业务请求通过预设的分布式中间件存储在所述业务存储器中。

所述请求捞取模块503,从所述业务存储器中捞取业务类型高于设定优先级的设定数量的各业务请求。

所述存储模块502,根据所述业务请求的业务类型以及预设的各业务类型的优先级顺序,将所述业务请求在所述业务存储器中进行存储。

所述装置为联盟链共识算法中的leader节点,所述第二区块链节点为联盟链共识算法中的非leader节点。

图6为本申请实施例提供的另一种业务校验的装置示意图,具体包括:

接收请求模块601,接收第一区块链节点广播的业务请求;

请求存储模块602,将所述业务请求存储在所述装置对应的业务存储器中;

接收模块603,接收到所述第一区块链节点广播的包含有至少一个业务请求的预处理块,并在确定出自身对应的业务存储器中未包含有所述预处理块中的部分业务请求时,从其他区块链节点中获取所述部分业务请求;

校验模块604,通过所述部分业务请求以及自身对应的业务存储器中存储的业务请求,对所述预处理块进行共识校验。

所述接收模块603,在确定所述业务存储器中未包含有所述预处理块中的部分业务请求时,则向其他第二区块链节点或所述第一区块链节点发送获取所述部分业务请求的询问消息;接收所述其他第二区块链节点或所述第一区块链节点返回的应答消息,所述应答消息表示发送所述应答消息的其他第二区块链节点或第一区块链节点所对应的业务存储器中存储有所述部分业务请求;从发送所述应答消息的第二区块链节点或所述第一区块链节点对应的业务存储器中获取所述部分业务请求。

在本申请实施例中,第一区块链节点将从自身业务存储器中捞取的至少一个业务请求打包成预处理块广播给各第二区块链节点后,若第二区块链节点发现自身对应的业务存储器中未包含有所述预处理块中的部分业务请求,则可从其他区块链节点中获取所述部分业务请求,并通过所述部分业务请求以及自身业务存储器中存储的业务请求对所述预处理块中包含的业务请求进行共识校验。由于第二区块链节点在接收到第一区块链节点广播的预处理块后发现自身对应的业务存储器中未包含有该预处理块中的部分业务请求时,并不是直接认定该预处理块在该第二区块链节点上共识校验不通过,而是可从整个共识网络中的其他区块链节点获取这部分缺失的业务请求,并通过获取的这部分业务请求以及自身业务存储器中存储的业务请求对该预处理块进行共识校验,这样一来就大大降低了因网络故障而对各业务请求的共识校验产生不利影响的情况发生,从而提高了整个区块链业务的业务处理准确性。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

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

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

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

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

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

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

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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