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

一种交易数据处理方法、装置以及可读存储介质

文献发布时间:2023-06-19 19:07:35


一种交易数据处理方法、装置以及可读存储介质

本申请为在2021年09月24日提交中国专利局、申请号为202111125184.0、申请名称为“一种交易数据处理方法、装置以及可读存储介质”的中国专利申请的分案申请,其全部内容通过引用结合在本申请中。

技术领域

本申请涉及区块链技术领域,尤其涉及一种交易数据处理方法、装置以及可读存储介质。

背景技术

随着网络技术的快速发展以及政府和企业对数据安全的重视,区块链得到了更广泛地应用。在传统区块链网络中,区块链网络中的共识节点会定期从交易池获取一批待打包的交易列表,并将获取到的交易列表打包进提案区块,随后将该提案区块广播给区块链网络中的其他共识节点进行共识。

现有技术中,共识节点通常会在共识过程中执行该提案区块所包含的交易列表,执行完成之后,共识节点会对得到的交易执行结果进行投票,在对该提案区块达成共识后,才会将该提案区块以及交易列表对应的交易执行结果一并写入账本,随后共识节点可以从交易池获取另一批交易列表并开始下一轮共识。由此可见,在现有技术中,由于整个共识阶段需要采用串行逻辑,这意味着每一轮共识都要经过提案、预投票、预提交等三个阶段,此外,由于交易的执行和共识过程耦合在一起,这意味着在共识过程中会夹杂着交易的顺序执行,这势必会导致整个共识阶段需要消耗较长的共识时长,进而会导致在共识阶段所占据的系统资源在较长的共识时长内得不到释放,以至于会降低整个区块链的吞吐量。

发明内容

本申请实施例提供了一种交易数据处理方法、装置以及可读存储介质,可以提高区块链的吞吐量。

本申请实施例一方面提供了一种交易数据处理方法,该方法由区块链网络中的第一共识节点执行,包括:

在接收到初始交易时,执行初始交易,得到初始交易对应的初始交易执行记录,将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池;第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;

从第一交易池中获取包含初始交易的交易列表,且将从第一交易执行数据集中获取到的与交易列表中的每个交易对应的初始交易执行记录作为与交易列表相关联的待处理交易数据;

对交易列表以及待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块,对提案区块进行区块共识,得到提案区块的区块共识结果。

本申请实施例一方面提供了一种交易数据处理方法,该方法由区块链网络中的第二共识节点执行,包括:

接收由区块链网络中的第一共识节点所广播的提案区块;提案区块是由第一共识节点对交易列表以及与交易列表相关联的待处理交易数据进行打包处理得到的;交易列表是指由第一共识节点从第一共识节点的第一交易池中获取到的包含初始交易的列表;待处理交易数据包括第一交易执行数据集中与交易列表中的每个交易对应的初始交易执行记录;第一交易执行数据集与第一交易池相关联,第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;初始交易对应的初始交易执行记录被第一共识节点添加至第一交易执行数据集,初始交易对应的初始交易执行记录是由第一共识节点在接收到初始交易时执行初始交易得到的;

基于冲突检测策略对提案区块冲突检测,得到提案区块的第二共识结果,将第二共识结果返回至第一共识节点。

本申请实施例一方面提供了一种交易数据处理装置,包括:

执行添加模块,用于在接收到初始交易时,执行初始交易,得到初始交易对应的初始交易执行记录,将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池;第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;

数据获取模块,用于从第一交易池中获取包含初始交易的交易列表,且将从第一交易执行数据集中获取到的与交易列表中的每个交易对应的初始交易执行记录作为与交易列表相关联的待处理交易数据;

打包共识模块,用于对交易列表以及待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块,对提案区块进行区块共识,得到提案区块的区块共识结果。

其中,该执行添加模块包括:

数据读取单元,用于在接收到初始交易时,获取用于执行初始交易的初始业务合约,基于初始业务合约,调用第一共识节点对应的虚拟机从区块链网络中读取初始交易对应的初始读数据集;

交易执行单元,用于基于初始读数据集,调用虚拟机执行初始交易,得到初始交易对应的初始交易执行结果,将初始交易执行结果写入初始交易对应的初始写数据集,将初始读数据集以及初始写数据集作为初始交易对应的初始交易读写集;

高度获取单元,用于将执行初始交易时从区块链网络中获取到的具有初始最大生成时间戳的区块作为第一目标区块,将第一目标区块的区块高度作为初始区块高度;

记录确定单元,用于将初始交易执行结果、初始交易读写集以及初始区块高度作为初始交易对应的初始交易执行记录。

其中,该打包共识模块包括:

哈希运算单元,用于将交易列表中的交易作为待验证交易,对待验证交易和待处理交易数据进行哈希运算,得到与待验证交易相关联的交易哈希值,基于交易哈希值确定待验证交易对应的默克尔树根;

区块生成单元,用于从区块链网络中获取具有目标最大生成时间戳的区块作为第二目标区块,将第二目标区块的区块哈希值作为第二目标区块的下一区块的父区块哈希值,基于待验证交易、待处理交易数据、默克尔树根以及父区块哈希值,生成第二目标区块的下一区块,将第二目标区块的下一区块作为待与区块链网络中的第二共识节点进行区块共识的提案区块。

其中,该打包共识模块包括:

冲突检测单元,用于基于冲突检测策略对提案区块进行冲突检测,得到第一共识结果;

区块广播单元,用于将提案区块广播至第二共识节点,以使第二共识节点基于冲突检测策略对提案区块进行冲突检测,得到第二共识结果;

共识确定单元,用于接收第二共识节点所返回的第二共识结果,将第一共识结果和第二共识结果作为提案区块的区块共识结果;

其中,该装置还包括:

区块添加模块,用于若区块共识结果指示共识成功,则确定达成对提案区块的共识,将共识达成后的提案区块作为第三目标区块写入区块链网络对应的区块链;

版本更新模块,用于对与交易列表相关联的交易对象所对应的账户状态版本号进行更新。

其中,该装置还包括:

有效检验模块,用于对初始交易进行有效性校验,得到有效性校验结果;若有效性校验结果指示交易有效,则确定初始交易通过有效性校验,将通过有效性校验的初始交易广播至第二共识节点,以使第二共识节点执行通过有效性校验的初始交易。

其中,该有效检验模块包括:

签名验证单元,用于获取初始交易的交易签名信息以及发送初始交易的终端设备的设备公钥,基于设备公钥对交易签名信息进行交易签名验证,得到交易验签结果;交易签名信息为终端设备通过设备公钥对应的设备私钥对初始交易进行签名后所得到的;

双花验证单元,用于对初始交易进行双重花费验证,得到双花验证结果;

结果确定单元,用于将交易验签结果以及双花验证结果作为初始交易对应的有效性校验结果;当交易验签结果指示验签成功且双花验证结果指示不存在双花攻击时,确定有效性校验结果指示交易有效。

本申请实施例一方面提供了一种交易数据处理装置,包括:

接收模块,用于接收由区块链网络中的第一共识节点所广播的提案区块;提案区块是由第一共识节点对交易列表以及与交易列表相关联的待处理交易数据进行打包处理得到的;交易列表是指由第一共识节点从第一共识节点的第一交易池中获取到的包含初始交易的列表;待处理交易数据包括第一交易执行数据集中与交易列表中的每个交易对应的初始交易执行记录;第一交易执行数据集与第一交易池相关联,第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;初始交易对应的初始交易执行记录被第一共识节点添加至第一交易执行数据集,初始交易对应的初始交易执行记录是由第一共识节点在接收到初始交易时执行初始交易得到的;

检测模块,用于基于冲突检测策略对提案区块冲突检测,得到提案区块的第二共识结果,将第二共识结果返回至第一共识节点。

其中,该检测模块包括:

数据获取单元,用于将交易列表中的交易作为待验证交易,将从第二交易执行数据集中获取到的与待验证交易对应的本地交易执行记录作为与待验证交易相关联的本地交易数据;第二交易执行数据集与第二共识节点的第二交易池相关联;第二交易执行数据集用于记录第二共识节点所接收到的每个交易对应的本地交易记录;待验证交易对应的本地交易执行记录是由第二共识节点执行待验证交易所得到的;

本地校验单元,用于基于本地交易数据,对提案区块中的待处理交易数据进行本地校验,得到本地校验结果;基于本地校验结果确定提案区块对应的第二共识结果。

其中,待处理交易数据包括待验证交易对应的目标交易执行结果、目标交易读写集以及第一区块高度;第一区块高度是第一共识节点在执行待验证交易时从区块链网络中所获取到的具有第一最大生成时间戳的第一区块的区块高度;本地交易数据包括待验证交易对应的本地交易执行结果、本地交易读写集以及第二区块高度;第二区块高度是第二共识节点在执行待验证交易时从区块链网络中所获取到的具有第二最大生成时间戳的第二区块的区块高度;

该本地校验单元,包括:

第一比对子单元,用于将目标交易执行结果与本地交易执行结果进行比对,得到第一比对结果;

第二比对子单元,用于若第一比对结果指示目标交易执行结果与本地交易执行结果相同,则将第一区块高度与第二区块高度进行比对,得到第二比对结果;

结果确定子单元,用于基于第二比对结果确定提案区块对应的本地校验结果。

其中,第一最大生成时间戳与第二最大生成时间戳相同;

该结果确定子单元,具体用于当第二比对结果指示第一区块高度与第二区块高度相同时,将目标交易读写集与本地交易读写集进行比对,得到第三比对结果;基于第三比对结果确定提案区块对应的本地校验结果。

其中,第一最大生成时间戳不同于第二最大生成时间戳;目标交易读写集包括第一账户状态版本号,第一账户状态版本号是指第一共识节点在执行待验证交易时从区块链网络中所获取到的与待验证交易相关联且具有第一最大更新时间戳的账户状态版本号;本地交易读写集包括第二账户状态版本号,第二账户状态版本号是指第二共识节点在执行待验证交易时从区块链网络中所获取到的与待验证交易相关联且具有第二最大更新时间戳的账户状态版本号;

