在区块链中并发执行交易的方法和装置与流程

文档序号:19741361发布日期:2020-01-18 05:16阅读:193来源:国知局
在区块链中并发执行交易的方法和装置与流程

本说明书实施例涉及区块链技术领域,更具体地,涉及一种在区块链中并发执行交易的方法和装置。



背景技术:

区块链技术是构建在点对点(p2p)网络上,利用链式数据结构来验证与存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链技术也被称之为分布式账本技术,是一种去中心化的分布式数据库技术,其特点是去中心化、公开透明、不可篡改、可信任。区块链的每笔数据,都会广播到全网的区块链节点,每个全节点都有全量的、一致的数据。区块链中的节点通过发送交易而进行转账、存入数据等业务,区块链中的记账节点在交易池中收集区块链中的交易,执行所述交易,并在执行所述交易之后,将这些交易打包到区块中并扩散到区块链中。区块链中的验证节点会对从记账节点发出的区块进行验证,在验证通过之后,每个节点在接收到该区块时,都会执行该区块中包括的每个交易。

为了保证各个节点的数据一致性,各个节点中在执行区块中的多个交易时,对该多个交易的提交顺序需要是一致的,这样才能得到一致的执行结果。因此,在现有技术中,记账节点在执行交易之前会按照预定规则对将要执行的多个交易进行编号,并按照编号的顺序依次执行多个交易,也即依次提交多个交易,并且其它节点在接收到该区块之后,也是按照上述交易编号顺序依次执行并提交所述多个交易。然而,所述多个交易并不一定都是相互依赖的,在两个交易之间不存在依赖性的情况中,并发执行这两个交易并不影响最终的结果。在并发执行交易的过程中,如果交易中包括例如转账的预定操作,该预定操作的能否成功执行基于预定条件确定,例如,余额是否充足,在该情况中,如果在交易的非提交阶段,预先进行转账,而在提交阶段,如果余额变化,将要重新进行所述转账,而通常账户余额变化的可能性较大,因此,如果在并发执行中预先进行转账,在交易提交时进行交易重做的可能性较大。而在转账操作之前还包括查询账户信息的操作,该查询账户信息操作耗时较长,如果为了避免因为转账操作引起的交易重做而完全串行执行交易,将使得交易执行速度缓慢。

针对转账交易,现有技术中包括这样的方法,利用交易请求中显示指定了转出方账户和转入方账户,将待处理的交易分为若干组,不同组之间的交易不涉及到相同的账户,从而实现组件交易可并行执行,组内交易只能串行执行。然而,当存在热点账户时,会出现大量的交易只能串行执行,并且,在通过合约调用方式转账时,无法事先获得转出方账户和转入方账户,该方法将不再适用。

因此,需要一种更有效的在区块链中并发执行多个转账交易的方法。



技术实现要素:

本说明书实施例旨在提供一种更有效的在区块链中并发执行交易的方法,以解决现有技术中的不足。

为实现上述目的,本说明书一个方面提供一种在区块链中并发执行多个交易的方法,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位之后的位置,所述方法在区块链中的第一节点执行,包括:

当执行到所述至少一个预定操作中的第一预定操作时,在与第一交易对应的第一存储空间中记录第一日志,并在所述第一存储空间中记录第一日志在所述第一存储空间中已记录的日志中的记录顺序,所述第一日志与所述第一预定操作中的第一操作相对应;以及

跳过所述第一预定操作继续执行所述第一交易中在所述第一预定操作之后的操作。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述所述第一预定操作之后包括对第一变量的读取操作,所述方法还包括,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,在与所述第一交易对应的第二存储空间中进行标记,以指示所述第一交易需要在其提交阶段重新执行,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述第一预定操作之后包括对第一变量的读取操作,所述方法还包括,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,进行等待,直到所述第一交易到达提交阶段之后停止等待,以在所述第一交易的提交阶段重新执行所述第一交易,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

