掌桥专利:专业的专利平台
掌桥专利
首页

区块链交易执行方法、区块链节点及控制装置

文献发布时间:2023-06-19 11:29:13


区块链交易执行方法、区块链节点及控制装置

技术领域

本说明书一个或多个实施例涉及区块链技术领域,特别涉及一种区块链交易执行方法、区块链节点及控制装置。

背景技术

区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。

目前来说,区块链中在通过共识确定区块包括的多个交易之后,将区块包括的多个交易通知区块链的各个节点。区块链的各个节点获取并执行该区块中的多个交易,根据多个交易的执行结果生成区块,并在对生成的区块进行共识之后将区块存入节点的区块数据库中。区块链中的例如记账节点可以在对区块进行共识之后向用户返回交易的收据。

发明内容

本说明书一个或多个实施例的目的在于提供一种区块链交易执行方法、区块链节点及控制装置。

根据第一方面,提供一种区块链交易执行方法,应用于区块链的节点,包括:

获取属于第一区块的多个交易;

执行所述多个交易;

对所述多个交易的执行结果进行共识;

将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

可选的,所述获取属于第一区块的多个交易,包括:获取属于所述第一区块的全部交易;

其中,所述方法还包括:

获取所述第一区块的全部交易各自的第一集合;任一交易的第一集合包括该交易读取和写入的参数的标识;

基于所述第一区块的全部交易各自的第一集合,将所述第一区块的全部交易分组为至少一个交易组,所述多个交易属于相同的交易组。

可选的,所述将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:按照所述多个交易的执行顺序,将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

可选的,所述获取属于第一区块的多个交易,包括:获取多个区块的全部交易;

其中,所述方法还包括:

获取所述多个区块的全部交易各自的第一集合;任一交易的第一集合包括该交易读取和写入的参数的标识;

基于所述多个区块的全部交易各自的第一集合,将所述多个区块的全部交易分组为至少一个交易组,所述多个交易属于相同的交易组。

可选的,所述将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:按照所述多个交易的执行顺序,将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值相对于所述第一区块存储到缓存区中。

可选的,所述方法还包括:在对属于所述第一区块的至少部分交易的执行结果完成共识之后,将属于所述第一区块的至少部分交易的数据作为所述第一区块的至少部分区块体存入区块数据库中。

可选的,在所述第一区块的全部交易执行并共识完成之后,所述方法还包括:

将所述第一区块的区块头存入所述区块数据库。

可选的,所述方法还包括:获取所述多个交易各自的第一集合;任一交易的第一集合包括该交易读取的参数的标识。

可选的,所述缓存区包括第一缓存区和第二缓存区;所述将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中;

其中,所述方法还包括:

在确定属于第二区块的全部交易中共识成功的各个交易的执行结果中包括的写入的各个参数的值都存储到所述第二缓存区中之后,对于所述多个交易各自的第一集合中每个读取的参数的标识,若第一缓存区和第二缓存区中都未存储该标识对应的参数的值,从状态数据库中获取该参数的值,并将该参数的值存入所述第一缓存区中;其中,所述第二区块为所述第一区块的前一个区块;

其中,所述执行所述多个交易,包括:基于所述第一缓存区存储的各个参数的值,执行所述多个交易。

可选的,在属于所述第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入所述第二缓存区之后,所述方法还包括:根据所述第二缓存区中相对于第一区块存储的各个参数的值,更新状态数据库中的世界状态。

根据第二方面,提供一种区块链交易执行方法,应用于区块链的节点,所述区块链的节点包括控制装置以及计算装置,所述方法包括:

所述控制装置获取属于第一区块的多个交易,并将所述多个交易发送给所述计算装置;

所述计算装置执行所述多个交易,并将所述多个交易的执行结果返回给所述控制装置;

所述控制装置对所述多个交易的执行结果进行共识,并将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

可选的,所述控制装置获取属于第一区块的多个交易,包括:所述控制装置获取属于所述第一区块的全部交易;

其中,所述方法还包括:

所述控制装置获取所述第一区块的全部交易各自的第一集合;任一交易的第一集合包括该交易读取和写入的参数的标识;

所述控制装置基于所述第一区块的全部交易各自的第一集合,将所述第一区块的全部交易分组为至少一个交易组,所述多个交易属于相同的交易组。

可选的,所述控制装置将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:所述控制装置按照所述多个交易的执行顺序,将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

可选的,所述控制装置获取属于第一区块的多个交易,包括:所述控制装置获取多个区块的全部交易;

其中,所述方法还包括:

所述控制装置获取所述多个区块的全部交易各自的第一集合;任一交易的第一集合包括该交易读取和写入的参数的标识;

所述控制装置基于所述多个区块的全部交易各自的第一集合,将所述多个区块的全部交易分组为至少一个交易组,所述多个交易属于相同的交易组。

可选的,所述控制装置将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:所述控制装置按照所述多个交易的执行顺序,将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值相对于所述第一区块存储到缓存区中。

可选的,所述区块链的节点还包括存储装置;所述方法还包括:在对属于所述第一区块的至少部分交易的执行结果完成共识之后,所述控制装置指示所述存储装置将属于所述第一区块的至少部分交易的数据作为所述第一区块的至少部分区块体存入区块数据库中。

可选的,在所述第一区块的全部交易执行并共识完成之后,所述方法还包括:

所述控制装置指示所述存储装置将所述第一区块的区块头存入所述区块数据库。

可选的,所述方法还包括:所述控制装置获取所述多个交易各自的第一集合;任一交易的第一集合包括该交易读取的参数的标识。

可选的,所述缓存区包括第一缓存区和第二缓存区;所述控制装置将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,包括:所述控制装置将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中;

其中,所述区块链的节点还包括存储装置;所述方法还包括:

在确定属于第二区块的全部交易中共识成功的各个交易的执行结果中包括的写入的各个参数的值都存储到所述第二缓存区中之后,对于所述多个交易各自的第一集合中每个读取的参数的标识,若第一缓存区和第二缓存区中都未存储该标识对应的参数的值,所述控制装置从所述存储装置的状态数据库中获取该参数的值,并将该参数的值存入所述第一缓存区中;其中,所述第二区块为所述第一区块的前一个区块;

其中,所述计算装置执行所述多个交易,包括:所述计算装置基于所述第一缓存区存储的各个参数的值,执行所述多个交易。

可选的,在属于所述第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入所述第二缓存区之后,所述方法还包括:所述控制装置指示所述存储装置根据所述第二缓存区中相对于第一区块存储的各个参数的值,更新状态数据库中的世界状态。

根据第三方面,提供一种区块链的节点,所述节点包括:

第一获取模块,用于获取属于第一区块的多个交易;

执行模块,用于执行所述多个交易;

结果共识模块,用于对所述多个交易的执行结果进行共识;

存储模块,用于将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

根据第四方面,提供一种区块链的节点,所述区块链的节点包括控制装置以及计算装置;

