区块链中交易异步执行方法、系统及相关设备与流程

文档序号:25237758发布日期:2021-06-01 14:19阅读:149来源:国知局
区块链中交易异步执行方法、系统及相关设备与流程

本发明涉及区块链技术领域,尤其涉及一种区块链中交易异步执行方法、系统及相关设备。



背景技术:

在区块链网络中,分片技术用于将交易分解为分片并将其分布到整个网络中,这样一来,每个网络节点都不必下载和保存整个区块链状态。通过并行化,分片技术可以显著提高交易处理速度。

目前的状态分片或执行分片的解决方案中,主要采用主从链的架构,各个分片链自己出块,然后向主链锚定,来实现主链区块和分片区块执行上的解耦。此外还有一些出块模块控制多个分片执行器的架构,这种架构一般的执行实现方案会受区块概念的约束,即由出块模块将打包好的区块中的交易按照相关性分发到各个分片执行器中,并收全所有的执行结果后出块,然后进行下一个区块的执行。

发明人在实现本发明的过程中发现,现有的分片方式至少存在如下问题:采用主从链的架构,虽然各个分片链上的出块是互不影响的,但是这样会导致分片链上的出块和其区块的最终确认是异步的,分片链上的区块是存在回滚风险的。采用出块模块控制多个分片执行器的架构,虽然能够通过多个分片执行器并行来加速一个区块的执行速度,但是因为各个分片上的交易数量,交易复杂度的不同,可能导致在一个区块执行的周期内,某些分片执行器闲置,某些分片则一直繁忙,互相间存在等待的现象,导致交易效率较低。



技术实现要素:

本发明实施例提供一种区块链中交易异步执行方法、装置、计算机设备和存储介质,以提高当前区块链交易效率。

为了解决上述技术问题,本申请实施例提供一种区块链中交易异步执行方法,包括上层出块模块执行的如下步骤:

基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器;

在接收到所述下层执行器发送的针对交易块的确认字符ack时,将所述确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的所述第一交易块移动到待接收缓存队列中;

若接收到下层执行器发送的执行结果,则获取所述执行结果中包含的交易块,作为第二交易块,并对所述待接收缓存队列中,与所述第二交易块具有相同序列号的第一交易块,执行删除处理;

向所述下层执行器传递执行结果的确认字符ack。

可选地,在所述基于预设的触发机制,将待发送缓存队列中的交易块发送给下层执行器之前,所述区块链中交易异步执行方法还包括:

接收共识模块传递的交易块,作为初始交易块;

按照预设分片方式,对所述初始交易块进行分片处理,得到m个交易组,其中,m为不大于所述下层执行器个数的正整数,每个所述交易组包括至少一个交易块;

将每个所述交易组中的交易块分发到所述待发送缓存队列中。

可选地,所述基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器包括:

实时监听所述待发送缓存队列中的交易块的数量,作为第一数量;

获取预设的触发数量阈值;

对所述第一数量与所述预设的触发数量阈值进行比较,若所述第一数量大于或等于所述预设的触发数量阈值,则触发将所述待发送缓存队列中的交易块发送给每个所述下层执行器。

可选地,所述基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器还包括:

获取预设的触发时间间隔;

在每次将所述待发送缓存队列中的交易块发送给每个所述下层执行器时,开启计时,得到计时时长;

若所述计时时长大于或等于预设的触发时间间隔,则触发将所述待发送缓存队列中的交易块发送给每个所述下层执行器,并重置所述计时时长。

可选地,在所述基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器之后,所述区块链中交易异步执行方法还包括:

定时对所述待发送缓存队列中的交易块状态进行检测,得到第一检测结果;

若所述第一检测结果为存在已发送给所述下层执行器,并且未接收到所述下层执行器返回确认字符ack的交易块,则将所述交易块作为第二交易块;

将所述第二交易块发送给所述下层执行器。

可选地,所述区块链中交易异步执行方法还包括:

若接收到共识模块发送的砍块场景状态,则根据所述砍块场景状态,确认回滚的目标高度;

将所述砍块场景状态和所述目标高度发送给每个所述下层执行器;

在接收到每个所述下层执行器返回的回滚成功消息时,将缓存数据回滚至所述目标高度,并根据回滚后的状态,对内存信息进行更新。