在一个实施例中,所述第一节点中预设有交易执行窗口,所述多个交易为所述交易执行窗口当前包括的以提交顺序排列的多个交易,其中,所述第一交易当前位于所述交易执行窗口中的第一个位置之后的位置。

在一个实施例中,所述至少一个预定操作包括至少一种类型的预定操作。

本说明书另一方面提供一种在区块链中并发执行多个交易的方法,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位,所述第一交易在提交顺序变到第一位之前已经被预先执行,并且当前在与所述第一交易对应的第一存储空间中记录有与所述至少一个预定操作对应的至少一个日志、以及所述至少一个日志的记录顺序,所述日志与相应的预定操作中的第一操作相对应,所述方法在区块链中的第一节点执行,包括:

获取所述至少一个日志、以及所述至少一个日志的记录顺序;

基于所述至少一个日志的记录顺序,依次对于每个日志,判断与该日志相应的预定条件是否满足;

在判断与该日志相应的预定条件不满足的情况中,重新执行所述第一交易并提交所述第一交易。

在一个实施例中,所述方法还包括,在判断与所述至少一个日志分别相应的各个预定条件都满足的情况中,基于所述至少一个日志的记录顺序,依次执行与所述至少一个日志分别相应的至少一个第一操作,并提交所述第一交易。

在一个实施例中,在所述第一交易中,所述预定操作在不满足预定条件下对应于第二操作,其中,在判断与该日志相应的预定条件不满足的情况中,重新执行并提交所述第一交易包括,在重新执行与该日志对应的预定操作时,执行与该预定操作对应的第二操作。

在一个实施例中,所述第一节点中预设有交易执行窗口,所述多个交易为所述交易执行窗口当前包括的以提交顺序排列的多个交易,其中,所述第一交易当前位于所述交易执行窗口中的第一个位置。

在一个实施例中,所述第一预定操作为从所述第一账户向第二账户的转账操作,所述第一预定操作在满足预定条件下对应于从第一账户向第二账户转账第一金额的操作。

在一个实施例中,所述预定条件为,所述第一账户的余额大于等于所述第一金额。

本说明书另一方面提供一种在区块链中并发执行多个交易的装置,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位之后的位置,所述装置部署在区块链中的第一节点中,包括:

记录单元,配置为,当执行到所述至少一个预定操作中的第一预定操作时,在与第一交易对应的第一存储空间中记录第一日志,并在所述第一存储空间中记录第一日志在所述第一存储空间中已记录的日志中的记录顺序,所述第一日志与所述第一预定操作中的第一操作相对应;以及

执行单元,配置为,跳过所述第一预定操作继续执行所述第一交易中在所述第一预定操作之后的操作。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述第一预定操作之后包括对第一变量的读取操作,所述装置还包括,标记单元,配置为,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,在与所述第一交易对应的第二存储空间中进行标记,以指示所述第一交易需要在其提交阶段重新执行,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述第一预定操作之后包括对第一变量的读取操作,所述装置还包括,等待单元,配置为,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,进行等待,直到所述第一交易到达提交阶段之后停止等待,以在所述第一交易的提交阶段重新执行所述第一交易,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

本说明书另一方面提供一种在区块链中并发执行多个交易的装置,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位,所述第一交易在提交顺序变到第一位之前已经被预先执行,并且当前在与所述第一交易对应的第一存储空间中记录有与所述至少一个预定操作对应的至少一个日志、以及所述至少一个日志的记录顺序,所述日志与相应的预定操作中的第一操作相对应,所述装置部署在区块链中的第一节点中,包括:

获取单元,配置为,获取所述至少一个日志、以及所述至少一个日志的记录顺序;

判断单元,配置为,基于所述至少一个日志的记录顺序,依次对于每个日志,判断与该日志相应的预定条件是否满足;

重新执行单元,配置为,在判断与该日志相应的预定条件不满足的情况中,重新执行所述第一交易并提交所述第一交易。