其中,所述控制装置,用于获取属于第一区块的多个交易,并将所述多个交易发送给所述计算装置;以及对所述多个交易的执行结果进行共识,并将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中;

所述计算装置,用于执行所述多个交易,并将所述多个交易的执行结果返回给所述控制装置。

根据第五方面,提供用于区块链节点的控制装置,包括:

第一获取单元,用于获取属于第一区块的多个交易;

指示单元,用于指示所述区块链节点执行所述多个交易;

结果共识单元,用于对所述多个交易的执行结果进行共识;

存储单元,用于将所述多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

根据第六方面,提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述第一方面或第二方面中任一项的所述的方法。

根据第七方面,提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述第一方面或第二方面中任一项所述的方法。

本说明书的实施例提供的技术方案可以包括以下有益效果:

本说明书的实施例提供的区块链交易执行的方法和区块链节点,获取属于第一区块的多个交易,执行该多个交易,对该多个交易的执行结果进行共识,并将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。本实施例在多个交易共识成功后,基于共识成功的各个交易各自写入的参数的值,及时更新维护缓存区中的数据。从而解决了交易数据更新维护滞后的问题。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

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

图1是本说明书根据一示例性实施例示出的一种区块链系统的架构图;

图2是本说明书根据一示例性实施例示出的区块链系统中任意一个区块链节点的结构示意图;

图3是本说明书根据一示例性实施例示出的一种区块链交易执行方法的流程图;

图4是本说明书根据一示例性实施例示出的另一种区块链交易执行方法的流程图;

图5是本说明书根据一示例性实施例示出的另一种区块链交易执行方法的流程图;

图6是本说明书根据一示例性实施例示出的另一种区块链交易执行方法的流程图;

图7是本说明书根据一示例性实施例示出的另一种区块链交易执行方法的流程图;

图8是本说明书根据一示例性实施例示出的一种区块链交易执行场景的示意图;

图9是本说明书根据一示例性实施例示出的另一种区块链交易执行场景的示意图;

图10是本说明书根据一示例性实施例示出的一种区块链节点的结构框图;

图11是本说明书根据一示例性实施例示出的另一种区块链节点的结构框图;

图12是本说明书根据一示例性实施例示出的一种用于区块链节点的控制装置的结构框图;

图13是本说明根据一示例性实施例示出的一种计算设备的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

如图1所示,是根据一示例性实施例示出的一种区块链系统的架构图。图2是该区块链系统中任意一个区块链节点的结构示意图。

在图1示出的架构图中,节点1~节点6均为区块链系统中的区块链节点。可以理解,图1仅是示例性的示出6个区块链节点,实际上区块链系统中可以包括任意数目的区块链节点。在区块链节点中,可以包括一个记账节点(可以是区块链节点中的任意一个),记账节点至少可以确定多个交易以及该多个交易的执行顺序。在本实施例中,记账节点还可以确定每个交易读取的参数的键和写入的参数的键。在一些实现方式中,记账节点可以将上述多个交易的顺序以及每个交易读取的参数的键和写入的参数的键打包成对应于区块的数据包,并将该数据包发送给区块链系统中其它的各个区块链节点。在另一些实现方式中,记账节点也可以将上述多个交易、上述多个交易的顺序以及每个交易读取的参数的键和写入的参数的键打包成对应于区块的数据包,并将该数据包发送给区块链系统中其它的各个区块链节点。

在图2示出的示意图中,每个区块链节点都可以包括控制装置M、计算装置C和存储装置S。其中,控制装置M可以用于执行除交易以外的各种操作。控制装置M可以包括获取模块、预取模块、分组模块、共识模块、通信模块以及处理模块等。控制装置M中还设置有缓存区,该缓存区可以包括第一缓存区、第二缓存区和第三缓存区。计算装置C可以用于执行交易。计算装置C可以包括任意数目的计算模块,计算模块之间相互独立。存储装置S存储有区块链的区块数据库和状态数据库等。控制装置M、计算装置C和存储装置S可以分别为单独的实体计算设备或计算设备集群,也可以为计算设备中的一个用于实现特定功能的虚拟装置。

具体来说,针对区块链系统中的任意一个区块链节点,该区块链节点的控制装置M的获取模块首先可以获取多个区块的全部交易、该全部交易的执行顺序以及该全部交易中各个交易各自的第一集合,任一交易的第一集合包括该交易读取的参数的键和写入的参数的键。

一方面,控制装置M的预取模块可以基于上述各个交易各自的第一集合,确定各个交易各自读取的参数的键,并确定各个交易各自读取的参数的值。使上述各个交易各自读取的参数的键值对,均被记录在缓存区中。具体地,预取模块可以从上述各个交易各自的第一集合中获取各个交易各自读取的各个参数的键,并在该缓存区中的第一缓存区和第二缓存区查找上述各个参数的键对应的值(即该参数的值)。对于任一参数,若第一缓存区和第二缓存区均未存储该参数的键对应的值,则预取模块可以从存储装置S存储的状态数据库中获取该参数的值,并存入第一缓存区。若第二缓存区中存有该参数的键对应的值,则可以在第一缓存区通过引用的方式记录该参数的值。使得该缓存区中至少存储有上述各个交易各自读取的参数的键值对。

另一方面,控制装置M的获取模块可以将获取的多个区块的全部交易、该全部交易的执行顺序以及该全部交易中各个交易各自读取的参数的键和各自写入的参数的键传输至分组模块。分组模块可以基于该全部交易各自读取的参数的键和各自写入的参数的键,确定具有关联关系的交易,并基于确定的结果,对该全部交易进行分组,以获取多个交易组。使得具有关联关系的交易均被分到同一个交易组,剩下的没有关联关系的交易,可以随机分配。其中,具有关联关系的交易可以是读取或写入的参数有重叠的交易。

接着,控制装置M的通信模块可以将获取的上述多个交易组以及缓存区存储的各个交易各自读取的参数的键值对传输至计算装置C,由计算装置C基于各个交易各自读取的参数的键值对,并行处理多个交易组。其中,计算装置C中的一个计算模块可以对应于一个独立的线程,也可以对应于一个独立的计算设备,可以由不同的计算模块并行执行不同的交易组。对于每个交易组,串行执行该交易组中包括的各个交易。计算装置C可以将各个交易的执行结果返回给控制装置M的通信模块。由通信模块将各个交易的执行结果存入第三缓存区。

对于上述多个区块中的任意一个区块,在计算装置C执行完成该区块中的全部交易之前(例如,每执行完成一组交易组的交易),控制装置M的共识模块可以通过与区块链的其它节点的共识模块进行交互,对已执行完成的部分交易的执行结果进行共识,以确定该部分交易是否各自执行成功。控制装置M的处理模块可以将对各个交易的共识结果相对于各个交易存入第三缓存区,区块链中与客户端对接的节点在上述共识之后可以将共识成功的各个交易的执行结果返回给客户端。

