基于区块链的交易处理方法和装置
技术领域
本公开的实施例总体上涉及区块链技术,并且更具体地涉及基于区块链的交易处理方法和装置。
背景技术
区块链网络是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网。区块链技术包括利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据等。
在区块链网络中,所有的交易数据都以区块的形式记录在各个节点上,而每个区块又以单独的文件的形式保存在节点本地磁盘上。交易是在区块链网络中传输的最基本的数据结构,所有有效的交易最终都会被打包进区块中并保存在区块链上。区块是由多个账户发起的多个交易的集合,它被标记上时间戳和之前一个区块的独特标记。有效的区块在获得全网络的共识认可之后会被追加到主区块链中。区块链是由包含交易信息的区块从后向前有序链接起来的数据结构。
在现有技术中,底层的区块链系统可通过设置区块大小和区块间隔时间来决定何时出块。另外,为了避免双花(即,同一笔交易被执行两次)的交易问题,对于每个账户而言,其发起的每个交易通过一nonce值或其他值来标识唯一性,并且nonce值按交易依次增加。也就是说,每个账户都有一个叫做nonce的字段,用来记录该账户已经执行的交易总数。Nonce的值随着每个交易的执行不断增加,这让网络了解执行交易需要遵循的顺序。然而,在这种现有技术中,如果客户端系统在放在区块中的针对一个账户的当前交易没有被成功处理就发起针对该账户的下一笔交易会导致区块链系统交易处理的异常(例如,交易不连续性或双花等),而如果客户端系统等待区块中的当前交易已被成功处理才发起下一笔交易,则会导致系统性能过低,例如交易处理时间过长、区块链系统单位时间内能够处理的交易数量过少等。
发明内容
针对现有技术中存在的技术问题以及其他潜在的技术问题,本公开的实施例旨在提供一种基于区块链的交易处理方法和装置,使得可以通过动态配置实现区块链底层系统构建区块的动态可扩展性,并使得客户端系统能够动态适配区块链系统的配置,从而以批量发起交易,而无需同步等待每一交易执行的结果,而且使得能够实现交易状态的异步查询机制。
在本公开的第一方面,提供了一种基于区块链的交易处理方法,包括:向所述区块链系统发送调用区块配置参数的请求,所述区块配置参数至少包括批处理交易数;从所述区块链系统获取所请求的区块配置参数;分批向所述区块链系统发起交易,以供所区块链系统进行处理,其中每一批次向所述区块链系统发起的交易的数量等于所述批处理交易数。
在本公开的第二方面,提供了一种基于区块链的交易处理装置,包括:处理器;存储器,所述存储器耦合至所述处理器并且存储有指令,当所述指令执行时使得所述处理器执行以下动作:向所述区块链系统发送调用区块配置参数的请求,所述区块配置参数中至少包括批处理交易数;从所述区块链系统获取所请求的区块配置参数;分批向所述区块链系统发起交易,以供所区块链系统进行处理,其中每一批次向所述区块链系统发起的交易的数量等于所述批处理交易数。
本公开的实施例通过预先在区块链底层系统处预先设置区块配置参数(可包括批处理交易数和区块间隔时间),并使得客户端系统可经由批处理交易接口调用该区块配置参数,使得客户端系统能够适配区块链系统的这些配置,从而能以批量方式发起交易并以异步分次查询方式来查询交易执行的结果,而且还使得区块链系统可结合客户端系统从系统级的角度提升区块链系统的性能,例如增加了区块链系统在单位时间内可实现的交易的数量(即交易吞吐量)、节省了资源开销等等。
附图说明
参考附图示出并阐明本发明的各实施例。这些附图仅用于阐明基本原理,并示出对于理解该基本原理所必要的方面,而不旨在限制本发明所要求保护的范围。在附图中,相同的附图标记表示相似的特征。
图1例示了可用于实施本公开的示例实施例的基于区块链的交易处理系统100的架构的示意图。
图2例示了根据本公开的实施例的用于向区块链系统发起交易的过程200的流程图。
图3例示了根据本公开的实施例的由区块链系统对客户端系统发起的每一批交易进行处理的过程300的流程图。
图4例示了根据本公开的实施例的用于对每一批交易的执行结果进行查询的过程400的流程图。
具体实施方式
下面将结合附图更详细地描述本发明的各个示例性实施例。虽然附图中流程图和示意图显示了本发明的一些实施例,然而应当理解的,本发明可以通过各种形式来实现,而且不应被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于说明性作用,并非用于限制本发明的保护范围。
图1例示了可用于实施本公开的示例实施例的用于提高区块链系统的性能的系统100的架构的示意图。系统100包括客户端系统110和区块链系统120。
在本公开的实施例中,客户端系统110(例如,移动设备或固定设备)可经由网络(例如,有线网络或无线网络)连接到区块链系统120的每一节点。
区块链系统120包括通过网络连接的多个区块链节点设备(在本文中也被称为节点),例如节点121、122和123。虽然图1中示出的区块链系统120包括三个节点,但应领会,在实际应用中,区块链系统120可包括更多或更少的区块链节点。在本公开的实施例中,这些区块链节点中的每个节点可以为计算设备,计算设备可以为服务器或者用户设备(例如,移动设备或固定设备)。这些区块链节点设备之间可以通过网络来同步数据,因而能够避免中心化节点所带来的安全隐患和安全风险。网络可以是任何有线和/或无线网络。任选地,网络可以包括但不限于,因特网、广域网、城域网、局域网、虚拟专用网络、无线通信网络等等。
在本公开的实施例中,公开了一种基于区块链的交易处理方法。该交易处理方法主要包括:以下将参考图2详述的由客户端系统实施的用于向区块链系统发起交易(例如,转账、付款等)的过程;以下将参考图3详述的区块链系统对客户端系统发起的每一批次的交易进行处理的过程;以及以下将参考图4详述的用于针对向所述区块链系统发起的每一批次的交易,向所述区块链系统的节点查询该批次的交易的执行结果的过程。在一种实现中,以上三个过程可以并行进行。
图2例示了根据本公开的实施例的由客户端系统实施的用于向区块链系统发起交易的过程200的流程图。
在步骤201中,向区块链系统(例如,区块链系统的某一节点)发送调用区块配置参数的请求。该区块配置参数可通过区块链系统的任一节点预先设置。在一个实现中,该区块配置参数按配置文件的形式被存储在与该区块链系统相关联的存储设备中。例如,该配置文件被存储在该区块链系统的每一节点可访问的存储设备(例如,数据库)中。在一个实现中,区块配置参数可至少包括批处理交易数。批处理交易数是指客户端系统每一批次需要向区块链系统发起的交易数量。应领会,在区块链系统中,各个交易一般都是通过相应智能合约来完成执行的,因此该数量与要调用的智能合约有关。在另一实现中,该区块配置参数进一步包括区块间隔时间。区块间隔时间是指前后两个连续的出块完成时间点之间的最大时间间隔。在又一实现中,该区块配置参数还进一步包括区块大小(即区块字节数),其是指区块的最大字节大小。以上配置参数可例如基于区块链的共识机制、各节点的CPU主频、各节点的数据存储性能以及不同节点之间网络通信和数据同步性能等等来确定。在一个实现中,客户端设备可例如在重启后重新设置以上区块配置参数。
在步骤202中,从区块链系统获取所请求的区块配置参数。例如,所请求的区块配置参数可由区块链系统中与以上请求相关联的节点响应于该请求,通过与该节点的交易接口向其返回。
在步骤203中,分批(即一批一批地)向区块链系统(例如,该区块链系统的每一节点)发起交易,并将所发起的每一交易的状态设置为正在处理中,其中每一批次向区块链系统发起的交易的数量可小于或等于(优选为等于)批处理交易数。所提交的各批次的交易可被暂存在例如当前节点的内存中的交易池(Transaction Pool)中的排队队列(queuedqueue)中,以等待执行处理和出块。在本公开的实施例中,客户端系统可在向区块链系统发起一批交易之后,立即发起下一批交易,也可在向区块链系统发起一批交易之后,等待小段时间后在发起下一批交易。具体取决于区块链系统设置的批处理交易数的值。例如,仅作为示例,在所设置的批处理交易数的值为500的情况下,各批次的交易的提交之间可不用等待,而在所设置的批处理交易数的值为1000的情况下,则各批次的交易的提交之间可等待2秒到5秒左右。另外,由于区块链节点可能还涉及到共识通信和交易通信,因此各批次的交易的提交可能还会收到网络延迟或者节点偶发故障(例如,CPU资源负载影响、硬盘写入等)等的影响。但这些影响均非常小,因此本公开的效果并不会因此收到影响。
通过以上方法,由于客户端系统可以在发起交易之前,先获得至少包括批处理交易数的区块配置参数,使得客户端系统能够动态适配区块链系统的配置,从而能批量发起交易,而无需同步等待每一交易动态执行的结果。
此外,由于客户端系统是批量向区块链系统发起交易的,因此在本公开中,区块链系统可以一批一批地处理交易,从而使得区块链系统单位时间内可处理的交易的数量增加了。
图3例示了根据本公开的实施例的区块链系统对客户端系统发起的每一批次的交易进行处理的过程300的流程图。
在步骤301中,区块链系统的各节点对客户端系统该批次发起的交易进行所需的处理(例如,通过调用相应的智能合约来对该批次发起的交易进行处理)。
在步骤302,各节点对该批次交易的执行结果进行相互验证。该批次的交易的执行结果可以为成功或失败。在本公开的实施例中,如果该批次的交易中的任一交易的执行结果经验证为成功,则该交易将被转存到交易池中的待处理队列(pending queue)中,以等待出块。而如果该批次的交易中的任一交易的执行结果经验证为失败,则该交易将在由客户端系统查询到该结果后决定是否重新提交。另外,在本公开的实施例中,会在各节点的本地存储中存储用于指示各交易执行结果为成功还是失败的描述或标记。在本公开的实施例中,该节点还会将该用于指示各交易的执行结果为成功还是失败的描述或标记同步到该区块链系统的其他节点的本地存储中。
在步骤303中,判断出块条件是否满足。在出块条件未满足的情况下,则等待。
在步骤304中,在出块条件满足的情况下(例如,在区块间隔时间到期时,或者在区块字节大小被达到时,或者在交易池的待处理队列(pending queue)中的交易的数量达到批处理交易数时,就可认为出块条件被满足),将待处理队列中的交易打包到整个区块中。一般情况下,在实际使用中,当该批次交易中的每一交易的执行结果都为成功的情况下,则在以上验证后即可确定出块条件被满足。另外,在当该批次交易中的任一个或多个交易的执行结果为失败的情况下,在以上验证后则需等待,直到区块间隔时间到期。
在步骤305中,将出块序号(nonce值)增加1(其中,第一批被出块的交易的出块序号被设为0)。由此可知,在本公开的实施例中,每一批次向区块链系统发起的交易时根据其被出块的次序被分配一出块序号的。另外,在本公开的实施例中,该节点会将该用于指示该批次的交易执行结果为成功的描述或标记会被同步到该区块链系统的其他节点的本地存储中。
在步骤306中,将经打包的区块在整个区块链网络中广播(即,将经打包的区块发送到区块链网络的所有节点处),然后由区块链系统中的所有节点通过共识算法(例如,POW(工作量证明机制)、POS(权益证明机制)、DPOS(股份授权证明机制)、PBFT(实用拜占庭))对该区块进行共识确认。
在步骤307中,在区块链系统中的所有节点通过共识算法对区块达成共识的情况下,将该区块存储到区块链的账本中。
在处理完一批交易后,区块链系统对下一批次的交易执行以上步骤301-307,直到所发起的所有批次的交易都被处理为止。
在本公开的实施例中,客户端系统还可以按异步分次查询的方式对交易的执行结果进行查询。在本公开的实施例中,异步是相对于前面提到的同步等待每一交易执行的结果来说的。也就是说,在本公开的实施例中,交易的发起并不取决于已查询得到该交易的结果,即客户端系统不需要同步等待区块链系统向其返回了该交易的结果以后才能发起下一笔交易。这里的分次指的是,可多次查询交易的执行结果。
图4例示了根据本公开的实施例的用于针对向所述区块链系统发起的每一批次的交易,向所述区块链系统的节点查询该批次的交易的执行结果的过程400的流程图。
在步骤401中,客户端系统可在距离该批次的交易发起时间达1倍或更多倍(优选为1倍)区块间隔时间之际,向区块链系统(例如,区块链系统的任一节点)发起针对该批次的交易的执行结果的第一次查询请求。
在步骤402中,响应于该查询请求,从区块链系统中(例如,从区块链系统的以上节点的本地存储中)查询该批次的交易的执行结果。
在步骤403中,判断是否查询到针对该批次的交易中的每一交易的执行结果。
在步骤404中,在区块链系统(例如,区块链系统中的以上节点)没有查询到针对该批次的交易中的各交易的执行结果的情况下(例如,当该批次的交易还未被区块链系统处理的情况下,就无法查询到针对该批次的交易的执行结果),向客户端系统发送未查询到相应执行结果的通知。
在步骤405中,在区块链系统(例如,区块链系统中的以上节点)查询到针对该批次的交易中的所有交易的执行结果的情况下,向客户端系统返回针对该批次的交易中的所有交易的执行结果,如前所述,该结果可以为成功或失败。
在步骤406中,在客户端系统接收到该批次的交易中的所有交易的执行结果的情况下,根据该执行结果,将该批交易中的各交易的交易状态相应地修改为成功或失败(即如果相应的执行结果为成功,则将交易状态修改为成功,而如果执行结果为失败,则将交易状态修改为失败)。这里失败包括由于执行条件不满足(例如,对于转账交易而言,如果转账方的余额不足,则该交易的执行结果将为失败)。
在步骤407中,在客户端系统接收到未查询到针对该批次的交易中的任一交易的执行结果的通知的情况下,客户端系统可在距发起第一次查询请求的时间达区块间隔时间的倍数的时间处,发起针对该批次的交易的执行结果的后续查询请求。在发起各次查询请求后,执行与步骤402-407相同的步骤,直到查询到执行结果为止。
在本公开的实施例中,在查询到该批次交易中的任一交易的交易状态为失败的情况下,用户根据实际情况决定是否重新提交该交易。
在本公开中,每一次查询被执行的时间与区块间隔时间相关联。另外,随着查询次数的增加,查询间隔时间也可相应地增加。例如,发起第二次查询请求和发起第一次查询请求之间的查询间隔时间可为区块间隔时间的2倍或更多倍(优选为2倍),发起第三次查询和发起第二次查询之间的查询间隔时间可为区块间隔时间的3倍或更多倍(优选为4倍),发起第四次查询和发起第三次查询之间的查询间隔时间可为区块间隔时间的4倍或更多倍(优选为8倍),并此次类推。
在本公开的实施例中,在客户端系统向区块链系统查询交易结果期间,客户端系统可继续发起后面批次的交易,而不会对后面批次的交易的发起造成不良的影响。
图2-4中的过程的流程还代表机器可读指令,该机器可读指令包括由处理器执行的程序。该程序可被实体化在被存储于有形计算机可读介质的软件中,该有形计算机可读介质如CD-ROM、软盘、硬盘、数字通用光盘(DVD)、蓝光光盘或其它形式的存储器。替代的,图2-4中的过程中的一些步骤或所有步骤可利用专用集成电路(ASIC)、可编程逻辑器件(PLD)、现场可编程逻辑器件(EPLD)、离散逻辑、硬件、固件等的任意组合被实现。另外,虽然图2-4所示的流程图描述了该数据处理方法,但可对该处理方法中的步骤进行修改、删除或合并。
如上所述,可利用编码指令(如计算机可读指令)来实现图2-4的示例过程,该编程指令存储于有形计算机可读介质上,如硬盘、闪存、只读存储器(ROM)、光盘(CD)、数字通用光盘(DVD)、高速缓存器、随机访问存储器(RAM)和/或任何其他存储介质,在该存储介质上信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。如在此所用的,该术语有形计算机可读介质被明确定义为包括任意类型的计算机可读存储的信息。附加地或替代地,可利用编码指令(如计算机可读指令)实现图2-4的示例过程,该编码指令存储于非暂时性计算机可读介质,如硬盘,闪存,只读存储器,光盘,数字通用光盘,高速缓存器,随机访问存储器和/或任何其他存储介质,在该存储介质信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。可以理解的,该计算机可读指令还可以存储在网络服务器中、云端平台上,以便于用户使用。
另外,尽管操作以特定顺序被描绘,但这并不应该理解为要求此类操作以示出的特定顺序或以相继顺序完成,或者执行所有图示的操作以获取期望结果。在某些情况下,多任务或并行处理会是有益的。同样地,尽管上述讨论包含了某些特定的实施细节,但这并不应解释为限制任何发明或权利要求的范围,而应解释为对可以针对特定发明的特定实施例的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以整合实施在单个实施例中。反之,在单个实施例的上下文中描述的各种特征也可以分离地在多个实施例或在任意合适的子组合中实施。
因此,虽然参照特定的示例来描述了本发明,其中这些特定的示例仅仅旨在是示例性的,而不是对本发明进行限制,但对于本领域普通技术人员来说显而易见的是,在不脱离本发明的精神和保护范围的基础上,可以对所公开的实施例进行改变、增加或者删除。