该结果确定子单元,具体用于当第二比对结果指示第一区块高度与第二区块高度不相同时,将第一账户状态版本号与第二账户状态版本号进行比对,得到第四比对结果;若第四比对结果指示第一账户状态版本号与第二账户状态版本号不相同,则从区块链网络中获取与待验证交易相关联且具有第三最大更新时间戳的第三账户状态版本号,将第一账户状态版本号与第三账户状态版本号进行比对,得到第五比对结果;若第五比对结果指示第三账户状态版本号低于第一账户状态版本号,则重新执行待验证交易,得到更新交易执行结果,将目标交易执行结果与更新交易执行结果进行比对,得到第六比对结果;基于第六比对结果确定提案区块对应的本地校验结果。

其中,该检测模块包括:

关联校验单元,用于对交易列表进行关联性校验,得到关联性校验结果;基于关联性校验结果,从交易列表中获取至少两个具有关联关系的关联交易,从待处理交易数据中获取至少两个关联交易分别对应的交易读写集;

读写检测单元,用于基于至少两个关联交易分别对应的交易执行顺序,对每个交易读写集进行读写集冲突检测,得到读写集冲突检测结果;基于读写集冲突检测结果确定提案区块对应的第二共识结果。

本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;

处理器与存储器相连,其中,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本申请实施例提供的方法。

本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例提供的方法。

本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例提供的方法。

在本申请实施例中,当区块链网络中的第一共识节点接收到初始交易时,可以先执行该初始交易,得到该初始交易对应的初始交易执行记录,进而可以将该初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,同时可以将该初始交易添加至第一交易池,进而第一共识节点可以从第一交易池获取包含初始交易的交易列表,且可以从第一交易执行数据集中获取与交易列表中的每个交易对应的初始交易执行记录,即获取与交易列表相关联的待处理交易数据,进而可以对交易列表和待处理交易数据进行打包处理,得到提案区块,随后可以将提案区块广播至区块链网络中的第二共识节点,以使第二共识节点与第一共识节点分别对提案区块进行区块共识,最终得到提案区块的区块共识结果。由此可知,在本申请实施例中,对于区块链网络中的每一个共识节点,每次接收到交易时,均可以先执行该交易,且交易的接收和执行均可采用并行逻辑,交易执行结束后才将该交易加入交易池,同时将相应的交易执行记录加入到与该交易池相关联的交易执行数据集,后续再由第一共识节点将待打包的交易和对应的交易执行记录一并打包成区块进行共识,也就是说,本申请实施例将交易执行过程提前到将交易加入交易池之前,解耦了交易执行和共识过程,这样可以减少共识过程所消耗的共识时长,从而不会在共识阶段长期占据系统资源,同时可以充分利用共识节点对交易并发接收和并发执行的特性提高系统资源的利用率,从而提高区块链的吞吐量。

附图说明

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

图1是本申请实施例提供的一种区块链节点系统的结构示意图;

图2是本申请实施例提供的一种交易数据处理的场景示意图;

图3是本申请实施例提供的一种交易数据处理方法的流程示意图;

图4是本申请实施例提供的一种生成提案区块的场景示意图;

图5是本申请实施例提供的一种交易数据处理方法的流程示意图;

图6是本申请实施例提供的一种交易数据处理方法的流程示意图;

图7是本申请实施例提供的一种区块链交易过程的交互示意图;

图8是本申请实施例提供的一种交易数据处理装置的结构示意图;

图9是本申请实施例提供的一种交易数据处理装置的结构示意图;

图10是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

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

请参见图1,图1是本申请实施例提供的一种区块链节点系统的结构示意图。区块链是一种分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。区块链本质上是一个去中心化的数据库,该数据库中的每个节点均存储一条相同的区块链,区块链网络中包括共识节点,共识节点负责区块链全网的共识。

可以理解的是,区块(Block)是在区块链网络上承载交易数据(即交易业务)的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过网络的共识机制验证并确定区块中的交易。

可以理解的是,区块链系统中可以包括有智能合约,该智能合约可以是指一种区块链各节点(包括共识节点)可以理解并执行的代码,可以执行任意逻辑并得到结果。应当理解,区块链中可以包括一个或多个智能合约,这些智能合约可以通过标识号(Identitydocument,ID)或名称来进行区分,而交易业务请求中可以携带智能合约的标识号或名称,以此指定区块链需要运行的智能合约。

如图1所示的区块链节点系统可以对应于区块链网络,该区块链网络可以包括但不限于联盟链所对应的区块链网络。区块链节点系统是指用于进行区块链节点与区块链节点之间数据共享的系统,该区块链节点系统中可以包括多个节点,多个节点具体可以包括节点10a、节点10b、节点10c、节点10d、…、节点10n,这里的节点10a、节点10b、节点10c、节点10d、…、节点10n可以统称为区块链节点。可以理解的是,区块链节点可以为接入区块链网络中的服务器,也可以为接入区块链网络中的终端设备,这里对区块链节点的具体形式不做限定。

其中,每个节点在进行正常工作时可以接收到外界发送的数据,并基于接收到的数据进行区块上链处理,也可以向外界发送数据。为了保证各个节点之间的数据互通,每个节点之间可以存在数据连接,例如节点10a和节点10b之间存在数据连接,节点10a和节点10c之间存在数据连接,节点10b和节点10c之间存在数据连接。

可以理解的是,上述的数据连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其他连接方式,本申请在此不做限制。

可以理解的是,节点之间可以通过上述数据连接进行数据或者区块传输。区块链网络可以基于节点标识实现节点之间的数据连接,对于区块链网络中的每个节点,均具有与其对应的节点标识,而且上述每个节点均可以存储与自身有相连关系的其他节点的节点标识,以便后续根据其他节点的节点标识,将获取到的数据或生成的区块广播至其他节点,例如节点10a中可以维护一个如表1所示的节点标识列表,该节点标识列表保存着其他节点的节点名称和节点标识:

表1

其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任意一种能够用于标识区块链网络中节点的信息,表1中仅以IP地址为例进行说明。例如,节点10a可以通过节点标识117.116.189.145向节点10b发送信息(例如,区块),且节点10b可以通过节点标识117.114.151.174确定该信息是由节点10a所发送的。

需要说明的是,本申请实施例中的区块链网络可以是分层结构,也可以是单层结构,本申请对区块链网络的具体结构不进行限定。

可选的,对于具有分层结构的区块链网络,图1所示的区块链节点系统可以包括第一区块链系统、第二区块链系统以及代理节点(也可称为路由节点),其中,第一区块链系统和第二区块链系统均可以包括一个或者多个节点,这里将不对节点的数量进行限制。例如,第一区块链系统可以包括节点10a、节点10b,第二区块链系统可以包括节点10c、节点10d,代理节点可以为节点10n。其中,第一区块链系统对应的区块链网络可以称之为业务网络(即见证网络),处于业务网络中的节点可以称之为业务节点,该业务节点主要用于执行交易业务,以得到与该交易业务相关联的交易数据。可以理解的是,这里的业务节点不需要参与记账共识,但能够通过身份认证的方式从核心共识网络中获得区块头数据和部分授权可见的区块数据。第二区块链系统对应的区块链网络可以为称之为核心共识网络。处于该核心共识网络中的节点可以称之为共识节点(即记账节点),该共识节点可以运行有区块链共识协议。代理节点可以用于对上述业务网络和核心共识网络进行网络隔离,该代理节点可以将点对点(Peer To Peer,简称P2P)网络进行网络分层,以形成“业务网络—核心共识网络”这样的分层结构,进而能够提高区块链上数据的保密性和安全性。

可选的,对于具有单层结构的区块链网络,图1所示的区块链节点系统可以包括共识节点和非共识节点,共识节点参与共识,而非共识节点不参与共识,但可以帮助传播区块和投票消息,以及相互同步状态等。例如,可以将图1中的节点10a、节点10b、节点10c以及节点10d作为共识节点,其余节点则作为非共识节点。

可以理解的是,本申请实施例所提供的交易数据处理方法可以由计算机设备执行,计算机设备包括但不限于上述共识节点(可以为终端设备或服务器)。上述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。上述终端设备可以是智能手机、平板电脑、笔记本电脑、掌上电脑、智能音响、移动互联网设备(MID,mobile internet device)、POS(Point Of Sales,销售点)机、可穿戴设备(例如智能手表、智能手环等)等。

应当理解,在区块链中,在将一个区块(可称为提案区块、提议区块或待上链区块)进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于政府或者商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链节点系统中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链节点系统中,可以将节点10a、节点10b、节点10c和节点10d作为该区块链节点系统中的共识节点。区块链节点系统中的共识节点参与共识,也就是对区块(包含一批交易)进行共识,包括生成提案区块,对提案区块进行投票;而非共识节点不参与共识,但会帮助传播区块和投票消息,以及相互同步状态等。

为便于理解,在图1所示的区块链节点系统中,本申请实施例可以将用于打包生成提案区块的共识节点作为第一共识节点(也可称为打包节点、提议节点),第一共识节点可以向区块链网络中的其他共识节点广播提案区块,且本申请实施例可以将用于对提案区块进行区块共识的其他共识节点作为第二共识节点。需要说明的是,提议节点也属于共识节点,也需要对提案区块进行区块共识。例如,第一共识节点可以为图1所示的区块链节点系统中的节点10a,第二共识节点可以为图1所示的区块链节点系统中的节点10b、节点10c和节点10d。此外,第一共识节点和第二共识节点均可以执行接收到的交易,且每个共识节点都有自己的交易池,以用于添加待打包的交易,每个交易池还与一个交易执行数据集相关联,交易执行数据集可用于记录相应的共识节点所接收到的每个交易对应的交易执行记录,其中,交易执行数据集和交易池可以位于单独的存储区域,也可以位于相同的存储区域,本申请实施例对此不进行限定,例如,可选的,交易执行数据集可以位于与其相关联的交易池中。为便于区分,在本申请实施例中,可以将第一共识节点的交易池称为第一交易池,将与第一交易池相关联的交易执行数据集称为第一交易执行数据集,且可以将第二共识节点的交易池称为第二交易池,将与第二交易池相关联的交易执行数据集称为第二交易执行数据集。

