一种交易预处理方法、装置及电子设备与流程

文档序号:15640208发布日期:2018-10-12 21:58阅读:175来源:国知局

本申请涉及网络技术领域,尤其涉及一种交易预处理方法、装置及电子设备。



背景技术:

区块链是一种新的分布式技术,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。采用区块链技术架构的网络可视为区块链网络,该区块链网络中包含多个区块链节点,任一区块链节点可对应至少一个区块链,任一区块链可包含至少一个区块。

在区块链技术中,共识算法是区块链网络中实现不同区块链节点之间建立信任、获取权益的重要方法。目前采用实用拜占庭容错(practicalbyzantinefaulttolerance,pbft)这类共识算法的区块链中,区块链底层平台先对交易完成共识,共识完成后才会去完成交易的执行计算。在这类共识算法中,一般会采用多轮投票,在多轮投票的过程中,先完成共识,当最后一轮投票结束后,通过投票的块(block)被提交,才会开始进行计算。由于多轮投票过程比较耗时,在这个过程中,相应的功能模块往往处于空闲状态,资源利用率低,资源比较浪费。

由此,亟需找到一种区块链中新的提高资源利用率的预处理方案,以克服上述问题。



技术实现要素:

本申请实施例提供一种交易预处理方法、装置及电子设备,用以解决现有技术的共识方案中存在的资源利用率低、资源浪费的问题。

为了解决上述技术问题,本申请实施例采用下述技术方案:

第一方面,提供了一种交易预处理方法,包括:第一区块链节点将提议块信息广播给一个或多个第二区块链节点;每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理;其中,所述第一区块链节点和所述第二区块链节点为区块链网络中的共识节点。

在一种可能的实现方式中,所述每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理,包括:所述每个第二区块链节点根据所述提议块信息获得所述每个第二区块链节点对应的第一交易数据包,并根据所述第一交易数据包按照一定的规则进行交易预处理。

可选的,所述每个第二区块链节点将交易预处理的结果不存入数据库,存入各自的缓存中。

在一种可能的实现方式中,在所述每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理之后,所述方法还包括:所述每个第二区块链节点进行第一轮共识投票,所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息。

可选的,在所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息之后,所述方法还包括:所述每个第二区块链节点进行第二轮共识投票,所述第一区块链节点根据所述第二轮共识投票的结果获得确认块信息;所述每个第二区块链节点将所述提议块信息与所述确认块信息进行比对。

在一种可能的实现方式中,所述每个第二区块链节点将所述提议块信息与所述确认块信息进行比对,进一步包括:如果所述提议块信息与所述确认块信息相同,则所述每个第二区块链节点将所述每个第二区块链节点对应的交易预处理的结果存入数据库;如果所述提议块信息与所述确认块信息不同,则所述每个第二区块链节点根据所述确认块信息获得所述每个第二区块链节点对应的第二交易数据包,并根据所述第二交易数据包进行交易处理;所述每个第二区块链节点将所述交易处理的结果存入数据库。

第二方面,提供了一种交易预处理装置,包括:

广播模块,用于第一区块链节点将提议块信息广播给一个或多个第二区块链节点;

处理模块,用于每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理;以及每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理之后,所述每个第二区块链节点进行第一轮共识投票,所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息;

其中,所述第一区块链节点和所述第二区块链节点为区块链网络中的共识节点。

在一种可能的实现方式中,所述处理模块,还用于使所述每个第二区块链节点进行第二轮共识投票,所述第一区块链节点根据所述第二轮共识投票的结果获得确认块信息;以及所述每个第二区块链节点将所述提议块信息与所述确认块信息进行比对;如果所述提议块信息与所述确认块信息相同,则所述处理模块用于所述每个第二区块链节点将所述每个第二区块链节点对应的交易预处理的结果存入存储模块;如果所述提议块信息与所述确认块信息不同,则所述处理模块用于所述每个第二区块链节点根据所述确认块信息获得所述每个第二区块链节点对应的第二交易数据包,并根据所述第二交易数据包进行交易处理;所述每个第二区块链节点将所述交易处理的结果存入所述存储模块。