在对已执行完成的部分交易的执行结果进行共识之后,控制装置M的处理模块可以获取部分交易中共识成功的各个交易的执行结果中包括的写入参数的值,并将共识成功的各个交易的执行结果中包括的写入参数的值,相对于上述共识成功的各个交易各自所属的区块,存储到第二缓存区中。

接着,在对属于该区块的至少部分交易的执行结果完成共识之后,控制装置M的存储模块可以向存储装置S发送一个写入请求,该写入请求携带该至少部分交易各自的交易体、从第三缓存区获取的交易的执行结果及共识结果等,该执行结果例如具有交易收据的形式。存储装置S根据该写入请求将该至少部分交易的交易体和执行结果等数据作为该区块的至少部分区块体,存入区块数据库中,并将该至少部分交易的共识结果也存储到区块数据库中。

在该区块中的全部交易执行并共识完成之后,在确定对该区块的前一个区块进行的区块共识成功的情况下,控制装置M的处理模块可以从存储装置S中读取当前世界状态,并基于前一个区块的哈希值、当前世界状态以及属于该区块的全部交易的数据,生成该区块的区块头。

最后,控制装置M的共识模块可以基于生成的区块头,对该区块进行区块共识。若对该区块的区块共识成功,控制装置M的存储模块可以向存储装置S发送写块请求,使存储装置S将该区块的区块头存入区块数据库中。另外,在属于该区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入第二缓存区之后,可以根据第二缓存区中相对于该区块存储的各个参数的值,更新状态数据库中的世界状态。然后,控制装置M的处理模块可以从第二缓存区中删除相对于该区块存储的各个参数的值。

下面将结合具体的实施例对本说明书提供的方案进行详细描述。

如图3所示,图3是根据一示例性实施例示出的一种区块链交易执行方法的流程图,该方法可以应用于任意一个区块链的节点中。本领域技术人员可以理解,该区块链的节点可以为任何具有计算、处理能力的设备、平台、服务器或设备集群。该方法包括以下步骤:

在步骤302中,获取属于第一区块的多个交易。

在本实施例中,可以仅获取属于第一区块的多个交易(该多个交易可以是属于第一区块的部分交易,也可以是属于第一区块的全部交易),还可以获取多个区块(该多个区块包括第一区块)的全部交易。可以理解,本实施例对获取属于第一区块的多个交易的具体方式方面不限定。

在步骤304中,执行该多个交易。

在一种实现方式中,区块链系统中的任一节点可以获取属于第一区块中的多个交易,并获取该多个交易各自读取的参数。在执行该多个交易之前,可以预先对该多个交易读取的参数的值进行预取。具体是,对于任意一个交易读取的参数,首先从本地缓存区中查找该参数的值,若本地缓存区中未存储该参数的值,则从状态数据库中获取该参数的值,并将该参数的值存储至本地缓存区中。在如上述对上述多个交易进行参数预取之后,该节点可以基于本地缓存区中存储的各个参数的值,执行该多个交易。

在另一种实现方式中,区块链系统中的任一节点可以基于获取的多个区块的全部交易各自读取和写入的参数,对多个区块的全部交易进行分组,以获取多个交易组,并行处理多个交易组。对于每个交易组,串行执行该交易组中包括的交易。

在又一种实现方式中,对于区块链系统中的任一节点,可以获取多个区块(包括第一区块)的全部交易。一方面,在执行该全部交易之前,可以预先对该全部交易读取的参数的值进行预取,并将该全部交易读取的参数的值存储至本地缓存区中。另一方面,可以对该全部交易进行分组,以获取多个交易组。然后,基于该缓存区存储的各个参数的值,并行处理多个交易组。对于每个交易组,串行执行该交易组中包括的交易。

在步骤306中,对该多个交易的执行结果进行共识。

在本实施例中,可以对已执行完成的该多个交易的执行结果进行共识。具体来说,可以通过区块链的多个节点对该多个交易的执行结果进行共识验证,以确定该多个交易是否各自执行成功。

在本实施例中,可以由每个区块链的节点对该多个交易的各个交易各自对应的执行结果进行哈希计算,得到各个执行结果的哈希值。通过对各个执行结果的哈希值进行比对完成对各个执行结果的共识。针对任一交易,如果每个区块链的节点,或者大于预设数量的区块链的节点,得到的该交易对应的执行结果的哈希值均相同,则确定该交易执行成功。可以理解,还可以通过其它任意合理的方式对已执行完成的该多个交易的执行结果进行共识,本实施例对此方面不限定。

在本实施例中,在完成对各个执行结果的共识后,还可以基于共识的结果,得到该多个交易各自共识后的收据。可以由区块链系统中的记账节点,或和客户端对接的节点将该多个交易各自共识后的收据返回给客户端。其中,记账节点或和客户端对接的节点,可以是区块链系统中任一节点。

在步骤308中,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在本实施例中,在对该多个交易的执行结果进行共识之后,可以确定该多个交易是否各自执行成功。对于该多个交易中共识成功的交易,可以基于该共识成功的交易对应的执行结果,获取该共识成功的交易写入的参数的值。并在该缓存区中相对于该共识成功的交易所属的第一区块存储该共识成功的交易写入的参数的值,从而对该缓存区存储的数据进行更新维护。

在本实施例的一种实现方式中,该区块链的节点可以获取属于第一区块的全部交易,获取第一区块的全部交易各自的第一集合。其中,任一交易的第一集合可以包括该交易读取和写入的参数的标识。基于第一区块的全部交易各自的第一集合,将第一区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组,分别执行每个交易组(串行执行该交易组中包括的交易)。对该多个交易的执行结果进行共识,按照该多个交易的执行顺序,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在本实施例的另一种实现方式中,该区块链的节点可以获取多个区块的全部交易,获取多个区块的全部交易各自的第一集合。其中,任一交易的第一集合可以包括该交易读取和写入的参数的标识。基于多个区块的全部交易各自的第一集合,将多个区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组,分别执行每个交易组(串行执行该交易组中包括的交易)。对该多个交易的执行结果进行共识,按照该多个交易的执行顺序,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值相对于第一区块存储到缓存区中。

本说明书的上述实施例提供的区块链交易执行的方法,获取属于第一区块的多个交易,执行该多个交易,对该多个交易的执行结果进行共识,并将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。本实施例在多个交易共识成功后,基于共识成功的各个交易各自写入的参数的值,及时更新维护缓存区中的数据。从而解决了交易数据更新维护滞后的问题。

如图4所示,图4根据一示例性实施例示出的另一种区块链交易执行方法的流程图,该实施例描述了更新区块数据库的过程,该方法可以应用于任一区块链的节点中,包括以下步骤:

在步骤402中,获取属于第一区块的多个交易。

在本实施例中,可以仅获取属于第一区块的多个交易(该多个交易可以是属于第一区块的部分交易,也可以是属于第一区块的全部交易),还可以获取多个区块(该多个区块包括第一区块)的全部交易。可以理解,本实施例对获取属于第一区块的多个交易的具体方式方面不限定。