在一个实施例中,所述装置还包括提交单元,配置为,在判断与所述至少一个日志分别相应的各个预定条件都满足的情况中,基于所述至少一个日志的记录顺序,依次执行与所述至少一个日志分别相应的至少一个第一操作,并提交所述第一交易。

在一个实施例中,在所述第一交易中,所述预定操作在不满足预定条件下对应于第二操作,其中,在判断与该日志相应的预定条件不满足的情况中,所述重新执行单元还配置为,在重新执行与该日志对应的预定操作时,执行与该预定操作对应的第二操作。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

通过根据本说明书实施例的并发执行交易的方案,针对其中包括需要进行条件判断的预定操作,在非提交阶段并不执行所述预定操作,只是在缓冲区中进行记录,在提交阶段才通过判断预定条件是否满足,而执行所述预定操作,从而相比于在非提交阶段预先执行预定操作的方案,可以避免可能的在提交阶段对交易的重新执行所带来的较大的时间成本,同时在并发执行交易时预先执行了交易中包括的除预定操作之外的其它操作,整体上加快了并发执行交易的效率。

附图说明

通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:

图1示出根据本说明书实施例的区块链系统示意图;

图2示出根据本说明书实施例的一种在区块链中并发执行多个交易的方法流程图;

图3示出了第一缓冲区中第一存储空间的示意图;

图4示出了根据本说明书实施例的交易执行窗口的示意图;

图5示出了第二缓冲区中第二存储空间的示意图;

图6示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的方法;

图7示出根据本说明一个实施例的一种在区块链中并发执行多个交易的装置700;

图8示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的装置800。

具体实施方式

下面将结合附图描述本说明书实施例。

图1示出根据本说明书实施例的区块链系统示意图。如图1所示,所述系统中包括构成区块链的多个节点(图中示意示出6个节点),这些节点两两相连,其中例如包括节点11、节点12和节点13。如本领域技术人员所知,在区块链中,一些节点会收集区块链中的多个交易放入交易池中并竞争记账权。例如图中的节点11通过获取记账权而成为记账节点。节点11在成为记账节点之后会执行其交易池中的多个交易,并将该多个交易打包成区块发送给其它节点,例如发送给节点12。节点12将会对该区块进行验证,并同样地执行该区块中的多个交易。在预定数目个节点对该区块进行验证之后,也即对该区块达到了共识,区块链中的其它节点(例如节点13)将不需要继续对该区块进行验证,而是直接对该区块中的交易进行执行,以更新本地的相关数据。

各个节点在执行所述多个交易时,为了加快执行速度,可在一个时刻并发执行预定数目的交易。所述并发执行的交易中可能涉及到对多个变量的计算,在两个交易中不涉及相同的变量的情况中,其执行顺序并不会影响最终的计算结果,而在两个交易中涉及相同的变量的情况中,其执行顺序可能会影响最终的计算结果,例如,第一交易的提交顺序在第二交易之前,如果在第二交易中执行了对第一变量的读取之后,第一交易又对第一变量进行了写入,在该情况中,第二交易读取的第一变量的值为错误的值,第二交易需要重新执行。

所述并发执行的交易中可能包括类似转账这样的预定操作,转账的成功与否依赖于转出的账户余额是否充足,例如,如果转出的账户余额小于本次转账金额,本次转账将不能成功执行。也就是说,该预定操作能否成功执行基于预定条件是否满足。通常,在进行转账操作之前首先获取账户状态,在根据账户状态确定具有转账权限之后,再进行所述转账操作,该转账操作包括获取余额,确定余额是否充足,在余额充足的情况下进行对相应账户的余额修改。其中,获取账户状态耗时较长,转账操作耗时较短,如果将两个步骤固定组合在一起并发执行,由于余额变化的可能性较大,从而导致交易重做的可能性较大,从而导致最终完全串行地转账。如果将两者进行分离,允许并行获取账户状态,在提交时再进行转账操作,从而在并行执行时完成了耗时的获取账户状态的操作,同时仅在提交时进行转账操作避免了由于余额变化导致的交易重做,从而可加速转账操作的执行。因此,本实施例方案针对上述预定操作,在交易的非提交阶段,并不执行所述预定操作,而只是在日志中进行对该预定操作的记录,并在记录之后继续执行该交易中的其它操作,并在交易的提交阶段,基于所述记录,判断所述预定操作能否成功执行,在判断所述预定操作能够成功执行,则执行所述预定操作,并提交该交易,在判断所述预定操作不能成功执行时,重新执行该交易。从而在并发执行交易的同时,避免了由于预先执行所述预定操作而付出的时间成本,进一步加快了并发执行交易的速度。