可以理解的是,在本申请实施例中,第一共识节点接收到初始交易时,可以先执行该初始交易,得到该初始交易对应的初始交易执行记录,进而可以将该初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,同时可以将该初始交易添加至第一交易池,进而第一共识节点可以从第一交易池获取包含初始交易的交易列表,且可以从第一交易执行数据集中获取与交易列表中的每个交易对应的初始交易执行记录,即获取与交易列表相关联的待处理交易数据,进而可以对交易列表和待处理交易数据进行打包处理,得到提案区块,随后可以将提案区块广播至第二共识节点,以使第二共识节点与第一共识节点分别对提案区块进行区块共识,最终得到提案区块的区块共识结果。由此可知,本申请实施例将交易执行过程提前到将交易加入交易池之前,解耦了交易执行和共识过程,这样可以减少共识过程所消耗的共识时长,从而不会在共识阶段长期占据系统资源,同时可以充分利用共识节点对交易并发接收和并发执行的特性提高系统资源的利用率,由此可以提升出块效率,从而提高区块链的吞吐量。

为便于理解,进一步地,请参见图2,图2是本申请实施例提供的一种交易数据处理的场景示意图。如图2所示,本申请实施例中的共识节点20A可以为区块链网络中用于对交易列表以及待处理交易数据进行打包处理的共识节点(即第一共识节点),该共识节点20A可以为上述图1所示的区块链节点系统中的任意一个共识节点,例如,节点10a。本申请实施例中的共识节点20B可以为区块链网络中待与第一共识节点进行区块共识的共识节点(即第二共识节点),例如,该共识节点20B可以为上述图1所示的区块链节点系统中的节点10b。

应当理解,在本申请实施例中,区块链网络中的共识节点在将收到的交易加入交易池之前,可以先执行该交易,并保存该交易对应的交易执行记录,后续可以将该交易以及该交易对应的交易执行记录打包进提案区块进行共识。其中,交易也可称为交易请求、用户请求,可以由终端设备上的应用客户端发起,用于指示用户期望执行的交易业务,例如,这里的交易业务可以为资产转移业务,其中,资产转移业务可以用于转移游戏金币、游戏钻石、电子票据等虚拟资产,这里将不对虚拟资产的类型进行限定。

为便于理解和区分,本申请实施例可以将第一共识节点接收的任意一个交易称为初始交易,例如,可以将在一个打包周期内接收到的最后一个交易作为初始交易,第一共识节点执行完该初始交易后,可以立即开始对相关数据进行打包处理。其中,打包周期是指相邻两次打包处理之间的时长,例如,可以将打包周期设置为10秒,则第一共识节点会每10秒就进行一次打包处理。本申请实施例对打包周期的具体时长不进行限定。

如图2所示,共识节点20A可以持续且并发地接收应用客户端发送的交易,在成功接收后,共识节点20A可以预先执行这些交易,得到这些交易分别对应的初始交易执行记录。以初始交易为交易200a为例进行说明,共识节点20A接收到交易200a后,可以对交易200a进行有效性校验,得到有效性校验结果,在有效性校验结果指示交易有效,即交易200a通过有效性校验时,共识节点20A可以将交易200a广播至第二共识节点(例如,共识节点20B),以使第二共识节点执行交易200a。同时,共识节点20A可以调用虚拟机按照当前账本状态(例如,剩余资产量,即账户余额)执行交易200a,从而得到交易200a对应的交易执行记录201a(即初始交易对应的初始交易执行记录),进而可以将交易200a添加至共识节点20A的交易池200(即第一交易池),将交易执行记录201a添加至与交易池200相关联的交易执行数据集201(即第一交易执行数据集)。其中,第一交易执行数据集可用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录。可选的,每个交易对应的初始交易执行记录均可以包括该交易对应的交易执行结果、交易读写集以及执行该交易时账本最新的区块高度(即第一共识节点所在区块链网络对应的区块链上具有最大生成时间戳的区块对应的区块高度)。

同理,对于共识节点20A接收到的其它交易,例如,交易200b、交易200c、…、交易200n,其处理过程与对交易200a的处理过程一致,最终共识节点20A可以生成并保存每个交易对应的初始交易执行记录。应当理解,共识节点20B也可以对接收到的所有交易进行预先执行,其处理过程与共识节点20A对交易200a的处理过程类似,这里不再进行赘述。需要说明的是,在本申请实施例中,每个共识节点均可以并发接收多个交易,也可以并发执行多个交易,因此可以提高CPU(central processing unit,中央处理器)计算资源和I/O(input/output,输入/输出)资源的利用率。

如图2所示,假设共识节点20A执行交易200b后得到交易执行记录201b,执行交易200c后得到交易执行记录201c,…,执行交易200n后得到交易执行记录201n,则当前交易池200中存在有交易200a、交易200b、交易200c、…、交易200n,交易执行数据集201中存在有交易执行记录201a、交易执行记录201b、交易执行记录201c、…、交易执行记录201n。应当理解,共识节点20A可以根据相关的打包策略(例如,基于交易时间优先的策略或交易手续费优先的策略)定期地从交易池200获取一批待打包的交易列表,例如,可以从交易池200中获取交易200a、交易200b以及交易200c作为待打包的交易列表202,相应的,可以从交易执行数据集201中获取与交易列表202中的每个交易(即交易200a、交易200b、交易200c)对应的初始交易执行记录作为与交易列表202相关联的待处理交易数据203,此时待处理交易数据203具体包括交易执行记录201a、交易执行记录201b以及交易执行记录201c。

进一步,共识节点20A可以对交易列表202和待处理交易数据203进行打包处理,得到待与第二共识节点(例如,共识节点20B)进行区块共识的提案区块204,进而可以将提案区块204广播至共识节点20B,随后共识节点20A和共识节点20B可以共同对提案区块204进行区块共识,最终得到提案区块204的区块共识结果。其中,每个接收到提案区块204的共识节点可以基于冲突检测策略对提案区块204进行冲突检测并投票,进而可以基于每个共识节点的投票结果得到最终的区块共识结果。当区块共识结果指示共识成功时,共识节点20A可以将共识达成后的提案区块204写入共识节点20A所在区块链网络对应的区块链。其中,提案区块204可以包括区块头信息以及区块主体,区块头信息可以包括该提案区块204的父区块哈希值、区块高度、版本号、时间戳、难度值、随机数以及默克尔树根等信息。该区块主体可以包括打包至提案区块204的交易列表202中的交易、待处理交易数据203中的交易执行记录以及由该交易和该交易执行记录对应的交易哈希值所构成的默克尔路径。

上述可知,在本申请实施例中,对于区块链网络中的每一个共识节点,每次接收到交易时,均可以先执行该交易,且交易的接收和执行均可采用并行逻辑,交易执行结束后才将该交易加入交易池,同时将相应的交易执行记录加入到与该交易池相关联的交易执行数据集,后续再由第一共识节点将待打包的交易和对应的交易执行记录一并打包成区块进行共识,也就是说,本申请实施例将交易执行过程提前到将交易加入交易池之前,解耦了交易执行和共识过程,这样可以减少共识过程所消耗的共识时长,从而不会在共识阶段长期占据系统资源,同时可以充分利用共识节点对交易并发接收和并发执行的特性提高系统资源的利用率,并提高共识节点的出块效率,最终提高区块链的吞吐量。

进一步地,请参见图3,图3是本申请实施例提供的一种交易数据处理方法的流程示意图。如图3所示,该方法可以由区块链网络中的第一共识节点执行,该第一共识节点可以为接入至区块链网络中的服务器,也可以为接入至该区块链网络中的终端设备,这里对第一共识节点的具体形式不做限定。该第一共识节点可以为上述图1所示的区块链节点系统中的任意一个共识节点,例如,节点10a。该方法至少可以包括以下步骤S101-步骤S103:

步骤S101,在接收到初始交易时,执行初始交易,得到初始交易对应的初始交易执行记录,将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池;

具体的,第一共识节点在接收到初始交易时,可以获取用于执行该初始交易的初始业务合约,进而可以调用该初始业务合约执行该初始交易,从而得到该初始交易对应的初始交易执行结果,还可以获取交易执行后得到的初始交易读写集以及执行该初始交易时在区块链网络中获取到的具有最大生成时间戳的区块对应的区块高度(即初始区块高度),随后可以将该初始交易对应的初始交易执行结果、初始交易读写集以及初始区块高度作为该初始交易对应的初始交易执行记录。其中,初始业务合约为部署在区块链网络中的智能合约,可用于执行初始交易。

应当理解,初始交易是由终端设备上的应用客户端发起的交易请求,这里的应用客户端可以为直播应用、社交应用、即时通信应用、游戏应用、短视频应用、视频应用、音乐应用、购物应用、小说应用、支付应用等具有交易功能的客户端。可选的,当第一共识节点所在的区块链网络具有单层结构时,终端设备可以直接将初始交易发送至该区块链网络,该区块链网络中的节点接收到该初始交易后可以互相广播,最终该区块链网络中的所有共识节点(包括第一共识节点)均可以接收到该初始交易,因此,第一共识节点接收到的初始交易可能是由终端设备直接发送的,也可能是由其他节点广播的。可选的,当第一共识节点所在的区块链网络具有分层结构时,可以将该区块链网络划分为业务网络和核心共识网络,可选的,该区块链网络还可以包括路由网络(或称为代理网络),用于对业务网络和核心共识网络进行网络隔离。应当理解,发起初始交易的终端设备可以作为业务网络中的某个业务节点,或者,也可以作为独立于该区块链网络的终端,本申请实施例对此不做限定。因此,业务节点可以将初始交易直接发送至核心共识网络,或者,业务节点可以先将初始交易发送至路由网络中的路由节点,然后再通过路由节点将该初始交易转发至核心共识网络。核心共识网络中的共识节点接收到该初始交易后可以互相广播,最终该核心共识网络中的所有共识节点(包括第一共识节点)均可以接收到该初始交易。本申请实施例对区块链网络的具体结构不进行限定。