在步骤404中,执行该多个交易。

在步骤406中,对该多个交易的执行结果进行共识。

在本实施例中,可以对已执行完成的该多个交易的执行结果进行共识。具体来说,可以通过区块链的多个节点对该多个交易的执行结果进行共识验证,以确定该多个交易是否各自执行成功。

在本实施例中,在完成对各个执行结果的共识后,还可以基于共识的结果,得到该多个交易各自共识后的收据。可以由区块链系统中的记账节点,或和客户端对接的节点将该多个交易各自共识后的收据返回给客户端。其中,记账节点或和客户端对接的节点,可以是区块链系统中任一节点。

在步骤408中,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在本实施例中,在对该多个交易的执行结果进行共识之后,可以确定该多个交易是否各自执行成功。对于该多个交易中共识成功的交易,可以基于该共识成功的交易对应的执行结果,获取该共识成功的交易写入的参数的值。并在该缓存区中相对于该共识成功的交易所属的第一区块存储该共识成功的交易写入的参数的值,从而对该缓存区存储的数据进行更新维护。

在步骤410中,在对属于第一区块的至少部分交易的执行结果完成共识之后,将属于第一区块的至少部分交易的数据作为第一区块的至少部分区块体存入区块数据库中。

在步骤412中,在第一区块的全部交易执行并共识完成之后,将第一区块的区块头存入区块数据库。

在本实施例中,在对属于第一区块的全部交易的执行结果都完成共识、且确定对第一区块的前一个区块进行的区块共识成功之后,可以基于第一区块的前一个区块的哈希值以及属于第一区块的全部交易的数据,生成第一区块的区块头。

在本实施例中,在第一区块的全部交易执行并共识完成之后,对第一区块进行区块共识。若对第一区块的区块共识成功,将第一区块的区块头存入区块数据库。

具体来说,区块共识就是比较各个区块链的节点对应的第一区块的区块头的哈希值是否均相同,如果均相同则区块共识成功。其中,区块头中可以包括但不限于交易根、状态根、收据根等数据,通过对区块头进行共识,也即对区块头的正确性及世界状态的正确性进行了验证。

需要说明的是,对于与图3实施例中相同的步骤,在上述图4实施例中不再进行赘述,相关内容可参见图3实施例。

本说明书的上述实施例提供的区块链交易执行的方法,获取属于第一区块的多个交易,执行该多个交易,对该多个交易的执行结果进行共识。将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中,在对属于第一区块的至少部分交易的执行结果完成共识之后,将属于第一区块的至少部分交易的数据作为第一区块的至少部分区块体存入区块数据库中,在第一区块的全部交易执行并共识完成之后,将第一区块的区块头存入区块数据库。由于本实施例,在对属于第一区块的全部交易的执行结果都完成共识之后,就生成第一区块的区块头,从而有助于提升区块链系统的性能。

如图5所示,图5根据一示例性实施例示出的另一种区块链交易执行方法的流程图,该实施例详细描述了执行多个交易的过程,该方法可以应用于任一区块链的节点中,包括以下步骤:

在步骤502中,获取属于第一区块的多个交易。

在步骤504中,获取该多个交易各自的第一集合。

在本实施例中,任一交易的第一集合可以包括该交易访问的参数的标识。例如,参数的标识可以是参数的键,也可以是参数的映射编号,还可以是其它任意合理形式的参数的唯一性标识。可以理解,本实施例对参数的标识的具体形式方面不限定。其中,访问的参数至少可以包括读取的参数。

在本实施例中,可以仅获取第一区块的多个交易以及该多个交易各自的第一集合,也可以获取多个区块(该多个区块包括第一区块)的全部交易以及该全部交易各自的第一集合,本实施例对此方面不限定。

在本实施例的一种实现方式中,区块链系统中的记账节点可以确定多个交易,并进一步获取每个交易访问的参数的标识,得到多个交易各自的第一集合。然后,将上述多个交易以及各自的第一集合打包成对应于第一区块的数据包,并将对应于第一区块的数据包发送给区块链系统中其它的各个区块链节点。因此,对于非记账节点,可以直接从对应于第一区块的数据包中获取属于第一区块的多个交易以及该多个交易各自的第一集合。对于记账节点,可以通过预执行每个交易(预执行交易时并不改变世界状态),从而获取每个交易访问的参数的标识。或者,也可以读取智能合约中预先记录的每个交易访问的参数的标识,等等。可以理解,本实施例对记账节点获取每个交易访问的参数的标识的具体方式方面不限定。

在本实施例的另一种实现方式中,区块链系统中的记账节点确定多个交易后,直接将上述多个交易打包成对应于第一区块的数据包,并将对应于第一区块的数据包发送给区块链系统中其它的各个区块链节点。对于非记账节点,可以直接从对应于第一区块的数据包中获取属于第一区块的多个交易。对于区块链系统中的任意一个节点,均可以通过预执行每个交易,从而获取每个交易访问的参数的标识。或者,也可以读取智能合约中预先记录的每个交易访问的参数的标识,等等。

在本实施例的又一种实现方式中,区块链系统中的任意一个节点,在获取多个交易之后,可以从各个交易获取各自访问的参数的标识,得到多个交易各自的第一集合。具体来说,任一交易的预设字段中包含该交易访问的参数的标识。对于区块链系统中的记账节点,在获取多个交易后,一方面,可以从各个交易的预设字段中获取各个交易各自访问的参数的标识,得到多个交易各自的第一集合。另一方面,可以将该多个交易打包成对应于第一区块的数据包,并将对应于第一区块的数据包发送给区块链系统中其它的各个区块链节点。对于区块链系统中的非记账节点,在获取多个交易之后,也可以从各个交易的预设字段中获取各个交易各自访问的参数的标识,得到多个交易各自的第一集合。由于本实现方式中,各个交易中包含了各自访问的参数的标识,因此,使得区块链系统中的各个节点能够直接从各个交易获取各自的第一集合,从而降低了执行交易之前的准备时间。

在步骤506中,对于该多个交易各自的第一集合中每个读取的参数的标识,若缓存区中的第一缓存区和第二缓存区中未存储该标识对应的参数的值,从状态数据库获取该参数的值,并将该参数的值存入第一缓存区中。

在本实施例中,区块链的节点首先获取属于第一区块的多个交易以及该多个交易各自的第一集合。在执行该多个交易之前,区块链的节点可以基于该多个交易各自的第一集合,对该多个交易读取的参数的值进行预取。具体来说,对于任意一个交易的第一集合中任意一个读取的参数的标识,首先从本地缓存区中查找该标识对应的参数的值,若本地缓存区中未存储该标识对应的参数的值,则从状态数据库中获取该参数的值,并将该参数的标识和值关联地(例如以键值对的形式)存储至本地缓存区中。使得在执行该多个交易之前,在该缓存区中存储有属于第一区块的全部交易各自读取的参数的标识和值。