图2示出根据本说明书实施例的一种在区块链中并发执行多个交易的方法流程图,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位之后的位置,所述方法在区块链中的第一节点执行,包括:

步骤s202,当执行到所述至少一个预定操作中的第一预定操作时,在与第一交易对应的第一存储空间中记录第一日志、以及第一日志在所述第一存储空间中已记录的日志中的记录顺序,所述第一日志与所述第一预定操作中的第一操作相对应;以及

步骤s204,跳过所述第一预定操作继续执行所述第一交易中在所述第一预定操作之后的操作。

首先,在步骤s202,当执行到所述至少一个预定操作中的第一预定操作时,在与第一交易对应的第一存储空间中记录第一日志、以及第一日志在所述第一存储空间中已记录的日志中的记录顺序,所述第一日志与所述第一预定操作中的第一操作相对应。

如上文中参考图1中所述,该方法在区块链中的一个节点执行。该节点在打包区块时,或者该节点在接收到新生成的区块之后,都会对相关的多个交易进行执行提交。例如,一个区块中可包括几千笔交易,而这几千笔交易可能涉及几百个变量,其中,多个交易可能访问不同的变量,或者,多个交易可能访问相同的变量。在现有技术中,在记账节点中,已经根据预定规则确定了将打包到一个区块中的多个交易各自的交易编号,该交易编号的顺序指示了交易的执行顺序和提交顺序。在本说明书实施例中,为了使得最后的计算结果与现有技术中的串行计算结果相同,对区块中的多个交易保留预定好的提交顺序,例如,以各个交易的编号顺序作为其各自的提交顺序,从而可以并发执行多个交易,并按照各个交易的编号顺序而先后提交该多个交易。

所述预定操作是这样的操作,其在开始执行时需要首先判断预定条件是否满足,然后才根据判断的结果执行相应的操作。例如,转账操作为一种所述预定操作。在执行交易的转账操作之前,通常首先获取账户信息,确定是否具有转账的权限,在确定具有转账权限之后,进行转账操作,例如该转账操作中包括从第一账户向第二账户转出第一金额的第一操作,通常,首先,判断第一账户的余额是否大于等于第一金额(即预定条件是否满足),在判断第一账户的余额大于等于第一金额的情况中,则执行所述第一操作。该操作中例如还包括向第一账户返回转账失败信息的第二操作,在判断第一账户的余额小于第一金额的情况中,则执行所述第二操作。可以理解,上述对转账操作的描述只是示意性的而不是限定性的,例如,所述预定条件不限于为上述预定条件,其例如可以设定为:第一账户的余额大于等于第一金额,且第二账户在转账之后的余额小于第二金额,例如,所述第二操作不限于为返回转账失败信息,其例如可以设定为,从第一账户向第二账户转出第三金额,其中第三金额小于第一金额,例如,第一金额为100元,第三金额为1元。

可以理解,所述预定操作不限于为转账操作,而是可以为任意基于预定条件进行相应操作的操作,例如,所述预定操作为预定范围内的计数操作,所述计数操作在计数总数小于等于预定数值的情况中,对计数总数加1,在计数总数大于所述预定数值的情况中,返回计数结束。也就是说,在该场景中,所述预定条件为,计数总数小于等于预定数值,在满足该条件的情况中,执行第一操作,即对计数总数加1,在不满足该条件的情况中,执行第二操作,即返回计数结束。下文中将以转账操作为例示意说明本说明书实施例的方案。