应当理解,第一共识节点获取到用于执行初始交易的初始业务合约后,可以基于初始业务合约,调用第一共识节点对应的虚拟机从区块链网络中读取初始交易对应的初始读数据集,进而可以基于初始读数据集,调用虚拟机执行初始交易,从而得到初始交易对应的初始交易执行结果,随后可以将初始交易执行结果写入初始交易对应的初始写数据集,进而可以将初始读数据集以及初始写数据集作为初始交易对应的初始交易读写集。其中,初始读数据集可以存储在第一共识节点的存储层中,应当理解,区块链网络中的每个节点的存储层均可以包括本地缓存和本地存储,本地缓存的读写速度相对较快,因此区块链节点可以优先在本地缓存中进行读/写操作,这样可以提高区块链网络的整体性能;而本地存储用于数据(例如区块)的持久化存储,区块链节点可以先将需要存储的数据写入对应的本地缓存中,但考虑到本地缓存的局限性(例如掉电会导致数据丢失),后续可以通过异步写操作逐渐将相关数据写入本地存储(例如,本地数据库),以最终保障数据的可靠性和持久化。因此,第一共识节点可以先基于初始业务合约,调用第一共识节点对应的虚拟机从第一共识节点的本地缓存中读取该初始交易对应的初始读数据集,若在第一共识节点的本地缓存中读取失败,则可以进一步尝试从第一共识节点的本地存储中读取该初始交易对应的初始读数据集。

进一步,第一共识节点可以基于获取到的初始读数据集,调用第一共识节点对应的虚拟机执行初始交易,得到初始交易对应的初始交易执行结果,进而可以将初始交易执行结果写入初始交易对应的初始写数据集,最终可以将该初始读数据集以及该初始写数据集作为初始交易对应的初始交易读写集。其中,第一共识节点可以预先创建一个空的初始写数据集,在执行初始交易得到对应的初始交易执行结果时,再将该初始交易执行结果写入初始写数据集。应当理解,初始写数据集也可以与初始读数据集关联存储在第一共识节点的存储层中。可选的,基于第一共识节点的本地缓存可以为第一共识节点接收到的每个交易创建对应的交易读缓存和交易写缓存,一个交易对应一个交易写缓存和一个交易读缓存,也就是说,第一共识节点可以从初始交易对应的交易读缓存中获取该初始交易对应的初始读数据集,然后可以将执行该初始交易所得到的初始交易执行结果添加至该初始交易对应的交易写缓存,基于该交易写缓存中所存储的数据构建得到初始交易对应的初始写数据集。

此外,在执行上述初始交易时,第一共识节点可以将从区块链网络中获取到的具有初始最大生成时间戳的区块作为第一目标区块,将第一目标区块的区块高度作为初始区块高度,也就是说,第一共识节点可以将初始交易执行时所读取到的账本最新的区块高度作为初始区块高度。这里的第一目标区块特指第一共识节点执行初始交易时从第一共识节点的本地缓存中读取到的具有最大生成时间戳的区块,为了便于后续区分,可以将该最大生成时间戳称为初始最大生成时间戳。

应当理解,区块高度是区块的标示符,用来丈量区块链中某一个区块到第一个区块之间的距离,通过区块高度可以准确地了解到某一区块在链上的位置,相当于给区块定位了一个坐标。例如,假设第一共识节点存储的区块链中有五个区块,第一个区块的区块高度为0,第二个区块的区块高度为1……依此类推,第五个区块的区块高度为4,由于此时该区块链中具有初始最大生成时间戳的区块为第五个区块,因此,第五个区块即为第一目标区块,相应的,当前最新的区块高度(即初始区块高度)为4。

可选的,特殊情况下区块链可能会出现分叉,则第一共识节点可以选取具有最长分支的区块链作为有效的区块链,数据的读取(例如,获取初始区块高度)还是在有效的区块链上进行。

需要说明的是,在需要读取数据时,虽然区块链网络中的每个共识节点均可以从共同维护的区块链(或账本)上获取到相应的数据,例如交易执行结果、读数据集、区块等,但由于数据的广播容易受到网络传输延迟的影响,因此每个共识节点的存储层的数据更新(例如,新区块的添加)会存在时间差,也就是说,先进的、计算能力强、传输延迟小的共识节点,其数据更新速度快,因此该节点的存储层中的数据相对较新;而落后的、计算能力弱、传输延迟大的共识节点,其数据更新速度慢,因此该节点的存储层中的数据相对较旧。由此可知,不同的共识节点执行同一个交易时,从对应的存储层中所获取到的最新的区块高度也可能是不一致的。例如,对于共识节点1,在执行交易A时,共识节点1从其本地缓存中读取到的最新区块高度为4,对于共识节点2,在执行交易A时,共识节点2从其本地缓存中读取到的最新区块高度为3,可以看出此时共识节点2的区块更新落后于共识节点1。

进一步,第一共识节点可以将初始交易对应的初始交易执行结果、初始交易读写集以及初始区块高度作为初始交易对应的初始交易执行记录,随后可以将该初始交易对应的初始交易执行记录添加至第一交易执行数据集,且将该初始交易添加至第一共识节点的第一交易池。可选的,也可以将初始交易执行结果、初始交易读写集、初始区块高度中的任意一个或多个数据作为初始交易对应的初始交易执行记录。其中,第一交易执行数据集与第一交易池相关联,第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录。例如,可以再次参见图2,如图2所示,若将交易200a作为初始交易,则共识节点20A执行交易200a后得到的交易执行记录201a将作为初始交易对应的初始交易执行记录,该交易执行记录201a可以包括交易200a对应的初始交易执行结果、初始交易读写集以及初始区块高度,同理,共识节点20A执行接收到的其它交易(例如,交易200b、交易200c、交易200n等)后也可得到相应的交易执行记录(例如,交易执行记录201b、交易执行记录201c、交易执行记录201n)。

应当理解,本申请实施例仅以初始交易的执行为例进行说明,第一共识节点还可以接收其他的交易,对于这些交易的处理过程与对初始交易的处理过程一致,这里不再进行赘述。其中,第一共识节点可以并发接收多个交易,也可以并发执行多个交易,需要说明的是,除了第一共识节点外,区块链网络中的其他共识节点(如第二共识节点)同样可以并发接收和并发执行多个交易,因此,通过充分利用交易并发接收处理逻辑,可以提高CPU计算资源和I/O资源的利用率,从而提高系统资源的整体利用率。

步骤S102,从第一交易池中获取包含初始交易的交易列表,且将从第一交易执行数据集中获取到的与交易列表中的每个交易对应的初始交易执行记录作为与交易列表相关联的待处理交易数据;

具体的,除了初始交易之外,第一交易池中还可以包含其他待打包的交易,因此,第一共识节点可以从第一交易池获取待打包的交易列表,其中,该交易列表中可以包括一个或多个交易,本申请实施例对交易列表所包含的具体交易数量不做限定。可选的,该交易列表可以包括初始交易。同时,第一共识节点还可以从第一交易执行数据集中获取与该交易列表中的每个交易对应的初始交易执行记录,并可将这些初始交易执行记录作为与交易列表相关联的待处理交易数据。

应当理解,由于一个区块所能包含的交易容量有限,因此,当第一交易池中的待打包交易数量过多,导致一个区块打包不完时,第一共识节点可以基于配置的打包策略从第一交易池获取交易列表。其中,打包策略可以为基于交易时间优先的策略,即根据每个交易对应的交易时间戳进行排序,交易时间戳小的交易被优先打包进区块;可选的,打包策略可以为基于交易手续费优先的策略,即根据每个交易所支付的手续费进行排序,手续费高的交易被优先打包进区块;可选的,还可以综合交易时间和交易手续费进行排序,综合排名靠前的交易被优先打包进区块。当然,还可以采用其他打包策略来进行打包处理,本申请实施例对采用的打包策略的具体内容不做限定。

步骤S103,对交易列表以及待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块,对提案区块进行区块共识,得到提案区块的区块共识结果。

具体的,第一共识节点可以将交易列表中的交易作为待验证交易,进而可以对待验证交易和待处理交易数据进行哈希运算,得到与待验证交易相关联的交易哈希值,且可以基于交易哈希值确定待验证交易对应的默克尔树根。与此同时,第一共识节点可以从区块链网络中获取具有目标最大生成时间戳的区块作为第二目标区块,并可以将第二目标区块的区块哈希值作为第二目标区块的下一区块的父区块哈希值,随后第一共识节点可以基于待验证交易、待处理交易数据、默克尔树根以及父区块哈希值,生成第二目标区块的下一区块,并将第二目标区块的下一区块作为待与区块链网络中的第二共识节点进行区块共识的提案区块。这里的第二目标区块特指第一共识节点进行打包处理时,从区块链网络对应的区块链上读取到的具有最大生成时间戳的区块,该最大生成时间戳可称为目标最大生成时间戳,可以理解,提案区块的生成时间戳可以用于更新区块链上的最大生成时间戳。

应当理解,第二目标区块与第一目标区块可能是同一个区块,也可能是不同的区块。

其中,需要说明的是,第一共识节点可以对待验证交易进行哈希运算,得到第一哈希值,同时可以对待处理交易数据进行哈希运算,得到第二哈希值,随后可以对第一哈希值和第二哈希值再次进行哈希运算,从而得到与待验证交易相关联的交易哈希值。可选的,第一共识节点也可以直接对待验证交易和待处理交易数据进行哈希运算,从而得到与待验证交易相关联的交易哈希值。最终,第一共识节点可以基于交易哈希值确定待验证交易对应的默克尔树根。

可选的,第一共识节点也可以仅对待验证交易进行哈希运算,得到与待验证交易相关联的交易哈希值,进而可以基于该交易哈希值确定待验证交易对应的默克尔树根。

为便于理解,请一并参见图4,图4是本申请实施例提供的一种生成提案区块的场景示意图。如图4所示,本申请实施例中的共识节点40A可以为区块链网络中的第一共识节点,该共识节点40A可以为上述图1所示的区块链节点系统中的任意一个共识节点,例如,节点10a。

应当理解,如图4所示的区块链4可以为上述图1所示的区块链网络中的区块链,该区块链4可以为共识节点40A所属区块链网络中每个共识节点均共享的一条相同的区块链,每个共识节点均可以在区块链4中获取该区块链所存储的信息。其中,区块链4中包括区块40a、区块40b、…、区块40m,该区块40a可以称为区块链4的创世区块。

应当理解,图4所示的交易池400(即第一交易池)中可以存储有共识节点40A接收到的多个交易,这多个交易具体可以包括交易1、交易2、交易3、交易4、…、交易n,这里的n为正整数。其中,交易2可以为某个终端设备上的应用客户端发起的初始交易。

可以理解的是,在将交易放入交易池之前,共识节点40A可以执行接收到的每个交易,得到每个交易分别对应的初始交易执行记录,并将这些初始交易执行记录添加至与交易池400相关联的交易执行数据集401(即第一交易执行数据集),这些初始交易执行记录具体可以包括交易1对应的交易执行记录1、交易2对应的交易执行记录2、交易3对应的交易执行记录3、…、交易n对应的交易执行记录n。