在本实施例中,缓存区至少可以包括第一缓存区,第一缓存区可以用于存储各个交易各自的第一集合中读取的参数的标识和值。可选地,缓存区还可以进一步包括第二缓存区,第二缓存区可以用于存储各个交易各自的第一集合中写入的参数的标识和值。例如,在确定属于第二区块的全部交易中共识成功的各个交易的执行结果中包括的写入的各个参数的值都存储到第二缓存区中之后,对于第一区块的多个交易各自的第一集合中每个读取的参数的标识,若第一缓存区和第二缓存区中都未存储该标识对应的参数的值,从状态数据库中获取该参数的值。其中,第二区块为第一区块的前一个区块。

在步骤508中,基于第一缓存区存储的各个参数的值,执行该多个交易。

在步骤510中,对该多个交易的执行结果进行共识。

在步骤512中,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中。

需要说明的是,对于与图3-图4实施例中相同的步骤,在上述图5实施例中不再进行赘述,相关内容可参见图3-图4实施例。

本说明书的上述实施例提供的区块链交易执行方法,获取属于第一区块的多个交易,获取该多个交易各自的第一集合,对于该多个交易各自的第一集合中每个读取的参数的标识,若缓存区中的第一缓存区和第二缓存区中未存储该标识对应的参数的值,从状态数据库获取该参数的值,并将该参数的值存入第一缓存区中。基于第一缓存区存储的各个参数的值,执行该多个交易,对该多个交易的执行结果进行共识,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中。由于本实施例在属于第一区块的多个交易执行之前,在缓存区中预先存储了第一区块的各个交易各自读取的参数的标识和值,使得区块链的节点能够基于缓存中存储的各个参数的值,执行各个交易。因此,在执行各个交易期间,无需再通过IO操作从存储区的状态数据库中逐一获取各个交易各自读取的参数的值,从而减少了区块链的节点在执行交易期间的IO操作,减小了执行交易导致的时延。

如图6所示,图6根据一示例性实施例示出的另一种区块链交易执行方法的流程图,该实施例描述了更新状态数据库的过程,该方法可以应用于任一区块链的节点中,包括以下步骤:

在步骤602中,获取属于第一区块的多个交易。

在步骤604中,获取该多个交易各自的第一集合。

在本实施例中,任一交易的第一集合可以包括该交易访问的参数的标识。例如,参数的标识可以是参数的键,也可以是参数的映射编号,还可以是其它任意合理形式的参数的唯一性标识。可以理解,本实施例对参数的标识的具体形式方面不限定。其中,访问的参数至少包括读取的参数。

在步骤606中,对于该多个交易各自的第一集合中每个读取的参数的标识,若缓存区中的第一缓存区和第二缓存区中未存储该标识对应的参数的值,从状态数据库获取该参数的值,并将该参数的值存入第一缓存区中。

在步骤608中,基于第一缓存区存储的各个参数的值,执行该多个交易。

在步骤610中,对该多个交易的执行结果进行共识。

在步骤612中,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中。

在步骤614中,在属于第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入第二缓存区之后,根据第二缓存区中相对于第一区块存储的各个参数的值,更新状态数据库中的世界状态。

需要说明的是,对于与图2-图5实施例中相同的步骤,在上述图6实施例中不再进行赘述,相关内容可参见图2-图5实施例。

本说明书的上述实施例提供的区块链交易执行方法,获取属于第一区块的多个交易,获取该多个交易各自的第一集合,对于该多个交易各自的第一集合中每个读取的参数的标识,若缓存区中的第一缓存区和第二缓存区中未存储该标识对应的参数的值,从状态数据库获取该参数的值,并将该参数的值存入第一缓存区中。基于第一缓存区存储的各个参数的值,执行该多个交易,对该多个交易的执行结果进行共识,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到第二缓存区中。本实施例在属于第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入第二缓存区之后,及时更新状态数据库中的世界状态,减小了更新数据库导致的时延。

应当注意,尽管在上述的实施例中,以特定顺序描述了本说明书实施例的方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

图7是根据一示例性实施例示出的一种区块链交易执行方法的流程图。该方法由区块链的节点的控制装置、计算装置和存储装置共同执行,可以理解,图中仅示出一个区块链的节点作为示意,并在区块链的节点中只示出一个计算装置作为示意,在实际区块链中,可包括多个区块链的节点,区块链的节点中可以包括多个计算装置,其都执行与图中所示相同的过程。

在步骤702中,控制装置获取多个区块的全部交易以及该全部交易各自的第一集合。

在本实施例中,区块链系统中的每个区块链节点的控制装置,首先可以获取多个区块的全部交易以及该全部交易各自的第一集合。其中,任一交易的第一集合可以包括该交易访问的参数的标识。例如,参数的标识可以是参数的键,也可以是参数的映射编号,还可以是其它任意合理形式的参数的唯一性标识。可以理解,本实施例对参数的标识的具体形式方面不限定。其中,访问的参数可以包括读取的参数和写入的参数。

在一种实现方式中,控制装置获取该多个区块的全部交易后,可以通过预执行每个交易,从而获取每个交易各自的第一集合。或者,也可以读取智能合约中预先记录的每个交易各自的第一集合,等等。

在另一种实现方式中,控制装置接收到该多个区块的多个数据包,并获取该多个区块的全部交易后,可以直接从接收到的上述数据包中获取每个交易各自的第一集合。

在又一种实现方式中,每个交易的预设字段中包括该交易读取的参数的标识和写入的参数的标识。控制装置获取该多个区块的全部交易后,可以直接从每个交易中的预设字段中获取每个交易各自的第一集合。

在步骤704中,对于多个区块的全部交易读取的参数,控制装置从存储装置进行参数值的预取。

具体是,在一种实施方式中,在所述多个区块的前一个区块的世界状态已经存储到存储装置中之后,对于多个区块的全部交易各自的第一集合中每个读取的参数的标识,确定缓存区包括的第一缓存区中是否存储有该标识对应的参数的值,如果没有的话,控制装置向存储装置发送对该参数的读取请求,存储装置在接收到读取请求之后,从状态数据库中读取该参数的值,并将该参数的值发送给控制装置,控制装置在接收该参数的值之后将该参数的键值对存储到第一缓存区中。

在另一种实施方式中,在所述多个区块的前一个区块包括的全部交易的执行结果已经共识结束,并且共识成功的交易的执行结果已经更新到缓存区包括的第二缓存区中之后,对于多个区块的全部交易各自的第一集合中每个读取的参数的标识,确定第一缓存区和第二缓存区中是否存储有该标识对应的参数的值,如果没有的话,控制装置与上一实施方式类似地从存储装置接收该参数的值并存储到第一缓存区中。如果第二缓存区中存储有该标识对应的参数的值,则控制装置将该值存储到第一缓存区中,或者在第一缓存区中进行对该参数的值的引用。