例如,第一交易中包括的至少一个预定操作中包括一个转账操作,该转账操作例如为,在账户a的余额大于等于100元时,向账户b转出100元,在账户a的余额小于100元时,向账户a返回“转账失败”信息。

当在并发执行交易的过程中执行第一交易时,在第一交易为非提交阶段的情况中,即第一交易当前不是提交顺序排第一位的交易,当执行到上述转账操作时,可先不进行预定条件是否满足的判断,而是直接在与第一交易对应的一个缓冲区中与第一交易对应的第一存储空间中记录与该转账操作对应的日志(例如第一日志),该第一日志中直接记录了从账户a向账户b转出100元的操作(即第一操作),并且向交易告知“转账成功”,然后,跳过该第一交易中的转账操作,继续执行后面的操作。也就是说,在该过程中,并不预先进行实际的转账操作,而是只是记录一条与第一操作对应的日志。其中,对于该第一交易中的至少一个预定操作,例如可以在第一存储空间中顺序排列的连续地址中先后记录至少一个日志,所述至少一个日志与所述至少一个预定操作分别对应,从而通过记录地址的先后顺序体现了所述至少一个日志的记录顺序。

图3示意示出了第一缓冲区中的第一存储空间的示意图。如图3中所示,第一缓冲区中包括与交易3~5分别对应的三个第一存储空间,其中分别记录了与各个交易相应的日志:日志31~34、日志41~43和51~52。例如,第一交易为交易3,则相应的第一存储空间为与交易3对应的一块存储空间。图中左侧标出的1~4为地址标识,其表示连续的四个地址空间,在每个地址空间中,存储了日志31~34,从而基于该地址的顺序,可以确定日志31~34的记录顺序为日志31-日志32-日志33-日志34。所述第一缓冲区基于并发执行交易的具体方式的不同,可以为共享内存中的缓冲区,也可以为仅分配给单个线程的缓冲区。可以理解,在本说明书实施例中,不限于通过该方式记录下所述至少一个日志的记录顺序,例如,在记录至少一个日志的同时,可相应地记录每个日志的记录时间,从而通过所述记录时间记录了所述至少一个日志的记录顺序,等等。

可以理解,所述第一交易中包括的所述至少一个预定操作不限于都为转账操作,例如,第一交易中可能同时包括了转账操作、计数操作、函数运算操作等不同类型的预定操作,所述第一预定操作也不限于为转账操作,而可以为第一交易中包括的任意预定操作。

在一个实施例中,由于交易数量较多,可设定交易执行窗口,将该交易执行窗口在以提交顺序(或交易编号)排列的多个交易中滑动,使得在区块链节点中可并发执行该交易执行窗口中的多个交易,并且可设定,每提交一个交易,就将交易执行窗口向后滑动一个交易。图4示出了根据本说明书实施例的交易执行窗口的示意图。如图4中所示,图中1到10十个数字表示编号分别为1到10的十个交易,所述交易执行窗口例如可包括5个交易。该交易执行窗口初始可落在交易1到5上。在提交交易1之后,窗口往后移动一个交易,即落到交易2到6上,同样地,在提交交易2之后,窗口再往后移动一个交易,从而如图中所示,落到交易3到7上。在图2所示方法中,所述第一交易可以为图4中交易4-7中任一个交易,即,其为并发执行的多个交易中提交顺序非首位的一个交易。

在步骤s204,跳过所述第一预定操作继续执行所述第一交易中在所述第一预定操作之后的操作。

也就是说,在本说明书实施例中,在第一交易中,预先执行除所述至少一个预定操作之外的操作,从而在提交阶段,可仅执行所述至少一个预定操作,从而节省了总执行时间。