进一步,共识节点40A可以从交易池400获取用于进行打包处理的交易列表,并将该交易列表中的交易作为待验证交易,例如,交易列表402中的交易1、交易2、交易3、交易4均可以统称为待验证交易。同时,共识节点40A可以从交易执行数据集401获取与交易列表中的每个交易对应的初始交易执行记录,并将这些初始交易执行记录作为与该交易列表相关联的待处理交易数据,例如,待处理交易数据403中的交易执行记录1、交易执行记录2、交易执行记录3、交易执行记录4均可以统称为待处理交易数据。进一步,共识节点40A可以分别对交易列表402中的每个交易以及待处理交易数据403中该交易对应的初始交易执行记录进行哈希运算,以得到相应的交易哈希值。例如,对交易1和交易执行记录1进行哈希运算,可以得到交易哈希值1;可选的,也可以对交易1进行哈希运算,得到第一哈希值1,同时对交易执行记录1进行哈希运算,得到第二哈希值1,随后对第一哈希值1和第二哈希值1进行哈希运算,得到交易哈希值1;对交易2和交易执行记录2进行哈希运算,可以得到交易哈希值2;可选的,也可以对交易2进行哈希运算,得到第一哈希值2,同时对交易执行记录2进行哈希运算,得到第二哈希值2,随后对第一哈希值2和第二哈希值2进行哈希运算,得到交易哈希值2;对交易3和交易执行记录3进行哈希运算,可以得到交易哈希值3;可选的,也可以对交易3进行哈希运算,得到第一哈希值3,同时对交易执行记录3进行哈希运算,得到第二哈希值3,随后对第一哈希值3和第二哈希值3进行哈希运算,得到交易哈希值3;对交易4和交易执行记录4进行哈希运算,可以得到交易哈希值4;可选的,也可以对交易4进行哈希运算,得到第一哈希值4,同时对交易执行记录4进行哈希运算,得到第二哈希值4,随后对第一哈希值4和第二哈希值4进行哈希运算,得到交易哈希值4。

进一步,共识节点40A可以基于交易哈希值1、交易哈希值2、交易哈希值3以及交易哈希值4,确定待验证交易对应的默克尔树根。例如,共识节点40A可以对交易哈希值1和交易哈希值2进行哈希运算,得到包含这两个交易哈希值的路径哈希值12;对交易哈希值3和交易哈希值4进行哈希运算,得到包含这两个交易哈希值的路径哈希值34;最后,可以对路径哈希值12和路径哈希值34进行哈希运算,得到包含这两个路径哈希值的树根哈希值1234,进而可以将树根哈希值1234作为待验证交易对应的默克尔树根。

进一步,共识节点40A可以从图4所示的区块链4上,获取具有目标最大生成时间戳的区块作为第二目标区块(例如,区块40m),进而可以将该区块40m的区块哈希值作为该区块40m的下一区块的父区块哈希值,此时,共识节点40A可以基于待验证交易、待处理交易数据、默克尔树根以及父区块哈希值,生成区块40m的下一区块,并将生成的第二目标区块的下一区块作为待写入区块链4的提案区块(例如,提案区块40x),这里的提案区块40x可以用于更新区块链4上的最大生成时间戳。如图4所示,该提案区块可以包括区块头信息和区块主体。其中,区块头信息中可以包括父区块哈希值、版本号、时间戳、难度值、随机数以及默克尔树根等,区块主体中可以存储有共识节点40A所打包的待验证交易、待处理交易数据,以及基于待验证交易和待处理交易数据所得到的交易哈希值所构成的默克尔路径。

进一步,第一共识节点可以基于冲突检测策略对提案区块进行冲突检测,得到第一共识结果。同时,第一共识节点可以将提案区块广播至第二共识节点,以使第二共识节点可以同样基于冲突检测策略对提案区块进行冲突检测,得到第二共识结果。最终,第一共识节点可以接收第二共识节点所返回的第二共识结果,并将第一共识结果和第二共识结果作为提案区块的区块共识结果。其中,冲突检测的具体过程可以参见后续图6所对应实施例中的描述。

上述可知,本申请实施例将交易执行过程提前到将交易加入交易池之前,解耦了交易执行和共识过程,这样可以减少共识过程所消耗的共识时长,且可以充分利用共识节点对交易并发接收和并发执行的特性提高系统资源的利用率,并提高共识节点生成区块的效率。同时,在满足共识数据一致性的前提下,可以减少共识过程中因全量执行区块中的交易所带来的时间损耗,最终可以提升区块链网络整体对外的吞吐量。

进一步地,请参见图5,图5是本申请实施例提供的一种交易数据处理方法的流程示意图。如图5所示,该方法可以由区块链网络中的第一共识节点执行,该第一共识节点可以为接入至区块链网络中的服务器,也可以为接入至该区块链网络中的终端设备,这里对第一共识节点的具体形式不做限定。该第一共识节点可以为上述图1所示的区块链节点系统中的任意一个共识节点,例如,节点10a。该方法至少可以包括以下步骤:

步骤S201,在接收到初始交易时,对初始交易进行有效性校验,得到有效性校验结果;

具体的,第一共识节点可以对接收到的每一个交易进行有效性检验,以初始交易为例,第一共识节点接收到初始交易后,可以获取该初始交易的交易签名信息以及发送该初始交易的终端设备的设备公钥,进而可以基于设备公钥对交易签名信息进行交易签名验证,得到交易验签结果。其中,交易签名信息为该终端设备通过设备公钥对应的设备私钥对初始交易进行签名后所得到的。

进一步,第一共识节点可以对初始交易进行双重花费验证(也可称为双重支付判断),得到双花验证结果。其中,双重花费验证用于验证同一笔虚拟资产是否被重复使用,即验证是否存在双花攻击。例如,第一共识节点可以获取初始交易对应的交易时间戳,然后可以在第一交易池中搜索是否存在位于该交易时间戳之前的重复交易,如果不存在,则可以在待上链的区块中进行搜索,若还不存在,则可以在区块链中继续进行搜索,直到最终获得双花验证结果。

进一步,第一共识节点可以将交易验签结果以及双花验证结果作为初始交易对应的有效性校验结果。当交易验签结果指示验签成功且双花验证结果指示不存在双花攻击时,确定有效性校验结果指示交易有效。可选的,当交易验签结果指示验签失败或双花验证结果指示存在双花攻击时,可以确定有效性校验结果指示交易无效,则第一共识节点可以生成交易失败通知,并返回至发送初始交易的终端设备。

步骤S202,若有效性校验结果指示交易有效,则确定初始交易通过有效性校验,将通过有效性校验的初始交易广播至第二共识节点,以使第二共识节点执行通过有效性校验的初始交易;

具体的,若得到的有效性校验结果指示交易有效,则可以确定初始交易通过有效性校验,因此第一共识节点可以将通过有效性校验的初始交易广播至第二共识节点,以使第二共识节点执行通过有效性校验的初始交易。可以理解,第二共识节点对交易的处理过程与第一共识节点对交易的处理过程是一致的,因此第二共识节点也可以通过上述步骤S201所描述的过程对接收到的交易进行有效性校验。

步骤S203,执行初始交易,得到初始交易对应的初始交易执行记录,将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池;

具体的,当初始交易通过有效性校验时,第一共识节点可以执行通过有效性校验的初始交易,具体实现过程可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。

步骤S204,从第一交易池中获取包含初始交易的交易列表,且将从第一交易执行数据集中获取到的与交易列表中的每个交易对应的初始交易执行记录作为与交易列表相关联的待处理交易数据;

该步骤的具体实现过程可以参见上述图3所对应实施例中的步骤S102,这里不再进行赘述。

步骤S205,对交易列表以及待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块;

该步骤的具体实现过程可以参见上述图3所对应实施例中的步骤S103,这里不再进行赘述。

步骤S206,对提案区块进行区块共识,得到提案区块的区块共识结果;

该步骤的具体实现过程可以参见上述图3所对应实施例中的步骤S103,这里不再进行赘述。

步骤S207,若区块共识结果指示共识成功,则确定达成对提案区块的共识,将共识达成后的提案区块作为第三目标区块写入区块链网络对应的区块链;

具体的,若区块共识结果指示共识成功,则确定达成对提案区块的共识,第一共识节点可以将共识达成后的提案区块作为第三目标区块写入区块链网络对应的区块链。例如,可以再次参见图4,如图4所示,当提案区块40x通过区块共识后,共识节点40A可以将提案区块40x作为第三目标区块,并可以将提案区块40x写入区块链4,即提案区块40x会作为区块40m的下一个区块添加至区块链4。可以理解,共识达成后的提案区块和对应的交易执行结果可以写入每个共识节点的本地缓存和本地存储。

可选的,若区块共识结果指示共识失败,则可以舍弃该提案区块,进而可以在区块链网络中重新选取共识节点作为打包节点(即第一共识节点)进行打包处理,然后可以对新得到的提案区块开始新一轮区块共识。

步骤S208,对与交易列表相关联的交易对象所对应的账户状态版本号进行更新。

具体的,第一共识节点可以对与交易列表中的每个交易相关联的交易对象所对应的账户状态版本号进行更新,即更新账本层受待验证交易影响的相关交易对象所对应的账户状态版本号。需要说明的是,执行某个交易时,第一共识节点会将该交易相关联的交易对象所对应的账户状态版本号写入该交易对应的写数据集。应当理解,交易对象可以指参与交易的用户,账户状态版本号可用于表征交易对象对应的账户状态,在某个区块高度下,同一交易对象对应的账户状态版本号是相同的,而每次成功执行一次交易并将相关数据上链后,都需要对该交易相关联的账户状态版本号进行更新。应当理解,记录相关的账户状态版本号,就可以知道对应的交易是在什么状态(例如,以当前区块链中最新的区块高度为基准)做了执行操作,因此可以基于记录的账户状态版本号进行冲突检测。在本申请实施例中,每个共识节点预先执行一个交易时,均可以获取与该交易相关联的账户状态版本号,并将其写入该交易对应的写数据集。可选的,账户状态版本号可以是一串递增的整数,每次更新就会对其加1。例如,假设交易1指示交易对象A向交易对象B进行虚拟资产转移,则第一共识节点(如节点C)执行交易1时,会将交易对象A对应的账户状态版本号以及交易对象B对应的账户状态版本号均写入交易1对应的写数据集,在后续通过相关的冲突检测后,第一共识节点可以对交易对象A对应的账户状态版本号以及交易对象B对应的账户状态版本号均进行更新,例如,将交易对象A对应的账户状态版本号加1,同时将交易对象B对应的账户状态版本号加1。