在又一种实施方式中,在所述多个区块的前一个区块包括的全部交易的执行结果已经共识结束,并且共识成功的交易的执行结果已经更新到第二缓存区中之后,控制装置确定全部交易包括的全部读取的参数的标识,从这些全部读取的参数的标识中删除在第二缓存区中存储该标识对应的参数的值的标识,从而获取全部目标标识。从而控制装置可通过至少一次读取请求从存储装置获取将这些全部目标标识对应的参数的值,并将这些目标标识对应的参数的值存储到第一缓存区中。

在本实施例中,控制装置可以首先基于多个区块的全部交易各自的第一集合中每个读取的参数的标识,确定上述全部交易各自读取的参数的值是否存储在缓存区中。接着,控制装置可以基于上述确定的结果,向存储装置发送请求,以请求获取上述全部交易各自读取的参数的值中未存储在缓存区中的参数的值。

在本实施例中,存储装置响应于控制装置发送的请求,从状态数据库中获取上述未存储在缓存区中的参数的值,并将这些参数的值一并返回给控制装置。使得控制装置在处理一个或多个区块的交易的过程中,只需通过一次和存储装置之间的IO操作,减小了执行交易导致的时延。

在本实施例中,控制装置接收到存储装置发送的上述缓存区中未存储的参数的值之后,将上述缓存区中未存储的参数的值存入上述缓存区中的第一缓存区。

在步骤706中,控制装置基于该多个区块的全部交易各自的第一集合,对该全部交易进行分组,以获取多个交易组。

在本实施例中,控制装置可以基于该多个区块的全部交易各自的第一集合,对全部交易进行分组,以获取多个交易组。具体来说,首先,控制装置可以获取该多个区块的全部交易各自的第一集合。

然后,可以根据全部交易各自的第一集合,确定存在访问冲突的多个交易,并基于该确定的结果对全部交易进行分组得到多个交易组,使得存在访问冲突的交易分到同一个交易组,剩下的不存在访问冲突的交易,可以随机分配。每个交易组中包括的交易的数量可以相同也可以不同,并且,每个交易组中包括的交易可以按照交易接收时间的顺序进行排序。

可以理解,还可以按照其它的方式对全部交易进行分组,本实施例对分组的具体方式方面不限定。

在步骤708中,控制装置向计算装置发送第一缓存区存储的各个参数的值及多个交易组。

在步骤710中,计算装置基于第一缓存区中存储的各个参数的值,并行处理多个交易组,对于每个交易组,串行执行该交易组中包括的交易。

在本实施例中,控制装置可以将第一缓存区存储的各个参数的值以及多个交易组一并发送给计算装置。计算装置可以基于接收到的上述各个参数的值,并行处理多个交易组。对于每个交易组,按照交易接收时间顺序串行执行该交易组中包括的交易。

本实施例对多个区块的全部交易进行分组得到多个交易组,并并行执行多个交易组,无需等待一个区块中的交易都执行完成后再执行下个区块的交易,因此,提高了交易执行的效率,降低了由于等待前一个区块中交易的完成而产生的时延。

在步骤712中,计算装置向控制装置发送已执行完成的部分交易的执行结果。

在步骤714中,控制装置对已执行完成的部分交易的执行结果进行共识。

在本实施例中,针对该多个区块中的任意一个区块,在计算装置执行完成该区块中的全部交易之前,可以将已执行完成的部分交易的执行结果发送给控制装置。由控制装置在多个区块链的节点之间,对已执行完成的部分交易进行共识验证,以确定该部分交易中的各个交易是否各自执行成功。

在本实施例中,控制装置可以将对各个交易的共识结果相对于各个交易存入缓存区包括的第三缓存区,区块链中与客户端对接的节点在上述共识之后可以将共识成功的各个交易的执行结果返回给客户端。

本实施例在执行完成一个区块的部分交易时,就对完成的部分交易的执行结果进行共识,无需等待该区块中的全部交易均执行完成,就可以向客户端返回基于共识的结果得到的共识后的收据。因此,降低了由于等待该区块中的全部交易均执行完成而产生的时延。

在步骤716中,控制装置将共识成功的各个交易的执行结果中包括的写入参数的值,相对于该共识成功的各个交易各自所属的区块,存储在上述缓存区中的第二缓存区中。

在本实施例中,在对已执行完成的部分交易的执行结果进行共识之后,控制装置可以利用共识成功的各个交易的执行结果中包括的写入的参数的值,更新上述第二缓存区中的数据。使得第二缓存区中存储的各个参数的值均为最新得到的数值,即该参数最新的状态。

本实施例在部分交易共识成功后,基于共识成功的交易写入的参数的值,及时更新第二缓存区中存储的数据。从而解决了交易数据更新滞后的问题。

在步骤718中,控制装置请求将完成共识的各个交易的数据作为其所属区块的至少部分区块体,存入区块数据库中。

在步骤720中,存储装置将完成共识的各个交易的数据作为其所属区块的至少部分区块体,存入区块数据库中。

在本实施例中,针对该多个区块中的任意一个区块,在对属于该区块的至少部分交易的执行结果完成共识之后,控制装置可以获取该至少部分交易的数据,并向存储装置发送请求,以请求存储装置将该至少部分交易的数据作为该区块的至少部分区块体,存入区块数据库中。存储装置响应于上述请求,将该至少部分交易的数据作为该区块的区块体,存入区块数据库中。其中,任一交易的数据可以至少包括该交易的交易体以及执行结果等数据。还可以将该至少部分交易的共识结果也存储到区块数据库中。

在步骤722中,在该多个区块中的任一区块的全部交易执行并共识完成之后,控制装置生成该区块的区块头,并对该区块进行区块共识。

在本实施例中,针对该多个区块中的任意一个区块,在该区块的全部交易执行并共识完成之后,在控制装置在确定对该区块的前一个区块进行的区块共识成功的情况中,控制装置可以基于前一个区块的哈希值以及属于该区块的全部交易的数据,生成该区块的区块头。并基于该区块头对该区块进行区块共识。

在步骤724中,若对该区块的区块共识成功,控制装置请求将该区块的区块头存入区块数据库中。

在步骤726中,存储装置将该区块的区块头存入区块数据库中。

在步骤728中,控制装置请求更新状态数据库中的世界状态。

在步骤730中,存储装置更新状态数据库中的世界状态。

在本实施例中,在根据第二缓存区中相对于该区块存储的各个参数的值,更新状态数据库中的世界状态之后,可以将第二缓存区中部分用于更新状态数据库的数据删除,以释放部分缓存。例如,当该区块中的全部交易执行完成后,接收到下一个区块的交易,若下一个区块中存在任一交易读取的参数为该区块中任一交易写入的参数时,则可以保留该缓存区存储的该区块中该交易写入的参数的值。而删除该缓存区存储的该区块中其它各个交易各自写入的参数的值,从而释放部分缓存。