在一个实施例中,例如第一交易包括上述转账操作,例如如上所述,该转账操作在满足预定条件时执行的第一操作为,由账户a向账户b转出100元,假设账户a的余额为变量k1,账户b的余额为变量k2,该第一操作对应于,读取变量k1的初始值,判断该初始值是否大于等于100,在判断大于等于100的情况中,将该初始值减少100得到第二值,将变量k1的值写入为所述第二值,对变量k2的操作过程也与此类似。也就是说,该转账操作在实际执行时将包括对变量k1的读取和写入过程。当在第一交易中在该转账操作之后还包括对变量k1的读取操作的情况中,如果如上文所述在非提交阶段跳过转账操作继续执行该对变量k1的读取操作,则这里读取的k1的值并不是真正执行转账操作之后的值,因此读取了错误的k1值。因此,在本说明书实施例中,为了避免对变量的误读取,当在第一交易中在该转账操作之后还包括对变量k1的读取操作的情况中,在执行到该读取操作的代码之后,在确定在第一存储空间中存在第一日志的情况中,可在第二缓冲区中的与第一交易对应的第二存储空间中进行标记,以指示所述第一交易需要在其提交阶段重新执行,其中,所述第一交易在其提交阶段的提交顺序位于第一位,例如如图4所示,其中,交易3位于交易执行窗口的第1位,因此交易3当前为提交阶段。在一个实施例中,当在第一交易中在该转账操作之后还包括对变量k1的读取操作的情况中,在执行到该读取操作的代码之后,在确定在第一存储空间中存在第一日志的情况中,可进行等待,直到所述第一交易到达提交阶段之后停止等待,以在所述第一交易的提交阶段重新执行所述第一交易。也就是说,这里类似于一种读写冲突检测,将“转账操作”视为对相关账户余额的“写操作”,将“读取余额操作”视为对所述账户余额的“读操作”,从而在该写操作之后还包括读操作的情况中,即出现了访问冲突,因此需要重做或等待。所述第二缓冲区根据并发执行交易的具体方式不同可以为共享内存中的缓冲区或者为分配给单个线程的缓冲区。

在一个实施例中,由线程1执行图2所示方法,线程1在执行到该读取操作的代码之后,在分配给其的与第一交易对应的第二存储空间中标记该第一交易需要重新执行。例如,图5示出了第二缓冲区中的第二存储空间的示意图。如图5中所示,图中下部的数字1-5表示交易编号,每个交易对应于一个第二存储空间,所述各个第二存储空间例如为与各个交易分别对应的位,其初始为0,通过将其修改为1进行标记。例如第一交易为图5中的交易3,假设交易3当前未到达提交阶段,则与第一交易对应的第二存储空间为该第二缓冲区中与交易3对应的位。线程1从而将图5中第二缓冲区中的与交易3对应的位修改为1,以进行标记。然后,线程1或者可以继续执行当前的第一交易,或者可以获取新的任务进行执行,并在执行完成之后,根据与交易3对应的第二存储空间中的标记,确定交易3当前是否在提交阶段,如果如图4所示,由于交易执行窗口的移动,交易3到达了提交阶段(即位于窗口的第一位),则可以根据该标记,重新执行第一交易,如果不在提交阶段,线程1可以获取新的任务,并在后续重复上述步骤。在线程1重新执行该第一交易之后,可将第二存储空间中的标记恢复为0。

在一个实施例中,线程1在执行到该读取操作的代码之后,在共享内存中的第二缓冲区中与第一交易对应的第二存储空间中标记该第一交易需要重新执行,从而线程1可获取新的任务进行执行,其它线程(例如线程2)在读取与第一交易对应的第二存储空间的标记之后,可确定第一交易当前是否处于提交阶段,如果处于提交阶段,则线程2可开始重新执行第一交易,如果不处于提交阶段,线程2可获取新的任务进行执行。