第三方面,本申请提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行第一方面所述的方法。

第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第一方面所述的方法。

第五方面,本申请提供一种芯片,所述芯片与存储器相连,用于读取并执行所述存储器中存储的软件程序,以实现第一方面所述的方法。

本申请通过提供基于多轮投票共识算法的区块链系统中的交易预处理方法、装置及电子设备,使交易得到预先执行,有效地提供了资源利用率,提高了区块链系统的性能。

附图说明

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

图1为本申请实施例提供的一种pbft共识算法示意图;

图2为本申请实施例提供的一种tendermint共识算法示意图;

图3为本申请实施例提供的一种交易预处理的方法的流程图;

图4为本申请实施例提供的一种交易预处理的方法的示意图;

图5为本说明书实施例提供的一种电子设备的结构示意图;

图6为本说明书实施例提供的一种交易预处理装置的结构示意图。

具体实施方式

为使本说明书实施例的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书实施例保护的范围。

以下结合附图,详细说明本说明书各实施例提供的技术方案。

区块链本质上是一个去中心化的数据库,是一连串使用密码学方法产生相关联的数据块,每一个数据块中包含了一段时间内全网交易的信息。不同的区块链,有着不同的内涵和功能。区块链中最重要的就是共识算法,共识算法中包括分布式一致性算法,分布式一致性算法一般可以分为拜占庭容错(byzantinefaulttolerance,bft)算法和非拜占庭容错算法。目前主流的拜占庭容错算法包括传统的pbft算法、tendermint算法等。

基于拜占庭将军的问题,一致性的确保主要分为三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。其示意图如图1所示。

在图1中,c为发送请求端节点,0、1、2、3为服务端节点,3为宕机的服务端节点,具体步骤如下:

请求(request):请求端节点c发送请求到任意一节点,在本申请的实施例中为0。

预准备(pre-prepare):服务端节点0收到节点c的请求后进行广播,扩散至节点1、2、3。

准备(prepare):节点1、2、3收到节点0的广播后记录并再次广播。节点1向节点0、2、3广播,节点2向节点0、1、3广播,节点3因为宕机无法广播。

确认(commit):节点0、1、2、3在准备阶段,若收到超过一定数量的相同请求,则进入确认阶段,广播确认请求。

答复(reply):节点0、1、2、3在确认阶段,若收到超过一定数量的相同请求,则对节点c进行反馈。

由此可以看出,pbft共识算法其实是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。

拜占庭容错算法中的tendermint算法是一个易于理解、大部分操作为异步的bft共识协议,其针对pbft算法做了优化,只需要有两轮投票即可达成共识。图2为本申请实施例提供的一种tendermint共识算法的示意图。

协议中的参与者叫着“验证人”(validator)。他们轮流对交易区块进行提议,并对这些区块进行投票。区块会被提交到链上,每一个块占据一个“高度”(height)。提交块可能会失败,如果失败,协议就会开始下一轮的提交,并且一个新的验证人会继续提交那个高度的区块。要想成功提交一个块,需要有两个阶段的投票:“预投票”(prevote)和“预确认”(precommit)。在同一轮提交中,只有超过2/3的验证人对同一个块进行了预提交,这个块才能被提交到链上。

如图1所示,验证人做的事情就像是在跳波卡舞。超过2/3的验证人对同一个块进行了预投票,叫做一个“波卡”(polka)。每一个预提交都必须被同一轮中的一个波卡所证明。由于一些原因,验证人可能在提交一个块时失败:当前提议者可能离线了,或者网络非常慢。tendermint共识算法允许他们证实一个验证人应该被跳过。在进行下一轮的投票前,验证人会等待一小段时间从提议者那里接收一个完整的提议块。这种对于超时的依赖,使得tendermint共识算法成为了一个弱同步协议,而非一个异步协议。但是,协议的剩余部分都是异步的,只有在接收到超过2/3的验证人集合时,验证人才会采取下一步操作。tendermint共识算法能够简化的一个原因就是它使用了同样的机制来提交一个块和跳过直接进入下一轮。