本实施例可以先将该部分交易作为区块体,存入区块数据库中,针对多个区块中的任意一个区块,在该区块的前一个区块已经生成,并且该区块的全部交易都执行完成再生成该区块的区块头并将该区块的区块头存入区块数据库中,因此,相比于在区块的全部交易执行完成之后生成区块并存储区块的方案,减少了区块存入区块数据库所需要的时长,有利于降低时延。并且,本实施例采用了缓存区存储并更新各个交易各自写入的参数的值,因此,可以直接利用缓存区中存储的数据更新区块链的状态数据库,并将完成共识的各个交易的数据存入区块数据库中。从而解决了交易数据在数据库中更新滞后的问题。

下面结合一个完整的应用实例,对本说明书一个或多个实施例的方案进行示意性说明。

应用场景可以为:区块链的节点A处理区块101、区块102和区块103中的交易的过程。其中,节点A包括控制装置、计算装置以及存储装置。

具体来说,首先,经过区块链的多个节点的共识之后,区块101、区块102和区块103各自对应的数据包被发送至区块链的各个节点,任一区块对应的数据包中可包括属于该区块的多个交易各自的第一集合,任一交易的第一集合包括该交易读取参数和写入参数的键。其中,区块101对应于交易1~交易6,区块102对应于交易7~交易12,区块103对应于交易13~交易18。节点A的控制装置接收到区块101、区块102和区块103各自对应的数据包,并从区块101对应的数据包中获取交易1~交易6以及各自的第一集合,从区块102对应的数据包中获取交易7~交易12以及各自的第一集合,从区块103对应的数据包中获取交易13~交易18以及各自的第一集合。

接着,一方面,节点A的控制装置基于交易1~交易18各自的第一集合,从缓存区中查找交易1~交易18各自对应的读取参数的值。基于上述查找的结果,确定交易1、交易3以及交易9各自对应的读取参数的值存储于第二缓存区中(例如存储的与区块100对应的写入参数的值),控制装置从第二缓存区中获取这些参数的值并存储到第一缓存区中。交易2、交易4 ~交易8以及交易10~交易18各自对应的读取参数的值未存储于第二缓存区中。节点A的控制装置可通过至少一次读取操作从节点A的存储装置的状态数据库中获取交易2、交易4 ~交易8以及交易10~交易18各自对应的读取参数的值,并将获取到的数据存入第一缓存区中。使得第一缓存区中存储了交易1~交易18各自对应的读取参数的键和值。

另一方面,节点A的控制装置可以利用交易1~交易18各自的第一集合构成参数集合。根据该参数集合,确定交易1~交易3、交易6以及交易7存在访问冲突,交易4、交易5以及交易11~交易13存在访问冲突,剩下的交易8~交易10以及交易14~交易18相互之间均不存在访问冲突。可以将交易1~交易18放在一起进行分组,使得存在访问冲突的多个交易均被分到同一个交易组,剩下的不存在访问冲突的多个交易,可以随机分配。可以得到交易组a,交易组b和交易组c。其中,交易组a包括交易1~交易3、交易6、交易7以及交易16,交易组b包括交易4、交易5、交易11~交易13以及交易17,交易组c包括交易8~交易10、交易14~交易15以及交易18。

然后,节点A的控制装置可以将第一缓存区中存储的交易1~交易18各自对应的读取参数的键和值,以及交易组a,交易组b和交易组c发送至节点A的计算装置。计算装置可以基于交易1~交易18各自对应的读取参数的键和值,并行执行交易组a,交易组b和交易组c。并且,对于任意一个交易组,依次串行执行该交易组中包括的交易。计算装置可以随时将执行完成的交易的结果返回给计算装置。

接着,在执行完成交易1~交易18之前,可以通过区块链的多个节点基于执行完成的交易的结果,对已执行完成的部分交易进行共识,以确定部分交易是否各自执行成功。例如,在执行完成交易组a中所有交易时,可以对交易组a中所有交易进行共识(或者,也可以在执行完成交易组a中的交易1~交易3,对交易1~交易3进行共识),确定交易组a中所有交易是否执行成功。如果节点A为区块链中的记账节点,或和客户端对接的节点,则可以将共识成功的各个交易的执行结果返回给客户端,对于共识失败的交易,向客户端返回执行失败信息。继而,已执行完成的部分交易进行共识之后,例如,在对交易组a中所有交易共识之后,节点A的控制装置获取交易组a中的共识成功的各个交易的执行结果中包括的写入的参数的值,并在第二缓存区中存储交易组a中的共识成功的各个交易的执行结果中包括的写入的参数的值,以对缓存中存储的数据进行更新维护。具体来说,节点A的控制装置可以将共识成功的交易的执行结果中包括的写入的参数的值对应于该交易所属的区块存储在第二缓存区中。其中,对于同一个区块中共识成功的串行执行的多个交易,按照该多个交易的执行顺序依次将各个交易的写入参数的值相对于该区块存储到第二缓存区中,以保证参数状态的正确性。例如,如图8所示,在交易组a中的交易1~交易3都共识成功的情况中,首先将交易1的执行结果中包括的写入的参数key1和key2的值value1和value2对应于交易1所属的区块101存储在第二缓存区中,即存储到图8中的区块101的写集中,之后将交易2中写入的参数值存储到第二缓冲区中区块101的写集中,假设交易2中包括写入的参数key1的值value3,则在区块101的写集中以value3覆盖之前写入key1的值value1(图8中未示出),之后再将交易3中写入的参数的值存储到区块101的写集中。当如此在区块101的写集中存储区块101中的全部共识成功的交易的写入参数的值之后,由于该写集通过在对交易进行小批次共识之后进行存储所获取,从而可直接将该写集中包括的参数值更新到状态数据库中与区块101对应的世界状态中。接着,当区块101中的所有交易(交易1~交易6)均执行完成并共识之后,节点A的控制装置可以将区块101中的所有交易(交易1~交易6)的数据作为区块101的区块体,存入节点A的存储装置的区块数据库中。图9示出区块101的结构示意图。如图9所示,区块101中包括区块头和区块体,所述区块体中包括交易1~交易6各自的数据,其中,每个交易的数据中例如包括交易的交易体以及执行结果等数据。其中,交易1~交易6的交易体可以以交易树的数据结构进行存储,交易1~交易6的收据可以以收据树的数据结构进行存储。

然后,控制装置在确定对区块100进行的区块共识成功的情况中,基于区块100的哈希值以及属于区块101的全部交易的数据,生成如图9所示的区块101的区块头。如图9所示,区块头中包括头哈希、父哈希、交易根、收据根、状态根等数据。其中,头哈希为区块101的区块头中的除头哈希之外的数据的哈希值,父哈希为区块100的头哈希,交易根为区块101中的交易树的根哈希值,收据根为区块101中的收据树的根哈希值,状态根为区块101对应的状态树的根哈希值。其中,控制装置可基于图8中的区块101的写集确定区块101对状态树的更改,从而获取所述更改中的状态树的根哈希值。