在一个实施例中,线程1在执行到该读取操作的代码之后,可进行等待,例如,线程1可通过睡眠以进行等待,线程1在接收到第一交易的前一个交易在提交之后对线程1的通知之后被唤醒,从而确定第一交易处于提交阶段,或者在线程1抓取待处理的任务时,主动确定第一交易是否处于提交阶段,当线程1确定第一交易处于提交阶段的情况中,可开始重新执行第一交易。

图6示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的方法,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位,所述第一交易在提交顺序变到第一位之前已经被预先执行,并且当前在与所述第一交易对应的第一存储空间中记录有与所述至少一个预定操作对应的至少一个日志、以及所述至少一个日志的记录顺序,所述日志与相应的预定操作中的第一操作相对应,所述方法在区块链中的第一节点执行,包括:

步骤s602,获取所述至少一个日志、以及所述至少一个日志的记录顺序;

步骤s604,基于所述至少一个日志的记录顺序,依次对于每个日志,判断与该日志相应的预定条件是否满足;

步骤s606,在判断与该日志相应的预定条件不满足的情况中,重新执行所述第一交易并提交所述第一交易。

首先,在步骤s602,获取所述至少一个日志、以及所述至少一个日志的记录顺序。

在该方法中,第一交易处于提交阶段,例如,如图4中所示,第一交易例如为图4中的交易3,其当前位于交易窗口的第1位,因此当前处于提交阶段。由于在第一交易的非提交阶段,已通过图2所示方法在图3中相应的第一存储空间中存储了与所述至少一个预定操作分别对应的至少一个日志、以及该至少一个日志的记录顺序,在第一交易从非提交阶段变到提交阶段之后,可开始执行该步骤s602。即从与第一交易对应的第一存储空间中获取所述至少一个日志及其记录顺序,例如,日志31-日志32-日志33-日志34,其排列顺序体现了其记录顺序,并且每个日志中记录了相应的预定操作中的第一操作,例如,日志34对应于述转账操作,其记录了,从账户a向账户b转出100元。

在一个实施例中,在从所述相应的第一存储空间获取所述至少一个日志及其记录顺序之后,可将该第一存储空间清空,以用于后续的记录。

在步骤s604,基于所述至少一个日志的记录顺序,依次对于每个日志,判断与该日志相应的预定条件是否满足。

也就是说,按照日志31~34的记录顺序,依次对各个日志进行上述判断。例如,在对日志31~33都判断相应的预定条件满足之后,对日志34进行判断,即判断账户a的余额是否大于等于100元,具体是,读取账户a的余额k1的值,确定k1的值减去100是否大于等于零。

在步骤s606,在判断与该日志相应的预定条件不满足的情况中,重新执行所述第一交易并提交所述第一交易。

在例如图3所示实例中,“该日志”可以为日志31~34中的任一日志,只要确定日志31~34中任一日志的预定条件不能满足,则都需要重新执行第一交易并提交第一交易(即图3中的交易3)。例如,确定日志34的预定条件不能满足,即,k1的值减去100小于零,从而判断预定条件不能满足,需要重新执行第一交易。在该情况中,第一交易中的转账操作中在不满足所述预定条件下对应于第二操作,例如第二操作为,向账户a返回“转账失败”,从而,在第一节点中重新执行第一交易时,因为此时第一交易为交易执行窗口中排在第一位的交易(即第一交易处于提交阶段),从而不再记录日志,而直接执行该预定操作对应的第二操作,即向账户a返回“转账失败”,并在执行完第一交易之后,提交该第一交易。例如,第一交易中的转账操作中在不满足所述预定条件下对应于第二操作,例如第二操作为,“由账户a向账户b转出1元”,从而,在第一节点中重新执行第一交易时,因为此时第一交易为交易执行窗口中排在第一位的交易,从而不再记录日志,而直接执行该预定操作对应的第二操作,即由账户a向账户b转出1元,并在执行完第一交易之后,提交该第一交易。