为了解决上述技术问题,本申请实施例提供一种区块链中交易异步执行方法,包括下层执行器执行的如下步骤:

若接收到上层出块模块发送的交易块,则向所述上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列;

对所述交易块缓冲队列中的交易块进行执行;

在每个交易块被执行完成后,向所述上层出块模块发送针对交易块的执行结果;

在接收到上层出块模块发送的执行结果的确认字符ack时,确认所述执行结果的确认字符ack对应的交易块执行完毕,从所述交易块缓冲队列中移除执行完毕的交易块。

可选地,所述对所述交易块缓冲队列中的交易块进行执行,包括:

读取所述交易块缓冲队列中的交易块的数量,作为第二数量;

若所述第二数量不为0,则从所述所述交易块缓冲队列中获取第一个交易块进行执行。

可选地,在所述在每个交易块被执行完成后,向所述上层出块模块发送针对交易块的执行结果之后,所述交易异步执行方法还包括:

定时对所述交易块缓冲队列中的交易块状态进行检测,得到第二检测结果;

若所述第二检测结果为存在向所述上层出块模块发送针对交易块的执行结果,并且未接收到所述上层出块模块返回确认字符ack的交易块,则将所述交易块作为第三交易块;

向所述上层出块模块重新发送所述第三交易块对应的执行结果。

可选地,所述区块链中交易异步执行方法还包括:

若接收到上层出块模块发送的砍块场景状态和目标高度,则清空所述交易块缓冲队列的交易块;

基于所述目标高度执行回滚处理;

在回滚成功后,向所述上层出块模块发送回滚成功消息。

为了解决上述技术问题,本申请实施例提供一种区块链中交易异步执行系统,所述区块链中交易异步执行系统包括一个上层出块模块和至少两个下层执行器,所述上层出块模块和所述下层执行器实现如下步骤:

所述上层出块模块基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器;

每个所述下层执行器在接收到上层出块模块发送的交易块时,向所述上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列;

所述上层出块模块在接收到所述下层执行器发送的针对交易块的确认字符ack时,将所述确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的所述第一交易块移动到待接收缓存队列中;

每个所述下层执行器对所述交易块缓冲队列中的交易块进行执行;

每个所述下层执行器在每个交易块被执行完成后,向所述上层出块模块发送交易块的执行结果;

所述上层出块模块若接收到下层执行器发送的执行结果,则获取所述执行结果中包含的交易块,作为第二交易块,并对所述待接收缓存队列中,与所述第二交易块具有相同序列号的第一交易块,执行删除处理;

所述上层出块模块向所述下层执行器传递执行结果的确认字符ack;

所述下层执行器在接收到上层出块模块发送的执行结果的确认字符ack时,确认所述执行结果的确认字符ack对应的交易块执行完毕,从所述交易块缓冲队列中移除执行完毕的交易块。

为了解决上述技术问题,本申请实施例还提供一种区块链中交易异步执行装置,包括上层出块模块,上层出块模块包括:

交易块发送子模块,用于基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器;

缓存更新子模块,用于在接收到所述下层执行器发送的针对交易块的确认字符ack时,将所述确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的所述第一交易块移动到待接收缓存队列中;

结果接收子模块,用于若接收到下层执行器发送的执行结果,则获取所述执行结果中包含的交易块,作为第二交易块,并对所述待接收缓存队列中,与所述第二交易块具有相同序列号的第一交易块,执行删除处理;

结果确认子模块,用于向所述下层执行器传递执行结果的确认字符ack。

可选地,在所述基于预设的触发机制,将待发送缓存队列中的交易块发送给下层执行器之前,所述区块链中交易异步执行装置还包括:

交易块接收子模块,用于接收共识模块传递的交易块,作为初始交易块;

交易块分片子模块,用于按照预设分片方式,对所述初始交易块进行分片处理,得到m个交易组,其中,m为不大于所述下层执行器个数的正整数,每个所述交易组包括至少一个交易块;

分片缓存子模块,用于将每个所述交易组中的交易块分发到所述待发送缓存队列中。

可选地,所述交易块发送子模块包括:

数量监听单元,用于实时监听所述待发送缓存队列中的交易块的数量,作为第一数量;