之后,控制装置可对区块101进行区块共识,即与多个节点一起验证区块101的头哈希是否一致(或近似一致),如果一致则确定区块共识成功。若对区块101的区块共识成功,则将区块101的区块头存入存储装置的区块数据库中。

节点A的控制装置也可以在对区块101的区块共识成功之后,使用上述获取的区块101对状态树的更改,更新存储装置的状态数据库中的世界状态。在对区块101的区块共识成功之后,控制装置可将图8中的区块101的写集进行删除,从而释放缓存。

以此类推,依次完成区块102以及区块103的所有交易后,依次更新存储装置中的状态数据库以及区块数据库。当相对于区块103更新状态数据库中的世界状态之后,可暂时保留第二缓存区中的与区块103对应的参数的键和值,以用于对下一个区块进行参数预取。

可见,应用上述方案,在执行各个交易时,无需通过IO操作从存储区的状态数据库中获取各个交易各自读取的参数的值,从而减少了区块链的节点的IO操作,达到了减小时延的目的,提高了交易执行的效率,解决了交易数据更新滞后的问题,能够使得缓存区中存储的参数的值更为准确,提高了交易执行的成功率。

与前述区块链交易执行方法实施例相对应,本说明书还提供了区块链的节点的实施例。

如图10所示,图10是本说明书根据一示例性实施例示出的一种区块链的节点,该节点可以包括:第一获取模块1001,执行模块1002,结果共识模块1003和存储模块1004。

其中,第一获取模块1001,用于获取属于第一区块的多个交易。

执行模块1002,用于执行该多个交易。

结果共识模块1003,用于对该多个交易的执行结果进行共识。

存储模块1004,用于将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在一些实施方式中,第一获取模块1001被配置用于:获取属于第一区块的全部交易。

其中,该节点还可以包括:第二获取模块和分组模块(图中未示出)。

其中,第二获取模块,用于获取第一区块的全部交易各自的第一集合,任一交易的第一集合包括该交易读取和写入的参数的标识。

分组模块,用于基于第一区块的全部交易各自的第一集合,将第一区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组。

在另一些实施方式中,存储模块1004被配置用于:按照该多个交易的执行顺序,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在另一些实施方式中,第一获取模块1001被配置用于:获取多个区块的全部交易。

其中,该节点还可以包括:第二获取模块和分组模块(图中未示出)。

其中,第二获取模块,用于获取多个区块的全部交易各自的第一集合,任一交易的第一集合包括该交易读取和写入的参数的标识。

分组模块,用于基于多个区块的全部交易各自的第一集合,将多个区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组。

在另一些实施方式中,存储模块1004被配置用于:按照多个交易的执行顺序,将多个交易中共识成功的各个交易的执行结果中包括的写入参数的值相对于第一区块存储到缓存区中。

在另一些实施方式中,该节点还可以包括:区块体存入模块(图中未示出)。

其中,区块体存入模块,用于在对属于第一区块的至少部分交易的执行结果完成共识之后,将属于第一区块的至少部分交易的数据作为第一区块的至少部分区块体存入区块数据库中。

在另一些实施方式中,该节点还可以包括:区块头存入模块(图中未示出)。

其中,区块头存入模块,用于在第一区块的全部交易执行并共识完成之后,将第一区块的区块头存入所述区块数据库。

在另一些实施方式中,该节点还可以包括:更新模块(图中未示出)。

其中,更新模块,用于在属于第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入第二缓存区之后,根据第二缓存区中相对于第一区块存储的各个参数的值,更新状态数据库中的世界状态。

如图11所示,图11是本说明书根据一示例性实施例示出的区块链的节点的结构框图,该节点可以包括:控制装置1101以及计算装置1102。

其中,控制装置1101,用于获取属于第一区块的多个交易,并将多个交易发送给计算装置1102。以及对多个交易的执行结果进行共识,并将多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

计算装置1102,用于执行多个交易,并将多个交易的执行结果返回给控制装置1101。

如图12所示,图12是本说明书根据一示例性实施例示出的一种用于区块链节点的控制装置的结构框图,该控制装置可以包括:第一获取单元1201,指示单元1202,结果共识单元1203以及存储单元1204。

其中,第一获取单元1201,用于获取属于第一区块的多个交易。

指示单元1202,用于指示区块链节点执行多个交易。

结果共识单元1203,用于对多个交易的执行结果进行共识。

存储单元1204,用于将多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在一些实施方式中,第一获取单元1201被配置用于:获取属于第一区块的全部交易。

其中,该控制装置还可以包括:第二获取单元和分组单元(图中未示出)。

其中,第二获取单元,用于获取第一区块的全部交易各自的第一集合,任一交易的第一集合包括该交易读取和写入的参数的标识。

分组单元,用于基于第一区块的全部交易各自的第一集合,将第一区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组。

在另一些实施方式中,存储单元1204被配置用于:按照该多个交易的执行顺序,将该多个交易中共识成功的各个交易的执行结果中包括的写入参数的值存储到缓存区中。

在另一些实施方式中,第一获取单元1001被配置用于:获取多个区块的全部交易。

其中,该控制装置还可以包括:第二获取单元和分组单元(图中未示出)。

其中,第二获取单元,用于获取多个区块的全部交易各自的第一集合,任一交易的第一集合包括该交易读取和写入的参数的标识。

分组单元,用于基于多个区块的全部交易各自的第一集合,将多个区块的全部交易分组为至少一个交易组,该多个交易属于相同的交易组。

在另一些实施方式中,存储单元1004被配置用于:按照多个交易的执行顺序,将多个交易中共识成功的各个交易的执行结果中包括的写入参数的值相对于第一区块存储到缓存区中。

在另一些实施方式中,该控制装置还可以包括:区块体存入单元(图中未示出)。

其中,区块体存入单元,用于在对属于第一区块的至少部分交易的执行结果完成共识之后,指示区块链节点将属于第一区块的至少部分交易的数据作为第一区块的至少部分区块体存入区块数据库中。

在另一些实施方式中,该控制装置还可以包括:区块头存入单元(图中未示出)。

其中,区块头存入单元,用于在第一区块的全部交易执行并共识完成之后,指示区块链节点将第一区块的区块头存入所述区块数据库。

在另一些实施方式中,该控制装置还可以包括:更新单元(图中未示出)。

其中,更新单元,用于在属于第一区块的全部交易中共识成功的各个交易的执行结果中包括的写入的参数的值都存入第二缓存区之后,指示区块链节点根据第二缓存区中相对于第一区块存储的各个参数的值,更新状态数据库中的世界状态。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书一个或多个实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本说明书一个或多个实施例还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图2至图7任一实施例提供的区块链交易执行方法。

对应于上述的区块链交易执行方法,本说明书一个或多个实施例还提出了图13所示的根据本说明书的一示例性实施例的电子设备的示意结构图。请参考图13,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成区块链交易执行装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

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

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 区块链交易执行方法、区块链节点及控制装置
  • 区块链交易执行方法、区块链节点及控制装置
技术分类

06120112941731