在一个实施例中,在依次对于每个日志,判断与该日志相应的预定条件都满足的情况中,例如,对于上述日志31~34,判断日志31~34相应的预定条件都满足,则基于日志31~34的记录顺序,依次执行日志31~34中相应的第一操作,并在执行完所述第一操作之后,结合在第一交易的非提交阶段的预先执行的执行信息,提交该第一交易。

图7示出根据本说明一个实施例的一种在区块链中并发执行多个交易的装置700,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位之后的位置,所述装置部署在区块链中的第一节点中,包括:

记录单元71,配置为,当执行到所述至少一个预定操作中的第一预定操作时,在与第一交易对应的第一存储空间中记录第一日志,并在所述第一存储空间中记录第一日志在所述第一存储空间中已记录的日志中的记录顺序,所述第一日志与所述第一预定操作中的第一操作相对应;以及

执行单元72,配置为,跳过所述第一预定操作继续执行所述第一交易中在所述第一预定操作之后的操作。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述代码之后的代码包括对第一变量的读取操作,所述装置还包括,标记单元73,配置为,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,在与所述第一交易对应的第二存储空间中进行标记,以指示所述第一交易需要在其提交阶段重新执行,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

在一个实施例中,所述第一预定操作中的第一操作包括对第一变量的写操作,所述第一交易中在所述代码之后的代码包括对第一变量的读取操作,所述装置还包括,等待单元74,配置为,在执行到所述读取操作时,在确定在所述第一存储空间中记录有第一日志的情况中,进行等待,直到所述第一交易到达提交阶段之后停止等待,以在所述第一交易的提交阶段重新执行所述第一交易,其中,所述第一交易在所述提交阶段的提交顺序位于第一位。

图8示出根据本说明书一个实施例的一种在区块链中并发执行多个交易的装置800,其中,所述多个交易具有预定的提交顺序,其中包括第一交易,所述第一交易中顺序包括至少一个预定操作,所述预定操作在满足预定条件下对应于第一操作,并且所述第一交易当前的提交顺序位于第一位,所述第一交易在提交顺序变到第一位之前已经被预先执行,并且当前在与所述第一交易对应的第一存储空间中记录有与所述至少一个预定操作对应的至少一个日志、以及所述至少一个日志的记录顺序,所述日志与相应的预定操作中的第一操作相对应,所述装置部署在区块链中的第一节点中,包括:

获取单元81,配置为,获取所述至少一个日志、以及所述至少一个日志的记录顺序;

判断单元82,配置为,基于所述至少一个日志的记录顺序,依次对于每个日志,判断与该日志相应的预定条件是否满足;

重新执行单元83,配置为,在判断与该日志相应的预定条件不满足的情况中,重新执行所述第一交易并提交所述第一交易。

在一个实施例中,所述装置还包括提交单元84,配置为,在判断与所述至少一个日志分别相应的各个预定条件都满足的情况中,基于所述至少一个日志的记录顺序,依次执行与所述至少一个日志分别相应的至少一个第一操作,并提交所述第一交易。

在一个实施例中,在所述第一交易中,所述预定操作在不满足预定条件下对应于第二操作,其中,在判断与该日志相应的预定条件不满足的情况中,所述重新执行单元83还配置为,在重新执行与该日志对应的预定操作时,执行与该预定操作对应的第二操作。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

通过根据本说明书实施例的并发执行交易的方案,针对其中包括需要进行条件判断的预定操作,在非提交阶段并不执行所述预定操作,只是在缓冲区中进行记录,在提交阶段才通过判断预定条件是否满足,而执行所述预定操作,从而相比于在非提交阶段预先执行预定操作的方案,可以避免可能的在提交阶段对交易的重新执行所带来的较大的时间成本,同时在并发执行交易时预先执行了交易中包括的除预定操作之外的其它操作,整体上加快了并发执行交易的效率。另外,本说明书实施例相比于传统区块链的串行执行转账交易,通过记录日志的方式,将转账交易分为两个阶段,将原本冲突的转账交易转为可并行执行的交易,提示了系统性能。

需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。

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

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

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

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执轨道的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

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

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