阈值获取单元,用于获取预设的触发数量阈值;

数值比较单元,用于对所述第一数量与所述预设的触发数量阈值进行比较,若所述第一数量大于或等于所述预设的触发数量阈值,则触发将所述待发送缓存队列中的交易块发送给每个所述下层执行器。

可选地,所述区块链中交易异步执行装置还包括:

第一检测子模块,用于定时对所述待发送缓存队列中的交易块状态进行检测,得到第一检测结果;

第二交易块确定子模块,用于若所述第一检测结果为存在已发送给所述下层执行器,并且未接收到所述下层执行器返回确认字符ack的交易块,则将所述交易块作为第二交易块;

第二交易块发送子模块,用于将所述第二交易块发送给所述下层执行器。

可选地,所述区块链中交易异步执行装置还包括:

目标高度确定子模块,用于若接收到共识模块发送的砍块场景状态,则根据所述砍块场景状态,确认回滚的目标高度;

目标高度发送子模块,用于将所述砍块场景状态和所述目标高度发送给每个所述下层执行器;

回滚结果接收子模块,用于在接收到每个所述下层执行器返回的回滚成功消息时,将缓存数据回滚至所述目标高度,并根据回滚后的状态,对内存信息进行更新。

为了解决上述技术问题,本申请实施例还提供一种区块链中交易异步执行装置,包括下层执行器执行,下层执行器执行包括:

交易块接收子模块,用于若接收到上层出块模块发送的交易块,则向所述上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列;

交易执行子模块,用于对所述交易块缓冲队列中的交易块进行执行;

结果反馈子模块,用于在每个交易块被执行完成后,向所述上层出块模块发送针对交易块的执行结果;

状态更新子模块,用于在接收到上层出块模块发送的执行结果的确认字符ack时,确认所述执行结果的确认字符ack对应的交易块执行完毕,从所述交易块缓冲队列中移除执行完毕的交易块。

可选地,所述交易执行子模块包括:

数量读取单元,用于读取所述交易块缓冲队列中的交易块的数量,作为第二数量;

目标选取单元,用于若所述第二数量不为0,则从所述所述交易块缓冲队列中获取第一个交易块进行执行。

可选地,所述交易异步执行装置还包括:

第二检测子模块,用于定时对所述交易块缓冲队列中的交易块状态进行检测,得到第二检测结果;

第三交易块确定子模块,用于若所述第二检测结果为存在向所述上层出块模块发送针对交易块的执行结果,并且未接收到所述上层出块模块返回确认字符ack的交易块,则将所述交易块作为第三交易块;

执行结果重新发送子模块,用于向所述上层出块模块重新发送所述第三交易块对应的执行结果。

可选地,所述区块链中交易异步执行装置还包括:

缓存清理子模块,用于若接收到上层出块模块发送的砍块场景状态和目标高度,则清空所述交易块缓冲队列的交易块;

回滚处理子模块,用于基于所述目标高度执行回滚处理;

回滚消息反馈子模块,用于在回滚成功后,向所述上层出块模块发送回滚成功消息。

为了解决上述技术问题,本申请实施例还提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述区块链中交易异步执行方法的步骤。

为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述区块链中交易异步执行方法的步骤。

本发明实施例提供的区块链中交易异步执行方法、系统、装置、计算机设备及存储介质,上层出块模块基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器,下层执行器在接收到上层出块模块发送的交易块时,向上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列,进而进行执行,并在执行完成后,与上层执行器进行反馈确认,上层出块模块根据下层执行器的反馈信息,对交易块状态进行变更,实现上层出块模块控制出块逻辑,多个下层执行器独立对交易块进行执行,有利于提高交易异步执行的效率。

附图说明

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

图1是本申请可以应用于其中的示例性系统架构图;

图2是本申请的区块链中交易异步执行方法的一个实施例的流程图;

图3是根据本申请的区块链中交易异步执行装置的一个实施例的结构示意图;

图4是根据本申请的计算机设备的一个实施例的结构示意图。

具体实施方式

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

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

请参阅图1,如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。