上述可知,在本申请实施例中,对于区块链网络中的每一个共识节点,每次接收到交易时,均可以先执行该交易,且交易的接收和执行均可采用并行逻辑,即可以同时接收或同时执行多个交易,交易执行结束后才将该交易加入交易池,同时将相应的交易执行记录加入到与该交易池相关联的交易执行数据集,后续再由第一共识节点将待打包的交易和对应的交易执行记录一并打包成区块进行共识,也就是说,本申请实施例将交易执行过程提前到将交易加入交易池之前,解耦了交易执行和共识过程,这样可以减少共识过程所消耗的共识时长,同时可以充分利用共识节点对交易并发接收和并发执行的特性提高系统资源的利用率,从而提高区块链的吞吐量。

进一步地,请参见图6,图6是本申请实施例提供的一种交易数据处理方法的流程示意图。如图6所示,该方法可以由区块链网络中的第一共识节点和第二共识节点共同执行,该第一共识节点和第二共识节点可以为接入至区块链网络中的服务器,也可以为接入至该区块链网络中的终端设备,这里对第一共识节点和第二共识节点的具体形式不做限定。该第一共识节点可以为上述图1所示的区块链节点系统中的任意一个共识节点,例如,节点10a。该第二共识节点可以为上述图1所示的区块链节点系统中的待广播的一个共识节点,例如,节点10b。该方法至少可以包括以下步骤:

步骤S301,第一共识节点接收初始交易,并对初始交易进行有效性校验,得到有效性校验结果,具体过程可以参见上述图5所对应实施例中的步骤S201。

步骤S302,若有效性校验结果指示交易有效,则确定初始交易通过有效性校验,第一共识节点将通过有效性校验的初始交易广播至第二共识节点。可以理解,第一共识节点对于接收到的其他交易也进行类似处理。

步骤S303,第一共识节点执行初始交易,得到初始交易对应的初始交易执行记录,进而可以将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池。进一步,可以对包含初始交易的交易列表以及与交易列表相关联的待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块,具体过程可以参见上述图3所对应实施例中的步骤S101-步骤S103。

步骤S304,第一共识节点将提案区块广播至第二共识节点。

步骤S305,第一共识节点基于冲突检测策略对提案区块进行冲突检测,得到第一共识结果。

具体的,第一共识节点可以基于冲突检测策略对提案区块进行冲突检测并投票,从而得到第一共识结果。其中,冲突检测可以包括但不限于以下列举的一种或多种方式:校验提案区块的区块签名信息、校验提案区块中的默克尔树根、校验提案区块是否符合区块链链式原则、校验提案区块是否符合提案规则、对提案区块中的交易列表进行有效性校验、对提案区块中的每一个交易对应的交易执行记录(即待处理交易数据)进行本地校验、对提案区块中的交易列表进行关联性校验以及读写集冲突检测。

可以理解,第一共识节点对提案区块进行冲突检测的过程与第二共识节点对提案区块进行冲突检测的过程一致,因此可以本步骤的具体过程可以参见下述步骤S306。

步骤S306,第二共识节点接收由第一共识节点所广播的提案区块,且基于冲突检测策略对提案区块进行冲突检测,得到第二共识结果。

具体的,第二共识节点可以接收由区块链网络中的第一共识节点所广播的提案区块,进而可以基于冲突检测策略对提案区块冲突检测,得到提案区块的第二共识结果。

可选的,第二共识节点可以校验提案区块的区块签名信息,具体过程可以为:第二共识节点可以获取提案区块的区块签名信息,其中,区块签名信息是由第一共识节点通过第一共识节点的节点私钥对提案区块进行签名后所得到的。进一步,第二共识节点可以获取该节点私钥对应的节点公钥,并基于节点公钥对区块签名信息进行区块签名验证,得到区块验签结果,进而可以基于区块验签结果确定提案区块对应的第二共识结果。可以理解,当区块验签结果指示验签失败,即区块签名校验不通过时,第二共识节点可以对该提案区块投反对票。

可选的,第二共识节点可以校验提案区块中的默克尔树根,即校验提案区块中的默克尔树根是否由交易列表中的交易以及对应的初始交易执行记录计算得到,具体过程可以为:第二共识节点可以对提案区块交易列表中的交易和待处理交易数据进行哈希运算,得到待校验哈希值,随后可以基于待校验哈希值确定待验证树根。进一步,第二共识节点可以将待验证树根与提案区块中的默克尔树根进行比对,得到树根比对结果,进而可以基于树根比对结果确定提案区块对应的第二共识结果。可以理解,当树根比对结果指示待验证树根与默克尔树根不相同时,第二共识节点可以对该提案区块投反对票。

可选的,第二共识节点可以校验提案区块是否符合区块链链式原则,即校验提案区块的前序区块是否是第二共识节点当前最新的区块,具体过程可以为:第二共识节点可以从区块链中获取提议区块的父区块(即前序区块)的区块哈希值,作为目标父区块哈希值,进而可以从提案区块中获取父区块哈希值,将目标父区块哈希值与父区块哈希值进行比对,得到哈希值比对结果,进而可以基于哈希值比对结果确定提案区块对应的第二共识结果。可以理解,当哈希值比对结果指示目标父区块哈希值与父区块哈希值不相同时,第二共识节点可以对该提案区块投反对票。

可选的,第二共识节点可以校验提案区块是否符合提案规则,例如,可以校验第一共识节点是否是正确的主节点(即提案节点),基于得到的节点校验结果可以确定提案区块对应的第二共识结果。可以理解,当节点校验结果指示第一共识节点不是正确的提案节点时,第二共识节点可以对该提案区块投反对票。

可选的,第二共识节点可以对提案区块中的交易列表进行有效性校验,即对交易列表中的每一个交易均进行有效性校验,包括交易签名验证和双重花费验证,从而得到目标有效性校验结果,基于目标有效性校验结果可以确定提案区块对应的第二共识结果。具体过程可以参见上述图5所对应实施例中的步骤S201。可以理解,当目标有效性校验结果指示交易列表中存在验签失败的交易或存在双花攻击的交易时,第二共识节点可以对该提案区块投反对票。

可选的,第二共识节点可以对提案区块中的每一个交易对应的初始交易执行记录(即待处理交易数据)进行本地校验。由于提案区块中的交易被第一共识节点执行之前广播给了第二共识节点,因此第二共识节点本地大概率存在该交易,并且可能已经预执行了,因此第二共识节点可以比对相关交易执行后的数据,例如比对交易执行结果、交易执行后的交易读写集和执行交易时的账本最新区块高度,具体过程可以为:第二共识节点可以将交易列表中的交易作为待验证交易,并将从第二交易执行数据集中获取到的与待验证交易对应的本地交易执行记录作为与待验证交易相关联的本地交易数据。其中,第二交易执行数据集与第二共识节点的第二交易池相关联,可以理解,第二交易池也可以存储待打包的交易(包括待验证交易)。第二交易执行数据集则用于记录第二共识节点所接收到的每个交易对应的本地交易记录。其中,待验证交易对应的本地交易执行记录是由第二共识节点执行待验证交易所得到的。可以理解,受到网络传输延迟的影响,一些共识节点存储的数据可能滞后于其他共识节点,因此可能导致不同节点执行同一交易所得到的交易执行记录不一致。进一步,第二共识节点可以基于本地交易数据,对提案区块中的待处理交易数据进行本地校验,得到本地校验结果,进而可以基于本地校验结果确定提案区块对应的第二共识结果。

例如,假设某个提案区块中的交易列表包括交易1、交易2、交易3,则交易1、交易2、交易3均可以统称为待验证交易,同时,交易1对应的初始交易执行记录为交易执行记录A1,交易2对应的初始交易执行记录为交易执行记录A2,交易3对应的初始交易执行记录为交易执行记录A3,则交易执行记录A1、交易执行记录A2、交易执行记录A3均可以统称为待处理交易数据,且这些初始交易执行记录是由第一共识节点分别执行交易1、交易2、交易3后所得到的。同理,第二共识节点执行交易1后,得到交易1对应的本地交易执行记录为交易执行记录B1;执行交易2后,得到交易2对应的本地交易执行记录为交易执行记录B2;执行交易3后,得到交易3对应的本地交易执行记录为交易执行记录B3,则交易执行记录B1、交易执行记录B2、交易执行记录B3均可以统称为本地交易数据。因此,第二共识节点可以基于交易执行记录B1,对交易执行记录A1进行本地校验,得到本地校验结果C1;基于交易执行记录B2,对交易执行记录A2进行本地校验,得到本地校验结果C2;基于交易执行记录B3,对交易执行记录A3进行本地校验,得到本地校验结果C3,最终可以基于本地校验结果C1、本地校验结果C2以及本地校验结果C3确定该提案区块对应的第二共识结果。

在一种可选的实施方式中,待处理交易数据可以包括待验证交易对应的目标交易执行结果、目标交易读写集以及第一区块高度,其中,第一区块高度是第一共识节点在执行待验证交易时从区块链网络中所获取到的具有第一最大生成时间戳的第一区块的区块高度,可以理解,待验证交易包括初始交易,因此目标交易执行结果包括初始交易对应的初始交易执行结果,目标交易读写集包括初始交易对应的初始交易读写集,第一区块高度包括初始区块高度;同理,本地交易数据可以包括待验证交易对应的本地交易执行结果、本地交易读写集以及第二区块高度,其中,第二区块高度是第二共识节点在执行待验证交易时从区块链网络中所获取到的具有第二最大生成时间戳的第二区块的区块高度。应当理解,第二共识节点可以将目标交易执行结果与本地交易执行结果进行比对,得到第一比对结果。若第一比对结果指示目标交易执行结果与本地交易执行结果相同,则可以进一步将第一区块高度与第二区块高度进行比对,得到第二比对结果,进而可以基于第二比对结果确定提案区块对应的本地校验结果。