基于不到1/3的验证人是拜占庭节点的前提,tendermint共识算法保证了永远都不会违背其安全性。也就是说,验证人永远不会在同一高度提交冲突块。为了达到这一点,它引入了一些“锁定”(locking)的规则,这些规则对流程图中的路径进行了模块化。一旦一个验证人预提交了一个块,它就被“锁定”在了那个块上。然后,它必须为被锁定的那个块进行预投票,并且只有在之后的轮中,有了那个块的一个波卡,它才能够解锁,并为一个新块进行预提交。

在图1和图2这类的共识算法中,都采用了多轮投票,为了解决多轮投票过程中资源浪费、利用率低的问题,本申请实施例提供了一种预处理的方法、装置及电子设备。需要说明的是,本申请提供的方法、装置及电子设备适用于各种拜占庭算法模式,以下实施例以tendermint共识算法为例,但是本申请并不局限于此。

实施例一

图3示出了本申请实施例提供的一种交易预处理的方法的流程图,如图3所示,包括如下步骤:

s301、第一区块链节点将提议块信息广播给一个或多个第二区块链节点。

其中,所述第一区块链节点和所述第二区块链节点为区块链网络中的共识节点。在这里,以tendermint共识过程为例,该共识算法中有3轮广播。假设区块链网络中有4个共识节点(proposer节点,以及节点a,节点b和节点c),如图4所示。第一轮广播是proposer节点(第一区块链节点)向其他共识节点(一个或多个第二区块链节点)广播提议块(proposedblock)信息。

s302、每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理。

在第一轮广播结束时,共识节点a、b、c(一个或多个第二区块链节点)分别收到proposedblock信息,此时在a、b、c节点内的功能模块,根据所述提议块信息获得各自对应的第一交易数据包,并根据该第一交易数据包按照一定的规则进行交易预处理。

值得注意的是,这里进行交易预处理的规则可以按照现有技术的一种或多种进行组合,这里不再赘述。

可选的,a、b、c节点并不会将处理结果写入数据库,而只是存在各自的缓存中。

s303、所述每个第二区块链节点进行第一轮共识投票,所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息。

a、b、c节点进行第一轮共识投票,proposer节点根据所述第一轮共识投票的结果收集获得预确认块(pre-commitblock)信息。proposer节点获得预确认块信息后向节点a、b、c广播pre-commitblock信息(即第二轮广播)。

s304、所述每个第二区块链节点进行第二轮(最后一轮)共识投票,所述第一区块链节点根据所述第二轮共识投票的结果获得确认块信息。

a、b、c节点进行第一轮共识投票后,进行第二轮(最后一轮)共识投票,proposer节点根据所述第二轮共识投票的结果收集获得确认块(commitblock)信息。proposer节点获得确认块信息后向节点a、b、c广播commitblock信息(即第三轮广播)。

需要注意的是,在本申请的该实施例中,是以两次共识投票和三轮广播为例的,但本申请并不限于此投票次数和广播次数,本申请实施例提供的方法可以适用于多次共识投票,最后一次投票的结果形成commitblock信息,前面投票的结果都是pre-commitblock信息,每次投票的结果proposer节点都收集并广播给其他区块链节点的情况。

s305、每个第二区块链节点将所述提议块信息与所述确认块信息进行比对。

进一步地,如果所述提议块信息与所述确认块信息相同,则所述每个第二区块链节点将所述每个第二区块链节点对应的交易预处理的结果存入数据库;

如果所述提议块信息与所述确认块信息不同,则所述每个第二区块链节点根据所述确认块信息获得所述每个第二区块链节点对应的第二交易数据包,并根据所述第二交易数据包进行交易处理;所述每个第二区块链节点将所述交易处理的结果存入数据库。