终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、mp3播放器(movingpicturee界面显示pertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpicturee界面显示pertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。

需要说明的是,本申请实施例所提供的区块链中交易异步执行方法由服务器执行,相应地,区块链中交易异步执行系统和装置设置于服务器中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器,本申请实施例中的终端设备101、102、103具体可以对应的是实际生产中的应用系统。

请参阅图2,图2示出本发明实施例提供的一种区块链中交易异步执行方法,以该方法应用在图1中的服务端为例进行说明,详述如下:

s201:上层出块模块基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器。

其中,预设的触发机制具体可以是通过待发送缓存队列中存储的交易块数量判断来触发,也可以是自定义的其他方式,此处不作具体限定。

通过待发送缓存队列中存储的交易块数量判断来触发的具体实现过程,可参考后续实施例的描述,为避免重复,此处不再赘述。

优选的,本实施例对交易块进行分片处理,在将分片处理后得到的交易块存储到待发送缓存队列中,避免交易块的区块号对后续分发到多个下层执行器的影响,实现上层出块模块对出块逻辑的控制。具体分片实现过程,也可参考后续实施例的描述。

本实施例中,上层出块模块需要维护的内容,也即,需要实时更新的内容,包括但不限于:待发送缓存队列sendbuffer、待接收缓存队列receivebuffer和区块相关信息blockinfos。

其中,blockinfos:这是一个map结构,维护了区块号和各个分片对整个区块的执行进度。其value是一个blockinfo结构,其中包括了:交易hash列表、参与执行的分片标识、以及分片的执行结果。

其中待发送缓存队列sendbuffer,是一个map结构,key为分片的标识,value为整个分片的待发送的交易batch队列。

待接收缓存队列receivebuffer是一个map结构,key为分片的标识,value为整个待接收执行回复的区块号队列。

s202:每个下层执行器在接收到上层出块模块发送的交易块时,向上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列。

具体地,下层执行器与上层出块模块通过预定好的消息握手协议,确定消息的分发状态,在接收到上层出块模块发送的交易块时,向上层出块模块返回包含确认字符ack的确认消息,进而将接收到的交易块缓存到交易块缓冲队列。

其中,交易块缓冲队列是一个队列类型的缓冲区。该缓冲队列接收上层出块模块传递的交易块事件。

可选地,下层执行器包括交易结果缓存队列txbatchexecbuffer,该缓冲队列是一个map结构,负责缓存下层执行器的执行结果,其中缓存的内容包括上层模块给出的最新的checkpoint点以后的所有执行结果。

需要说明的是,本实施例中,每个下层执行器具有独立的维护独立的账本空间,每个交易组的交易可以在一个分片维护的账本空间中完成执行,由于每个下层执行器维护独立的账本空间,因此每个下层执行器可以独立的执行自身账本空间相关的交易。,同时,由于下层执行器不直接参与出块,且其执行行为完全被上层出块模块控制,所以下层执行器是可以不闲置持续执行,有利于提高交易执行效率。

s203:上层出块模块在接收到下层执行器发送的针对交易块的确认字符ack时,将确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的第一交易块移动到待接收缓存队列中。

其中,确认字符ack(acknowledgecharacter)是在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。通常确认字符ack预先设定固定的格式,长度大小,由接收方回复给发送方。

s204:每个下层执行器对交易块缓冲队列中的交易块进行执行。

具体地,每个下层执行器具有独立的维护独立的账本空间,在该下层执行器独立的账本空间中,对交易块缓冲队列中存储的交易块进行执行,具体执行过程可参考后续实施例的描述,为避免重复,此处不再赘述。

s205:每个下层执行器在每个交易块被执行完成后,向上层出块模块发送交易块的执行结果。

本实施例中,下层执行器在执行完每个交易块后,向上层出块模块发送交易块的执行结果,以使上层出块模块收集各个下层执行器的执行结果并进行存储。

需要说明的是,存在下层执行器向上层出块模块发送交易块的执行结果,但上层出块模块未能接收到该执行结果的情形,为避免该情形导致的交易执行结果数据异常,本实施例通过定时的方式,对交易块的状态进行检测,来确保每个执行结果均被上层出块模块成功接收,具体检测过程可参考后续实施例的描述,为避免重复,此处不再赘述。

s206:上层出块模块若接收到下层执行器发送的执行结果,则获取执行结果中包含的交易块,作为第二交易块,并对待接收缓存队列中,与第二交易块具有相同序列号的第一交易块,执行删除处理。

上层出块模块在接收到下层执行器发送的执行结果时,从该执行结果中,获取执行结果中包含的交易块序列号,并与待接收缓存队列中存储的交易块序列号进行匹配,将与执行结果中包含的交易块序列号对应的交易,执行删除处理,避免将已处理的交易块重复发送到下层执行器,有利于提高执行效率。

s207:上层出块模块向下层执行器传递执行结果的确认字符ack。

s208:下层执行器在接收到上层出块模块发送的执行结果的确认字符ack时,确认执行结果的确认字符ack对应的交易块执行完毕,从交易块缓冲队列中移除执行完毕的交易块。

本实施例中,上层出块模块基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器,下层执行器在接收到上层出块模块发送的交易块时,向上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列,进而进行执行,并在执行完成后,与上层执行器进行反馈确认,上层出块模块根据下层执行器的反馈信息,对交易块状态进行变更,实现上层出块模块控制出块逻辑,多个下层执行器独立对交易块进行执行,有利于提高交易异步执行的效率。

在本实施例的一些可选的实现方式中,步骤s201之前,区块链中交易异步执行方法还包括:

接收共识模块传递的交易块,作为初始交易块;

按照预设分片方式,对初始交易块进行分片处理,得到m个交易组,其中,m为不大于所述下层执行器个数的正整数,每个交易组包括至少一个交易块;

将每个交易组中的交易块分发到待发送缓存队列中。

具体地,共识模将共识成功的交易块发送给上层出块模块,上层出块模块接收该交易块,并按照预设的分片方式,对该交易块进行分片处理,得到m个交易组,并将每个交易组中的交易块分发到不同的待发送缓存队列中实现对接收到的交易块的分片处理。

应理解,交易组的数量m为不超过下层执行器的数量,确保每个交易组中的交易块,在达到预设触发条件时,均可快速发送至下层执行器进行处理,有利于提高交易执行效率。

需要说明的是,在进行交易块分发到待发送缓存队列时,以交易组为单位进行分发,也即,将同一组的交易块同时分发到待发送缓存队列中。

本实施例中,通过对交易块分片处理,并将分片后的交易块存储到不同的待发送缓存队列中,实现上层出块模块可以无视区块号的限制,在接收到了共识模块产生的交易块时,将该交易块拆分为多个交易块并进行分组,再直接向下层执行器分发,从而使得分发和执行过程不受区块概念的限制,使得后续可以通过多个下层执行器进行异步并行处理,有利于提高后续交易执行效率。

在本实施例的一些可选的实现方式中,步骤s201中,基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器包括:

实时监听待发送缓存队列中的交易块的数量,作为第一数量;

获取预设的触发数量阈值;

对第一数量与预设的触发数量阈值进行比较,若第一数量大于或等于预设的触发数量阈值,则触发将待发送缓存队列中的交易块发送给每个下层执行器。

具体地,待发送缓存队列为map结构,key为队列的标识,value为整个分片的待发送的交易块,本实施例中的待发送缓存队列为多个,每个待发送缓存队列具有唯一的标识。

其中,预设的触发数量阈值可以根据实际需要进行设定,例如,将触发数量阈值预设为10个,此处不作具体限定。

本实施例中,通过持续对待发送缓存队列中的交易块的数量进行监听的方式,在达到预设发送条件时,触发将待发送缓存队列中的交易块发送给每个下层执行器,确保发送交易块发送的频率和数量可控。

在本实施例的一些可选的实现方式中,步骤s201中,基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器还包括:

获取预设的触发时间间隔;

在每次将待发送缓存队列中的交易块发送给每个下层执行器时,开启计时,得到计时时长;

若计时时长大于或等于预设的触发时间间隔,则触发将待发送缓存队列中的交易块发送给每个下层执行器,并重置计时时长。

其中,预设的触发时间间隔可根据实际需求进行设定,例如,设置为500毫秒,具体数值此处不作限定。

需要说明的是,本实施例中,采用预设的触发时间间隔的判断,作为预设的触发机制,与上一实施例中,采用预设的触发数量阈值的判断,作为预设的触发机制,可以任选其一来实现基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器的过程,也可以采用两者结合的方式,来实现基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器的过程。

本实施例中,通过计时器对每次发送交易块至下层执行器后的时长进行计时,在时长达到预设的触发时间间隔,还未向下层执行器发送交易块时,触发将待发送缓存队列中的交易块发送给每个下层执行器,并重置计时时长,避免下层执行器长时间未接收到交易块导致空闲,有利于提高交易效率。

在本实施例的一些可选的实现方式中,步骤s201之后,区块链中交易异步执行方法还包括:

定时对待发送缓存队列中的交易块状态进行检测,得到第一检测结果;

若第一检测结果为存在已发送给下层执行器,并且未接收到下层执行器返回确认字符ack的交易块,则将交易块作为第二交易块;

将第二交易块发送给下层执行器。

其中,对待发送缓存队列中的交易块状态进行检测,是通过对已发送给下层执行器的交易块的序列号,与收到的确认字符ack的交易块进行匹配的方式来实现。

其中,第一检测结果包括检测正常,和存在已发送给下层执行器,并且未接收到下层执行器返回确认字符ack的交易块。

本实施例中,通过定时对待发送缓存队列中的交易块状态进行检测,将已发送给下层执行器,但未接收到下层执行器返回确认字符ack的交易块,作为第二交易块,并将第二交易块发送给下层执行器,避免交易块为已发送给下层执行器的交易块数据的丢失导致的异常,提高交易执行的安全性。

在本实施例的一些可选的实现方式中,步骤s204中,对交易块缓冲队列中的交易块进行执行,包括:

读取交易块缓冲队列中的交易块的数量,作为第二数量;

若第二数量不为0,则从交易块缓冲队列中获取第一个交易块进行执行。

具体地,本实施例通过交易块缓冲队列对交易块进行缓存,在对交易块进行执行之前,先读取交易块缓冲队列中存储的交易块的数量,在存储的交易量数量大于0,也即,交易块缓冲队列中存储的交易块的数量不为空时,通过堆栈弹出的方式,从交易块缓冲队列中获取第一个交易块进行执行,确保交易块连续正常执行。

其中,本实施例采用的交易块缓冲队列为队列类型的缓冲区txbatchbuffer,该交易缓冲队列接收并存储上层出块模块传递的交易块。

本实施例中,通过先对交易块缓冲队列中的交易块的数量进行判断,在存储交易块不为空时再进行交易块的执行,避免执行异常,有利于提高执行效率。

在本实施例的一些可选的实现方式中,在步骤s205之后,交易异步执行方法还包括:

定时对交易块缓冲队列中的交易块状态进行检测,得到第二检测结果;

若第二检测结果为存在向上层出块模块发送针对交易块的执行结果,并且未接收到上层出块模块返回确认字符ack的交易块,则将交易块作为第三交易块;

向上层出块模块重新发送第三交易块对应的执行结果。

具体地,本实施例采用的交易块缓冲队列为队列类型的缓冲区txbatchbuffer,该交易缓冲队列接收并存储上层出块模块传递的交易块,以及,存储交易执行的执行结果。在每次产生执行结果后,尝试将执行结果发回给上层模块,并启动这个交易块序列号对应的计时器,实现定时对交易块缓冲队列中的交易块状态进行检测,如果计时器到时前,没有收到上层出块模块的确认字符ack,则重发这个执行结果。

需要说明的是,在一些场景中,可能存在上层下发的交易块中,包含了下层执行器已执行过的交易块序列号,则直接将这个序列号的执行结果返回给上层。

本实施例中,通过定时对交易块缓冲队列中的交易块状态进行检测,将向上层出块模块发送针对交易块的执行结果,但未接收到上层出块模块返回确认字符ack的交易块,进行执行结果的重新发送,确保执行状态的同步,避免不同步导致的异常,有利于提高交易执行效率。

在本实施例的一些可选的实现方式中,区块链中交易异步执行方法还包括:

上层出块模块若接收到共识模块发送的砍块场景状态,则根据砍块场景状态,确认回滚的目标高度;

上层出块模块将砍块场景状态和目标高度发送给每个下层执行器;

下层执行器若接收到上层出块模块发送的砍块场景状态和目标高度,则清空交易块缓冲队列的交易块;

下层执行器基于目标高度执行回滚处理;

下层执行器在回滚成功后,向上层出块模块发送回滚成功消息。

上层出块模块在接收到每个下层执行器返回的回滚成功消息时,将缓存数据回滚至目标高度,并根据回滚后的状态,对内存信息进行更新。

需要说明的是,本实施例中预设有特定状态值,处于该特定状态值时,上层出块模块和下层执行器会执行回滚操作,并在回滚操作过程中,拒绝其他时间,确保对砍块场景的快速响应。

本实施例中,在接收到共识模块发送的砍块场景状态时,通过上层出块模块确定回滚的目标高度,并发送给每个下层执行器,下层执行器根据该目标高度执行回滚处理,并向上层出块模块返回回滚结果,回滚结果包括回滚成功和回滚失败,在上层出块模块接收到每个下层执行器均回滚成功的消息后,将自身存储的数据会滚至目标高度,并根据回滚后的状态,更新内存中的必要信息,实现对砍块场景的快速响应,避免交易执行的异常,确保交易的可靠性和安全性。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本发明实施例提供的一种区块链中交易异步执行方法对应的区块链中交易异步执行系统,该区块链中交易异步执行系统包括一个上层出块模块和至少两个下层执行器,上层出块模块和下层执行器实现如下步骤:

上层出块模块基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器;

每个下层执行器在接收到上层出块模块发送的交易块时,向上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列;

上层出块模块在接收到下层执行器发送的针对交易块的确认字符ack时,将确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的第一交易块移动到待接收缓存队列中;

每个下层执行器对交易块缓冲队列中的交易块进行执行;

每个下层执行器在每个交易块被执行完成后,向上层出块模块发送交易块的执行结果;

上层出块模块若接收到下层执行器发送的执行结果,则获取执行结果中包含的交易块,作为第二交易块,并对待接收缓存队列中,与第二交易块具有相同序列号的第一交易块,执行删除处理;

上层出块模块向下层执行器传递执行结果的确认字符ack;

下层执行器在接收到上层出块模块发送的执行结果的确认字符ack时,确认执行结果的确认字符ack对应的交易块执行完毕,从交易块缓冲队列中移除执行完毕的交易块。

关于区块链中交易异步执行系统的具体限定可以参见上文中对于区块链中交易异步执行方法的限定,在此不再赘述。

图3示出与上述实施例区块链中交易异步执行方法一一对应的区块链中交易异步执行装置的原理框图。

如图3所示,该区块链中交易异步执行装置包括上层出块模块,该上层出块模块包括:交易块发送子模块31、缓存更新子模块32、结果接收子模块33和结果确认子模块34。各功能模块详细说明如下:

交易块发送子模块31,用于基于预设的触发机制,将待发送缓存队列中的交易块发送给每个下层执行器;

缓存更新子模块32,用于在接收到下层执行器发送的针对交易块的确认字符ack时,将确认字符ack对应的交易块作为第一交易块,并将待发送缓存队列中的第一交易块移动到待接收缓存队列中;

结果接收子模块33,用于若接收到下层执行器发送的执行结果,则获取执行结果中包含的交易块,作为第二交易块,并对待接收缓存队列中,与第二交易块具有相同序列号的第一交易块,执行删除处理;

结果确认子模块34,用于向下层执行器传递执行结果的确认字符ack。

可选地,区块链中交易异步执行装置还包括:

交易块接收子模块,用于接收共识模块传递的交易块,作为初始交易块;

交易块分片子模块,用于按照预设分片方式,对初始交易块进行分片处理,得到m个交易组,其中,m为不大于所述下层执行器个数的正整数,每个交易组包括至少一个交易块;

分片缓存子模块,用于将每个交易组中的交易块分发到待发送缓存队列中。

可选地,交易块发送子模块31包括:

数量监听单元,用于实时监听待发送缓存队列中的交易块的数量,作为第一数量;

阈值获取单元,用于获取预设的触发数量阈值;

数值比较单元,用于对第一数量与预设的触发数量阈值进行比较,若第一数量大于或等于预设的触发数量阈值,则触发将待发送缓存队列中的交易块发送给每个下层执行器。

可选地,交易块发送子模块31还包括:

时间间隔获取单元,用于获取预设的触发时间间隔;

计时单元,用于在每次将待发送缓存队列中的交易块发送给每个下层执行器时,开启计时,得到计时时长;

时长比较单元,用于若计时时长大于或等于预设的触发时间间隔,则触发将待发送缓存队列中的交易块发送给每个下层执行器,并重置计时时长。

可选地,区块链中交易异步执行装置还包括:

第一检测子模块,用于定时对待发送缓存队列中的交易块状态进行检测,得到第一检测结果;

第二交易块确定子模块,用于若第一检测结果为存在已发送给下层执行器,并且未接收到下层执行器返回确认字符ack的交易块,则将交易块作为第二交易块;

第二交易块发送子模块,用于将第二交易块发送给下层执行器。

可选地,区块链中交易异步执行装置还包括:

目标高度确定子模块,用于若接收到共识模块发送的砍块场景状态,则根据砍块场景状态,确认回滚的目标高度;

目标高度发送子模块,用于将砍块场景状态和目标高度发送给每个下层执行器;

回滚结果接收子模块,用于在接收到每个下层执行器返回的回滚成功消息时,将缓存数据回滚至目标高度,并根据回滚后的状态,对内存信息进行更新。

继续参阅图3,该区块链中交易异步执行装置还包括下层执行器,该下层执行器包括:交易块接收子模块35、交易执行子模块36、结果反馈子模块37和状态更新子模块38。各功能模块详细说明如下:

交易块接收子模块35,用于若接收到上层出块模块发送的交易块,则向上层出块模块返回包含确认字符ack的确认消息,并将接收到的交易块缓存到交易块缓冲队列;

交易执行子模块36,用于对交易块缓冲队列中的交易块进行执行;

结果反馈子模块37,用于在每个交易块被执行完成后,向上层出块模块发送针对交易块的执行结果;

状态更新子模块38,用于在接收到上层出块模块发送的执行结果的确认字符ack时,确认执行结果的确认字符ack对应的交易块执行完毕,从交易块缓冲队列中移除执行完毕的交易块。

可选地,交易执行子模块36包括:

数量读取单元,用于读取交易块缓冲队列中的交易块的数量,作为第二数量;

目标选取单元,用于若第二数量不为0,则从交易块缓冲队列中获取第一个交易块进行执行。

可选地,交易异步执行装置还包括:

第二检测子模块,用于定时对交易块缓冲队列中的交易块状态进行检测,得到第二检测结果;

第三交易块确定子模块,用于若第二检测结果为存在向上层出块模块发送针对交易块的执行结果,并且未接收到上层出块模块返回确认字符ack的交易块,则将交易块作为第三交易块;

执行结果重新发送子模块,用于向上层出块模块重新发送第三交易块对应的执行结果。

可选地,区块链中交易异步执行装置还包括:

缓存清理子模块,用于若接收到上层出块模块发送的砍块场景状态和目标高度,则清空交易块缓冲队列的交易块;

回滚处理子模块,用于基于目标高度执行回滚处理;

回滚消息反馈子模块,用于在回滚成功后,向上层出块模块发送回滚成功消息。

关于区块链中交易异步执行装置的具体限定可以参见上文中对于区块链中交易异步执行方法的限定,在此不再赘述。上述区块链中交易异步执行装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。

所述计算机设备4包括通过系统总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件连接存储器41、处理器42、网络接口43的计算机设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程门阵列(field-programmablegatearray,fpga)、数字处理器(digitalsignalprocessor,dsp)、嵌入式设备等。

所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。

所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或d界面显示存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述计算机设备4的内部存储单元,例如该计算机设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述计算机设备4的外部存储设备,例如该计算机设备4上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。当然,所述存储器41还可以既包括所述计算机设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述计算机设备4的操作系统和各类应用软件,例如电子文件的控制的程序代码等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。

所述处理器42在一些实施例中可以是中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述计算机设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的程序代码或者处理数据,例如运行电子文件的控制的程序代码。

所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述计算机设备4与其他电子设备之间建立通信连接。

本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有界面显示程序,所述界面显示程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的区块链中交易异步执行方法的步骤。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。

显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

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