可选的,当第一最大生成时间戳与第二最大生成时间戳相同时,第二比对结果会指示第一区块高度与第二区块高度相同,则第二共识节点可以进一步将目标交易读写集与本地交易读写集进行比对,得到第三比对结果,最终可以基于第三比对结果确定提案区块对应的本地校验结果。

可选的,当第一最大生成时间戳不同于第二最大生成时间戳时,第二比对结果会指示第一区块高度与第二区块高度不相同,则第二共识节点可以进一步将第一账户状态版本号与第二账户状态版本号进行比对,得到第四比对结果。进一步,若第四比对结果指示第一账户状态版本号与第二账户状态版本号不相同,则可以从区块链网络中获取与待验证交易相关联且具有第三最大更新时间戳的第三账户状态版本号,进而可以将第一账户状态版本号与第三账户状态版本号进行比对,得到第五比对结果。若第五比对结果指示第三账户状态版本号低于第一账户状态版本号,则可以重新执行待验证交易,得到更新交易执行结果,进而可以将目标交易执行结果与更新交易执行结果进行比对,得到第六比对结果,最终可以基于第六比对结果确定提案区块对应的本地校验结果。

其中,目标交易读写集包括第一账户状态版本号,第一账户状态版本号是指第一共识节点在执行待验证交易时从区块链网络中(例如,第一共识节点的本地缓存)所获取到的与待验证交易相关联且具有第一最大更新时间戳的账户状态版本号;同理,本地交易读写集包括第二账户状态版本号,第二账户状态版本号是指第二共识节点在执行待验证交易时从区块链网络中(例如,第二共识节点的本地缓存)所获取到的与待验证交易相关联且具有第二最大更新时间戳的账户状态版本号。

应当理解,本地校验结果指示本地校验失败时,第二共识节点可以对该提案区块投反对票。可选的,当交易执行结果不匹配,即第一比对结果指示目标交易执行结果与本地交易执行结果不相同时,第二共识节点可以对该提案区块投反对票;可选的,当交易执行时的账本最新高度一致但是执行后的交易读写集不一致,即第二比对结果指示第一区块高度与第二区块高度相同,但第三比对结果指示目标交易读写集与本地交易读写集不相同时,第二共识节点可以对该提案区块投反对票;可选的,当交易执行时的账本最新高度不一致,可以比较账户状态版本号是否一致,如果不一致,则比较当前第二共识节点在本地缓存中相关联的最新账户状态版本号(即第三账户状态版本号)是否和提案区块中的账户状态版本号(即第一账户状态版本号)一致,如果本地缓存中相关账户状态版本号比提案区块中的账户状态版本号低,说明第二共识节点落后于第一共识节点,则明第二共识节点可以基于从其本地缓存中读取到的最新数据来重新执行该交易,并将本地重新执行后的交易执行结果与提案区块中的交易执行结果进行比对,如果不一致(即第六比对结果指示目标交易执行结果与更新交易执行结果不相同),则第二共识节点可以对该提案区块投反对票。可以理解,数据被篡改、运行代码出错、数据滞后等原因均可能导致目标交易执行结果与更新交易执行结果不相同。

可选的,第二共识节点可以对提案区块中的交易列表进行关联性校验以及读写集冲突检测,即对提案区块里的交易列表按顺序进行关联性校验以及读写集冲突检测,具体过程可以为:第二共识节点可以对交易列表进行关联性校验,得到关联性校验结果,进而可以基于关联性校验结果,从交易列表中获取至少两个具有关联关系的关联交易,并从待处理交易数据中获取至少两个关联交易分别对应的交易读写集。进一步,可以基于至少两个关联交易分别对应的交易执行顺序,对每个交易读写集进行读写集冲突检测,得到读写集冲突检测结果,最终可以基于读写集冲突检测结果确定提案区块对应的第二共识结果。应当理解,当读写集冲突检测结果指示检查失败时,第二共识节点可以对提案区块投反对票。例如,在交易列表X中,交易1和交易3存在关联关系,例如,交易1为用户A将其剩余资产(例如,200元)中的第一待转移资产(例如,100元)转移给用户B,交易3为用户A将其剩余资产中的第二待转移资产(例如,70元)转移给用户B,则交易1和交易3可作为关联交易,若交易1的交易时间戳小于交易3的交易时间戳,则可以获取交易1的写数据集以及交易3的读数据集,将交易1的写数据集与交易3的读数据集进行比对,得到读写集冲突检测结果,若其中的关键数据不一致,例如,交易1的写数据集中记录的执行交易1后用户A的剩余资产为100元,而交易3的读数据集记录的执行交易3时所读取到的用户A的剩余资产仍为执行交易1之前的200元,则相关读写数据集冲突,读写集冲突检测结果指示检查失败。

应当理解,可选的,第二共识节点可以基于区块验签结果、树根比对结果、哈希值比对结果、节点校验结果、目标有效性校验结果、本地校验结果以及读写集冲突检测结果共同确定提案区块对应的第二共识结果,也就是说,只有当上述校验均通过后,第二共识节点才对提案区块投赞成票。

本申请实施例中的冲突检测还可以包括其它检测内容,这里不再一一列举。

步骤S307,第二共识节点将第二共识结果返回至第一共识节点。也就是说,第二共识节点可以将投票结果进行广播。

步骤S308,第一共识节点接收第二共识节点所返回的第二共识结果,将第一共识结果和第二共识结果作为提案区块的区块共识结果。

具体的,第一共识节点可以将第一共识结果和第二共识结果作为提案区块的区块共识结果,可选的,区块共识结果可以基于赞成票或反对票的数量得到,例如,当赞成票数量大于第一投票阈值(例如,赞成票数量的占比超过投票总数的2/3)时,区块共识结果指示共识成功,即可以确定达成对提案区块的共识。反之,若反对票数量大于第二投票阈值(例如,反对票数量的占比超过投票总数的2/3)时,区块共识结果指示共识失败,即可以确定不能达成对提案区块的共识。其中,第一投票阈值和第二投票阈值可以根据需要进行设置。

步骤S309,第一共识节点基于区块共识结果,将共识达成后的提案区块写入区块链网络对应的区块链,对与交易列表相关联的交易对象所对应的账户状态版本号进行更新,具体过程可以参见上述图5所对应实施例中的步骤S207-步骤S208。

进一步,请参见图7,图7是本申请实施例提供的一种区块链交易过程的交互示意图。如图7所示,应用客户端70A运行在某个终端设备上,该应用客户端70A和共识节点70B中运行的服务器71存在数据连接,可选的,应用客户端70A和服务器71可以采用WebSocket协议进行通信,其中,WebSocket是一种在单个TCP(Transmission Control Protocol,传输控制协议)连接上进行全双工通信的协议,WebSocket使得应用客户端和服务器之间的数据交换变得更加简单,且允许服务端主动向客户端推送数据。应当理解,共识节点70B可以为区块链网络中的任意一个共识节点,例如,可以为图1所示的节点10a。共识节点70C与共识节点70B处于同一个区块链网络中,彼此可以进行数据交互,例如互相广播区块或交易等数据。其中,每个共识节点的内部结构都是相同的,本申请实施例仅以共识节点70B为例进行说明。当共识节点70B通过服务器71接收到应用客户端70A发来的交易后,可以对该交易进行有效性校验,包括交易签名验证和双重花费验证。当该交易通过有效性校验时,共识节点70B可以在执行模块75中调用虚拟机74执行该交易,此时虚拟机74可以从存储模块76(即存储层)读取相应的数据(即读数据集)来执行该交易,以得到相应的交易执行记录,进而可以将该交易执行记录添加至存储模块76,将该交易添加至交易池72。进一步,共识模块73可以按照共识节奏定期地从交易池72中获取一批待打包的交易列表,且从存储模块76中获取与交易列表相关联的待处理交易数据,进而可以将交易列表和待处理交易数据一并打包成提案区块,并将提案区块广播至其他共识节点(例如共识节点70C)进行共识。在共识过程中,共识节点会对提案区块进行冲突检测并投票,从而得到区块共识结果。当对提案区块达成共识后,共识节点可以将该提案区块以及相关的交易执行结果一并写入存储模块76,随后开始新一轮的打包和共识。其中,日志管理器77可以对服务器71、交易池72、识模块73以及执行模块75进行相应的事件监听。

请参见图8,是本申请实施例提供的一种交易数据处理装置的结构示意图。该交易数据处理装置可以是运行于计算机设备的一个计算机程序(包括程序代码),例如该交易数据处理装置为一个应用软件;该装置可以用于执行本申请实施例提供的交易数据处理方法中的相应步骤。如图8所示,该交易数据处理装置1可以运行于区块链网络中的第一共识节点,该第一共识节点可以为上述图2所对应实施例中的共识节点20A。该交易数据处理装置1可以包括:执行添加模块11、数据获取模块12、打包共识模块13;

执行添加模块11,用于在接收到初始交易时,执行初始交易,得到初始交易对应的初始交易执行记录,将初始交易对应的初始交易执行记录添加至与第一共识节点的第一交易池相关联的第一交易执行数据集,且将初始交易添加至第一交易池;第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;

数据获取模块12,用于从第一交易池中获取包含初始交易的交易列表,且将从第一交易执行数据集中获取到的与交易列表中的每个交易对应的初始交易执行记录作为与交易列表相关联的待处理交易数据;

打包共识模块13,用于对交易列表以及待处理交易数据进行打包处理,得到待与区块链网络中的第二共识节点进行区块共识的提案区块,对提案区块进行区块共识,得到提案区块的区块共识结果。

其中,执行添加模块11、数据获取模块12、打包共识模块13的具体实现方式可以参见上述图3所对应实施例中对步骤S101-步骤S103的描述,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。

请再次参见图8,该交易数据处理装置1还可以包括:区块添加模块14、版本更新模块15、有效检验模块16;

区块添加模块14,用于若区块共识结果指示共识成功,则确定达成对提案区块的共识,将共识达成后的提案区块作为第三目标区块写入区块链网络对应的区块链;

版本更新模块15,用于对与交易列表相关联的交易对象所对应的账户状态版本号进行更新;

有效检验模块16,用于对初始交易进行有效性校验,得到有效性校验结果;若有效性校验结果指示交易有效,则确定初始交易通过有效性校验,将通过有效性校验的初始交易广播至第二共识节点,以使第二共识节点执行通过有效性校验的初始交易。