具体而言,如果所述提议块信息与所述确认块信息相同,则节点a、b、c将各自对应的交易预处理的结果存入数据库;

如果所述提议块信息与所述确认块信息不同,则节点a、b、c根据所述确认块信息重新获得所述各自对应的第二交易数据包,并根据所述第二交易数据包进行交易处理。节点a、b、c将该交易处理的结果存入数据库。

各共识节点比对该commitblock与之前proposedblock是否相同。若二者相同,则说明之前预处理结果是有效的,此时直接将缓存中的预处理结果写入数据库。若不一致,则对commitblock重新进行交易执行,再将结果写入数据库。

在很多情况下,commitblock与之前proposedblock两个结果是一致的。例如,在国内异地跨机房且网络正常的情况下,以共识时间3秒,4个共识节点为例,通过测试可发现超过90%情况为一轮出块,即proposedblock最终会被确认为commitblock。通过本申请实施例提供的方法可以让交易得到预先提前执行,对各个节点的各个功能单元进行有效的协调,使得资源得到有效利用,从而提升区块链系统的性能。

实施例二

下面参照图5详细介绍本说明书实施例的电子设备。请参考图5,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random-accessmemory,ram),也可能还包括非易失性存储器(non-volatilememory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是工业标准体系结构(industrystandardarchitecture,isa)总线、外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成内容推荐装置。处理器,执行存储器所存放的程序,并具体用于执行前文所述服务器作为执行主体时所执行的方法操作。

上述如本说明书实施例图3所示实施例揭示的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图3的方法,并实现交易预处理装置在图3所示实施例的功能,本说明书实施例在此不再赘述。

当然,除了软件实现方式之外,本说明书实施例的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

实施例三

本说明书实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行实施例一所述的方法。

其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等。

实施例四

参照图6所示,为本说明书实施例提供的交易预处理装置600的结构示意图,该装置主要包括:

广播模块601,用于第一区块链节点将提议块信息广播给一个或多个第二区块链节点。

处理模块602,用于每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理。

其中,所述第一区块链节点和所述第二区块链节点为区块链网络中的共识节点。

在一种可能的实现方式中,处理模块602,还用于所述每个第二区块链节点根据所述提议块信息获得所述每个第二区块链节点对应的第一交易数据包,并根据所述第一交易数据包按照一定的规则进行交易预处理。

可选的,所述每个第二区块链节点将交易预处理的结果不存入数据库,存入各自的缓存中。

在一种可能的实现方式中,处理模块602,还用于在所述每个第二区块链节点根据所述提议块信息按照一定的规则进行交易预处理之后,所述每个第二区块链节点进行第一轮共识投票,所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息。

可选的,处理模块602,还用于在所述第一区块链节点根据所述第一轮共识投票的结果获得预确认块信息之后,所述每个第二区块链节点进行第二轮共识投票,所述第一区块链节点根据所述第二轮共识投票的结果获得确认块信息;所述每个第二区块链节点将所述提议块信息与所述确认块信息进行比对。

进一步地,如果所述提议块信息与所述确认块信息相同,则所述每个第二区块链节点将所述每个第二区块链节点对应的交易预处理的结果存入存储模块603;

如果所述提议块信息与所述确认块信息不同,则所述每个第二区块链节点根据所述确认块信息获得所述每个第二区块链节点对应的第二交易数据包,并根据所述第二交易数据包进行交易处理;所述每个第二区块链节点将所述交易处理的结果存入存储模块603。

通过本申请实施例提供的装置可以让交易得到预先提前执行,对各个节点的各个功能单元进行有效的协调,使得资源得到有效利用,从而提升区块链系统的性能。

总之,以上所述仅为本说明书实施例的较佳实施例而已,并非用于限定本说明书实施例的保护范围。凡在本说明书实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的保护范围之内。

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

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

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

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

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