其中,区块添加模块14、版本更新模块15、有效检验模块16的具体实现方式可以参见上述图5所对应实施例中对步骤S207-步骤S208以及步骤S201的描述,这里将不再进行赘述。

请再次参见图8,执行添加模块11可以包括:数据读取单元111、交易执行单元112、高度获取单元113、记录确定单元114;

数据读取单元111,用于在接收到初始交易时,获取用于执行初始交易的初始业务合约,基于初始业务合约,调用第一共识节点对应的虚拟机从区块链网络中读取初始交易对应的初始读数据集;

交易执行单元112,用于基于初始读数据集,调用虚拟机执行初始交易,得到初始交易对应的初始交易执行结果,将初始交易执行结果写入初始交易对应的初始写数据集,将初始读数据集以及初始写数据集作为初始交易对应的初始交易读写集;

高度获取单元113,用于将执行初始交易时从区块链网络中获取到的具有初始最大生成时间戳的区块作为第一目标区块,将第一目标区块的区块高度作为初始区块高度;

记录确定单元114,用于将初始交易执行结果、初始交易读写集以及初始区块高度作为初始交易对应的初始交易执行记录。

其中,数据读取单元111、交易执行单元112、高度获取单元113、记录确定单元114的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里将不再进行赘述。

其中,打包共识模块13可以包括:哈希运算单元131、区块生成单元132、冲突检测单元133、区块广播单元134、共识确定单元135;

哈希运算单元131,用于将交易列表中的交易作为待验证交易,对待验证交易和待处理交易数据进行哈希运算,得到与待验证交易相关联的交易哈希值,基于交易哈希值确定待验证交易对应的默克尔树根;

区块生成单元132,用于从区块链网络中获取具有目标最大生成时间戳的区块作为第二目标区块,将第二目标区块的区块哈希值作为第二目标区块的下一区块的父区块哈希值,基于待验证交易、待处理交易数据、默克尔树根以及父区块哈希值,生成第二目标区块的下一区块,将第二目标区块的下一区块作为待与区块链网络中的第二共识节点进行区块共识的提案区块;

冲突检测单元133,用于基于冲突检测策略对提案区块进行冲突检测,得到第一共识结果;

区块广播单元134,用于将提案区块广播至第二共识节点,以使第二共识节点基于冲突检测策略对提案区块进行冲突检测,得到第二共识结果;

共识确定单元135,用于接收第二共识节点所返回的第二共识结果,将第一共识结果和第二共识结果作为提案区块的区块共识结果。

其中,哈希运算单元131、区块生成单元132、冲突检测单元133、区块广播单元134、共识确定单元135的具体实现方式可以参见上述图3所对应实施例中对步骤S103的描述,这里将不再进行赘述。

其中,有效检验模块16可以包括:签名验证单元161、双花验证单元162、结果确定单元163;

签名验证单元161,用于获取初始交易的交易签名信息以及发送初始交易的终端设备的设备公钥,基于设备公钥对交易签名信息进行交易签名验证,得到交易验签结果;交易签名信息为终端设备通过设备公钥对应的设备私钥对初始交易进行签名后所得到的;

双花验证单元162,用于对初始交易进行双重花费验证,得到双花验证结果;

结果确定单元163,用于将交易验签结果以及双花验证结果作为初始交易对应的有效性校验结果;当交易验签结果指示验签成功且双花验证结果指示不存在双花攻击时,确定有效性校验结果指示交易有效。

其中,签名验证单元161、双花验证单元162、结果确定单元163的具体实现方式可以参见上述图5所对应实施例中对步骤S201的描述,这里将不再进行赘述。

进一步地,请参见图9,是本申请实施例提供的一种交易数据处理装置的结构示意图。该交易数据处理装置可以是运行于计算机设备的一个计算机程序(包括程序代码),例如该交易数据处理装置为一个应用软件;该装置可以用于执行本申请实施例提供的交易数据处理方法中的相应步骤。如图9所示,该交易数据处理装置2可以运行于区块链网络中的第二共识节点,该第二共识节点可以为上述图2所对应实施例中的共识节点20B。该交易数据处理装置2可以包括:接收模块21、检测模块22;

接收模块21,用于接收由区块链网络中的第一共识节点所广播的提案区块;提案区块是由第一共识节点对交易列表以及与交易列表相关联的待处理交易数据进行打包处理得到的;交易列表是指由第一共识节点从第一共识节点的第一交易池中获取到的包含初始交易的列表;待处理交易数据包括第一交易执行数据集中与交易列表中的每个交易对应的初始交易执行记录;第一交易执行数据集与第一交易池相关联,第一交易执行数据集用于记录第一共识节点所接收到的每个交易对应的初始交易执行记录;初始交易对应的初始交易执行记录被第一共识节点添加至第一交易执行数据集,初始交易对应的初始交易执行记录是由第一共识节点在接收到初始交易时执行初始交易得到的;

检测模块22,用于基于冲突检测策略对提案区块冲突检测,得到提案区块的第二共识结果,将第二共识结果返回至第一共识节点。

其中,接收模块21、检测模块22的具体实现方式可以参见上述图6所对应实施例中对步骤S306的描述,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。

请再次参见图9,该检测模块22可以包括:数据获取单元221、本地校验单元222、关联校验单元223、读写检测单元224;

数据获取单元221,用于将交易列表中的交易作为待验证交易,将从第二交易执行数据集中获取到的与待验证交易对应的本地交易执行记录作为与待验证交易相关联的本地交易数据;第二交易执行数据集与第二共识节点的第二交易池相关联;第二交易执行数据集用于记录第二共识节点所接收到的每个交易对应的本地交易记录;待验证交易对应的本地交易执行记录是由第二共识节点执行待验证交易所得到的;

本地校验单元222,用于基于本地交易数据,对提案区块中的待处理交易数据进行本地校验,得到本地校验结果;基于本地校验结果确定提案区块对应的第二共识结果;

关联校验单元223,用于对交易列表进行关联性校验,得到关联性校验结果;基于关联性校验结果,从交易列表中获取至少两个具有关联关系的关联交易,从待处理交易数据中获取至少两个关联交易分别对应的交易读写集;

读写检测单元224,用于基于至少两个关联交易分别对应的交易执行顺序,对每个交易读写集进行读写集冲突检测,得到读写集冲突检测结果;基于读写集冲突检测结果确定提案区块对应的第二共识结果。

其中,数据获取单元221、本地校验单元222、关联校验单元223、读写检测单元224的具体实现方式可以参见上述图6所对应实施例中对步骤S306的描述,这里将不再进行赘述。

其中,待处理交易数据包括待验证交易对应的目标交易执行结果、目标交易读写集以及第一区块高度;第一区块高度是第一共识节点在执行待验证交易时从区块链网络中所获取到的具有第一最大生成时间戳的第一区块的区块高度;本地交易数据包括待验证交易对应的本地交易执行结果、本地交易读写集以及第二区块高度;第二区块高度是第二共识节点在执行待验证交易时从区块链网络中所获取到的具有第二最大生成时间戳的第二区块的区块高度;

本地校验单元222可以包括:第一比对子单元2221、第二比对子单元2222、结果确定子单元2223;

第一比对子单元2221,用于将目标交易执行结果与本地交易执行结果进行比对,得到第一比对结果;

第二比对子单元2222,用于若第一比对结果指示目标交易执行结果与本地交易执行结果相同,则将第一区块高度与第二区块高度进行比对,得到第二比对结果;

结果确定子单元2223,用于基于第二比对结果确定提案区块对应的本地校验结果。

其中,第一最大生成时间戳与第二最大生成时间戳相同;

该结果确定子单元2223,具体用于当第二比对结果指示第一区块高度与第二区块高度相同时,将目标交易读写集与本地交易读写集进行比对,得到第三比对结果;基于第三比对结果确定提案区块对应的本地校验结果。

其中,第一最大生成时间戳不同于第二最大生成时间戳;目标交易读写集包括第一账户状态版本号,第一账户状态版本号是指第一共识节点在执行待验证交易时从区块链网络中所获取到的与待验证交易相关联且具有第一最大更新时间戳的账户状态版本号;本地交易读写集包括第二账户状态版本号,第二账户状态版本号是指第二共识节点在执行待验证交易时从区块链网络中所获取到的与待验证交易相关联且具有第二最大更新时间戳的账户状态版本号;

该结果确定子单元2223,具体用于当第二比对结果指示第一区块高度与第二区块高度不相同时,将第一账户状态版本号与第二账户状态版本号进行比对,得到第四比对结果;若第四比对结果指示第一账户状态版本号与第二账户状态版本号不相同,则从区块链网络中获取与待验证交易相关联且具有第三最大更新时间戳的第三账户状态版本号,将第一账户状态版本号与第三账户状态版本号进行比对,得到第五比对结果;若第五比对结果指示第三账户状态版本号低于第一账户状态版本号,则重新执行待验证交易,得到更新交易执行结果,将目标交易执行结果与更新交易执行结果进行比对,得到第六比对结果;基于第六比对结果确定提案区块对应的本地校验结果。

其中,第一比对子单元2221、第二比对子单元2222、结果确定子单元2223的具体实现方式可以参见上述图6所对应实施例中对步骤S306的描述,这里将不再进行赘述。

请参见图10,是本申请实施例提供的一种计算机设备的结构示意图。如图10所示,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1004可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图10所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。

在如图10所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以执行前文图3、图5、图6任一个所对应实施例中对该交易数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。

此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的交易数据处理装置1或交易数据处理装置2所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3、图5、图6任一个所对应实施例中对交易数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。

上述计算机可读存储介质可以是前述任一实施例提供的交易数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3、图5、图6任一个所对应实施例提供的方法。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。

本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

相关技术
  • 一种数据处理方法、数据处理装置、计算机设备及可读存储介质
  • 一种计算机可读存储介质、数据处理方法、装置及服务器
  • 一种数据处理方法、系统、装置及可读存储介质
  • 一种流数据处理方法、系统、装置及计算机可读存储介质
  • 一种交易流水数据检测方法、装置、设备及可读存储介质
  • 电商交易数据处理方法、设备、可读存储介质及交易系统
  • 一种股票交易数据处理方法、装置及计算机可读存储介质
技术分类

06120115802211