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

交易的执行方法、节点和区块链系统

文献发布时间:2024-01-17 01:26:37


交易的执行方法、节点和区块链系统

技术领域

本说明书实施例属于区块链技术领域,尤其涉及一种交易的执行方法、节点和区块链系统。

背景技术

区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。再例如,基于区块链网络可以在不同用户账户之间实现转账;再例如,还可以基于区块链网络发行数字画作、数字头像、GIF等数字藏品对应的NFT(Non-Fungible Token,非同质化代币),以便NFT所承载的数字藏品的所有权能够在区块链网络的用户之间流通,从而产生对应于数字藏品的价值。

在相关技术中,对于共识通过的各个区块,区块链网络中的区块链节点按照区块高度的顺序依次执行各个区块中的区块链交易,在任一区块中的交易被执行完毕后,按照所述区块高度的顺序提交相应的执行结果,以完成该区块的上链存证。

发明内容

本说明书提供一种交易的执行方法、节点和区块链系统。具体地,本说明书是通过如下技术方案实现的:

根据本说明书实施例的第一方面,提供了一种交易的执行方法,应用于区块链系统中的第一节点,第一节点中包含控制进程和多个计算进程,所述方法包括:

所述控制进程获取第一区块中待执行的第一交易;

所述控制进程在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程;

第一计算进程执行接收到的第一交易。

根据本说明书实施例的第二方面,提供了一种区块链系统中的第一节点,第一节点中包含控制进程和多个计算进程,所述控制进程用于:

获取第一区块中待执行的第一交易;

在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程执行。

根据本说明书实施例的第三方面,提供了一种区块链系统,包括第一节点和第二节点,第一节点中包含控制进程和多个计算进程,其中:

第二节点用于向第一节点发送第一区块中待执行的第一交易;

第一节点用于在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程执行。

根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面中任一项所述的方法的步骤。

根据本说明书实施例的第五方面,提供了根据一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。

在本说明书所提供的技术方案中,区块链网络中的第一节点包含控制进程和多个计算进程,其中,控制进程先获取第一区块中待执行的第一交易,然后在确定存在处于执行阶段的第二区块的情况下响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程;最终由第一计算进程执行接收到的第一交易。

可以理解的是,确定存在处于执行阶段的第二区块,即表明第一节点当前正在执行第二区块中的交易;结合响应于第一交易不依赖于第二区块中的第二交易将第一交易发送至第一计算进程执行可见,第一节点在第一交易不依赖于第二交易的情况下,可以同时执行第一交易和第二交易。换言之,在第一区块中的第一交易不依赖于第二区块中的第二交易的情况下,第一节点可以并行执行第一区块(中的第一交易)和第二区块(中的第二交易)。相对于串行执行不同区块的相关技术方案,本方案中的第一节点可以并行执行多个区块,显著加快区块的整体执行速度,有助于提升区块的执行及后续处理效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。

附图说明

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

图1是一示例性实施例提供的一种区块链系统的示意图;

图2是相关技术提供的一种区块链节点中的交易执行流程示意图;

图3是一示例性实施例提供的一种交易的执行方法的流程图;

图4为一实施例提供的一种区块链节点中的交易执行流程示意图;

图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图;

图6是一示例性实施例提供的一种设备的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与本说明书的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

图1是一示例性实施例提供的一种区块链系统的示意图。如图1所示,区块链系统是通过多个节点(Node)来建立的分布式网络,其包含任意两个节点间通过点对点(Peer-to-Peer,P2P)网络实现在应用层的通信连接,例如其包含的节点n1~节点n5中的任意两个节点间均可通过P2P网络实现在应用层的通信连接。区块链系统利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链系统中的每个节点(或大多节点上,如共识节点)上,因此区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。鉴于此,区块链系统的每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,将交易打包成区块并基于相同交易的执行结果更新世界状态。其中当前主流的共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、实用拜占庭容错(PracticalByzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT)算法等等。

区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(From)、接收字段(To)和数据字段(Data)。区块链中的交易可包括平台交易和合约交易。平台交易主要围绕着平台账号操作,包括创建账号、转账、冻结账号、解冻账号、发行资产、存证等。合约交易主要围绕着合约执行操作,包括部署合约、调用合约、升级合约等。

例如,在交易为转账交易的情况中,From字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,To字段表示接收该交易(即接收转账)的账户地址,Data字段中包括转账金额。在交易为调用合约的交易的情况中,From字段表示发起该交易的账户地址,To字段表示交易所调用的合约的账户地址,Data字段中包括调用合约中的函数名、及对该函数的传入参数等数据,以用于在交易执行时从区块链中获取该函数的代码并执行该函数的代码

其中,区块链中的账户通常可以分为两种类型:

合约账户(contract account):存储执行的智能合约代码以及智能合约代码中状态的值,通常只能通过外部账户调用激活;

外部账户(Externally owned account):区块链用户的账户。

区块链中的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链中每个节点分布式地运行智能合约代码。需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。其中,所述系统合约可用于在区块链中增加不同服务相关数据的数据结构。

在部署合约的场景中,例如,Bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93…”,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并将合约代码保存在该合约的状态存储中,从而合约创建成功。

在调用合约的场景中,例如,Bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。

所述区块链系统中的区块链节点可以执行区块链交易。区块链节点可以包括多个线程,从而节点可以通过这些线程并发执行交易。例如,在待执行的交易有多个的情况下,区块链节点可以将多个交易分发至多个线程,以由各个线程分别执行(即并发执行)自身接收到的交易,从而提升区块链交易的整体执行效率。

示例性的,对于转账交易,区块链节点首先根据交易访问的账户将多个交易划分为多个交易分组,各个交易分组之间不访问相同的账户,从而可并行执行各个交易分组。然而,当交易中调用智能合约时,在执行该交易之前不能预知该交易中访问的变量,从而无法对多个交易进行有效的分组,也就无法并行执行交易。在一种实施例中,可由区块链中的第二节点(例如图1中的节点n1)对多个交易进行预执行,得到各个交易的预执行信息(包括预执行读写集、交易耗时指标等),并通过与其他节点之间的共识过程将该预执行信息发送给区块链中包括第一节点在内的其他节点(例如图1中的节点n2~n5)。所述其他节点可根据多个交易的预执行读写集对多个交易进行分组,从而可根据分组结果并行执行该多个交易。

在相关技术中,对于共识通过的各个区块,区块链网络中的区块链节点按照区块高度的顺序依次执行各个区块中的区块链交易,在任一区块中的交易被执行完毕后,按照所述区块高度的顺序提交相应的执行结果,以完成该区块的上链存证。如图2所示的交易执行流程,第一节点正在以流水线的方式依次处理区块N、区块N+1与区块N+2中的交易。其中任一区块的处理过程需要多个流水线相互配合,以区块N为例,在共识流水线对区块N共识完成后,分析流水线开始按照其预执行信息进行交易分析(即划分交易分组),分析完成后由执行流水线控制多个计算进程并行执行各个交易组中的交易并根据执行结果更新缓存中的相关状态数据,进而在更新完成后由验证流水线参与针对执行结果的证明过程,在证明通过的情况修,由持久化流水线提交区块及执行结果以将区块及相应的状态数据持久化。

其中,针对交易的并行执行操作仅限制于区块N、区块N+1或区块N+2的内部,具体的,区块N中的多个交易之间并行执行、区块N+1中的多个交易之间也可以并行执行、区块N+2中的多个交易之间并行执行。同时,针对交易的并行执行操作在不同区块之间串行完成,如在区块N执行完成并更新状态后执行区块N+1、在区块N+1执行完成并更新状态后执行区块N+2等,不再赘述。可见,该方案中的各个区块之间需要按序依次执行,即串行执行各个区块,导致区块的整体执行效率较低,执行方式有待改进。

对此,本说明书提供了一种新的交易的执行方法,下面结合图3对该执行方法进行详细说明。

图3是一示例性实施例提供的一种交易的执行方法的流程图。如图3所示,该方法应用于区块链系统中的第一节点,所述第一节点可以为所述区块链系统中发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点),无论所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。

第一节点中可以包含控制进程和多个计算进程。需要说明的是,所述控制进程和多个计算进程可以为分立的概念,这些进程在逻辑上归属于第一节点。其中,第一节点的节点程序(用于实现节点的控制逻辑)可以部署在任一物理设备中,而所述控制进程和多个计算进程中的任一进程既可以部署于该物理设备中,也可以部署于区别于该物理设备的其他物理设备中(如各个进程可以通过集群形式部署在不同的云服务器中)。无论何种部署方式,上述不同进程之间均可以视为“远程”,不同进程之间可以通过相应的进程间通信技术实现信息和数据交互,如RPC(Remote Procedure Call,远程过程调用)技术、PIPE(管道)技术、消息队列(Message Queue)技术等,本说明书并不对此进行限制。所述方法包括下述步骤302-306。

步骤302,所述控制进程获取第一区块中待执行的第一交易。

步骤304,所述控制进程在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程。

在本说明书中,第一区块中可以包含至少一个待执行的第一交易,第一节点可以以区块为单位获取上述第一交易。例如,在第一节点参与针对第一区块的共识过程的情况下,可以在共识过程中获取第一区块中的各个第一交易(如各个第一交易可以被包含在针对第一区块的共识提议中,由发起提议的主节点发送至区块链网络中参与共识的其他各个节点);或者,也可以从区块链网络中的其他节点(如前述主节点)处接收各个第一交易,这些交易可以由所述其他节点在第一区块共识通过的情况下发送。另外,本说明书对于所述第一区块和第二区块的区块高度并不进行限制,下文实施例以第一区块的区块高度高于第二区块的区块高度为例进行说明,如图4所示,在区块N为第二区块时,第一区块可以为区块N+1;而在区块N+1为第二区块时,第一区块可以为区块N+2,不再赘述。

可以理解的是,第二区块中同样可以包含至少一个区块。控制进程确定存在处于执行阶段的第二区块,即表明所述第一节点当前时刻正在执行第二区块中的交易,即第二区块中的全部交易在当前时刻并未执行完毕。而此时将第一交易发送至第一计算进程执行,使得第一节点实现了对第一区块和第二区块的并行执行(本说明书所述执行任一区块,即为执行该区块中的交易,特此说明)。具体而言,在第二区块包含多个第二交易的情况下,全部第二交易在当前时刻可能存在多种状态:可能全部第二交易均正在执行且尚未完成;可能其中部分第二交易正在执行且尚未完成、其余第二交易已经执行完成(即已执行完毕);也可能其中部分第二交易正在执行且尚未完成、其余第二交易尚未开始执行;还可能其中一部分第二交易已经执行完成、另一部分第二交易正在执行且尚未完成、其余第二交易尚未开始执行。其中,无论何种状态,当前时刻未执行完成的第二交易,均包含上述正在执行且尚未完成的第二交易,除此之外还可能包含尚未开始执行的第二交易。

在一实施例中,所述第一交易不依赖于第二区块中的第二交易,可以被理解为第一交易至少不依赖于当前时刻第二区块中未执行完成的第二交易,具体可能存在多种情况。例如,第一区块中的第一交易可以不依赖于第二区块中的第二交易。其中,在第一区块包含多个第一交易的情况下,若其中每一第一交易均不依赖于第二区块中的第二交易,则可以将各个第一交易分别发送至所述多个计算进程中的第一计算进程;或者,若全部第一交易仅存在部分第一交易不依赖于第二区块中的第二交易,则可以将这部分第一交易分别发送至所述多个计算进程中的第一计算进程。可见,本说明书所述控制进程在执行第二交易的同时发送至第一计算进程执行的第一交易,均为不依赖于第二交易的第一交易。通过该方式,无论第一区块中存在多少不依赖于第二交易的第一交易,均可以将这部分第一交易发送至相应的第一计算进程执行,以充分实现不同区块内无依赖交易之间的并行执行。再例如,考虑到存在依赖关系的各个交易之间需要按照依赖关系顺序执行,所以当前时刻已执行完成的第二交易必然不依赖于所述第一交易(第一交易当前尚未执行),因此只需要确保第一交易不依赖于当前时刻第二区块中未执行完成的第二交易,即可开始并行执行第一交易。通过该方式,可以减少控制进程需要比较的是否被第一交易所依赖的第二交易的数量,从而减轻控制进程的工作量。

正常情况下,任一交易的实际执行过程(即第一节点对该交易的执行过程)与其预执行过程(如主节点对该交易的预执行过程)相同,相应的执行结果以及读写集也保持一致。因此可以根据交易在预执行阶段产生的预执行信息确定交易之间是否具有依赖关系——该依赖关系用于反映交易实际执行阶段的相互关系。

在一实施例中,所述控制进程还可以从第一交易的第一预执行信息中确定第一交易的第一预执行读集和第一预执行写集;以及,从第二交易的第二预执行信息中确定第二交易的第二预执行读集和第二预执行写集。其中,控制进程可以与任一交易一并获取该交易的预执行信息,如从主节点处同时接收其发送的各个第一交易及其相应的第一预执行信息,并接收其发送的各个第二交易及其相应的第二预执行信息等,不再赘述。任一交易的预执行信息可以包含该交易的预执行读写集,所述预执行读写集可以包括预执行读集和预执行写集,其中,预执行读集包括该交易在预执行中读取的变量的键值对,预执行写集包括该交易在预执行中写入的变量的键值对。所述变量例如包括区块链中的外部账户、或者为合约账户中定义的变量等。基于此,在第二预执行写集与第一预执行写集和第一预执行读集均不存在交集的情况下,即可确定第一交易不依赖于第二交易。可以理解的是,第二预执行写集与第一预执行写集和第一预执行读集均不存在交集,表明在预执行阶段,第二交易写入的变量既不会被第一交易读取也不会被第一交易写入,因此第二交易预执行过程中针对变量的写入操作并不会影响第一交易的预执行过程,所以此时可以确定第一交易不依赖于第二交易。

其中,在第一节点并非所述区块链系统中的主节点的情况下,第一区块中的多笔第一交易各自的第一预执行信息可以由所述主节点预执行所述多笔第一交易得到。基于此,所述控制进程可以从所述主节点处获取所述多笔第一交易各自的第一预执行信息。

在一实施例中,为进一步提升交易执行效率,在第一区块中包含多笔第一交易的情况下,可以按照第一预执行信息将所述多笔第一交易划分为相应的交易分组,并以交易分组为单位发送第一交易。其中,所述多笔第一交易可以由其提供方(如主节点)进行分组,或者也可以由第一节点进行分组。例如,所述控制进程在获取第一区块中待执行的第一交易时,可以获取基于所述多笔第一交易各自的第一预执行信息对所述多笔第一交易进行分组得到M个交易分组。具体而言,可以获取按照分组情况处理(如打包、压缩等)成的M个交易分组,任一交易分组中可以提取出相应的至少一个第一交易;或者,也可以获取全部第一交易和相应的分组信息,所述分组信息用于表征所述M个交易分组的分组情况(即各个分组具体包含哪些交易)。再例如,在获取到前述多笔第一交易的情况下,控制进程也可以根据所述多笔第一交易各自的第一预执行信息对所述多笔第一交易进行分组得到M个交易分组。其中,M>1,即至少划分为两个交易分组,其中各个交易分组中的第一交易互不相同。另外,任一交易分组中的各个第一交易之间可以存在连续的依赖关系,如在第一交易Tx1依赖于Tx2、第一交易Tx2同时依赖于Tx3和Tx4的情况下,可以将第一交易Tx1~Tx4划分至同一交易分组。基于上述交易分组,控制进程可以响应于所述M个交易分组中的每笔交易均不依赖于第二区块中的第二交易,将所述M个交易分组分别发送至所述多个计算进程中相应的第一计算进程。通过该方式,相互之间存在依赖关系的第一交易被划分至同一交易分组,而不存在依赖关系的第一交易被划分至不同的交易分组,便于接收到任一交易分组的第一计算进程按照该分组内各个交易之间的依赖关系顺序执行各笔交易,尽量避免交易执行顺序混乱可能导致的执行结果出错。

需要说明的是,对于第一节点中的多个计算进程,用于执行第一交易的第一计算进程,可以为所述多个计算进程中的任意部分计算进程或全部计算进程。若将执行第二交易的计算进程记为第二计算进程,则在当前时刻,任一第二计算进程可能已经接收到至少一个第二交易但尚未开始执行,或者当前正在执行接收到的至少一个第二交易。可以理解的是,所述多个计算进程中的任一计算进程,可以为作为第一计算进程,也可以作为第二计算进程,还可以同时作为第一计算进程和第二计算进程;换言之,本说明书所述的第一计算进程和第二计算进程可以存在重叠。

另外需要说明的是,若某一第一计算进程同时也是第二计算进程,则针对自身接收到的第一交易和第一交易,该计算进程可以串行执行第一交易和第二交易(如在执行第二交易完成后再执行第一交易),也可以由其内部的多个线程并行执行第一交易和第二交易。但无论何种执行方式,就第一区块和第二区块而言,两区块仍然是被并行执行的。

在一实施例中,如前所述,第一交易被划分为M个交易分组,不妨记第一计算进程的数量为N。在N≥M的情况下,为了尽量加快全部第一交易的整体执行速度,即提升M个交易分组的整体执行效率,可以将M个交易分组分别发送至不同的计算进程,其中每一计算进程最多接收到一个交易分组,此时接收到交易分组的计算进程即可执行该交易分组中的各笔第一交易,而接收到不同交易分组的计算进程即可并行执行不同的交易分组(中的第一交易),从而实现全部第一交易在M个交易分组层面的并行执行。

而在N

进一步的,在所述控制进程将所述M个交易分组分别发送至所述多个计算进程中相应的第一计算进程时,可以根据所述分组预期耗时指标将所述M个交易分组分发至所述N个第一计算进程,以使所述N个第一计算进程的任务预期耗时指标趋于一致,其中,各个第一计算进程接收到的交易分组互不相同,任一第一计算进程的任务预期耗时指标为该第一计算进程执行自身所接收交易分组中的全部第一交易需要的总时长。可以理解的是,N个第一计算进程的任务预期耗时指标(即计算进程执行自身所接收全部交易分组中的全部交易需要的时长)趋于一致,即确保N个第一计算进程尽量在同一时刻执行完成各自接收到的交易,或者完成各自接收到的交易的时刻尽量接近,避免了部分第一计算进程消耗较长时间等待其他的第一计算进程执行完成。

步骤306,第一计算进程执行接收到的第一交易。

在一实施例中,第一区块中可以包含多笔第一交易,所述第一计算进程在执行接收到的第一交易时,可以在接收到至少两个第一交易的情况下,通过多个线程并行执行所述至少两个第一交易。其中,该方式可以适用于任一第一计算进程,所述多个线程可以运行于该第一计算进程内部,并通过线程调度和任务争抢等方式分别获取相应的第一交易以执行。

可以理解的是,确定存在处于执行阶段的第二区块,即表明第一节点当前正在执行第二区块中的交易;结合响应于第一交易不依赖于第二区块中的第二交易将第一交易发送至第一计算进程执行可见,第一节点在第一交易不依赖于第二交易的情况下,可以同时执行第一交易和第二交易。换言之,在第一区块中的第一交易不依赖于第二区块中的第二交易的情况下,第一节点可以并行执行第一区块(中的第一交易)和第二区块(中的第二交易)。相对于串行执行不同区块的相关技术方案,本方案中的第一节点可以并行执行多个区块,显著加快区块的整体执行速度,有助于提升区块的执行及后续处理效率。

如图4所示,在Tn+1时刻,区块N+2中的多笔交易(即第一交易)完成分析N+1(即完成分组),此时相应的计算进程(即第二计算进程)执行区块N(中的交易)尚未全部完成,但是由于第一交易至少不依赖于区块N中未执行完成的交易,所以可以控制进程此时可以将第一交易调度至相应的第一计算进程执行,即由执行流水线开始处理第一区块中的各个交易的执行操作。类似的,在Tn+2时刻,区块N+1中的交易尚未全部执行完成,在满足前述条件的情况下,同样可以在此时开始执行第一区块N+2中的交易。通过该方式,可以在Tn+1时刻开始的一段时间内并行执行区块N和区块N+1中的交易,并在Tn+2时刻开始的一段时间内并行执行区块N+1和区块N+2中的交易,从而有助于提升上述区块的整体执行效率。

至此,对第一区块中不依赖于第二交易的部分第一交易的并行执行过程说明完毕。除此之外,对依赖于第二交易的第一交易,第一节点也可以顺利执行这部分交易。需要说明的是,因为第一交易依赖于第二交易,所以为确保第一交易的执行结果准确有效并符合区块高度对应的参数状态,需要在所依赖的第二交易执行完成后再执行第一交易。例如,所述控制进程可以响应于第一交易依赖于第二区块中的第二交易,在确定第二交易执行完成的情况下,将第二交易的执行结果和第一交易发送至所述多个计算进程中的第三计算进程执行。该方式下,第二计算进程可以在执行第二交易完成后将其执行结果返回至控制进程,并由控制进程将该执行结果和第二交易(作为计算任务)一并发送至相应的第三进程。再例如,所述控制进程也可以响应于第一交易依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第三计算进程,并触发第三计算进程在第二交易被执行完成的情况下基于第二交易的执行结果执行第一交易。在该方式下,若第三进程即为执行第二交易的第二计算进程,则该进程可以直接使用自身执行第二交易得到的执行结果执行接收到的第一交易;若第三进程并非执行第二交易的第二计算进程,则控制进程可以将第二计算进程返回的第二交易的计算结果发送给第三进程;或者也可以指示执行第二计算进程将第二交易的执行结果通过进程间通信的方式发送给第三进程。另外需要说明的是,对于不依赖于第二交易的第一交易,由于执行这部分第一交易时第二交易已经执行完成,所以用于执行这部分第一交易的计算进程可以是执行第二交易的第二计算进程,或者也可以是执行第一交易的第一计算进程,还可以是第一计算进程和第二计算进程之外的任一计算进程;换言之,用于执行不依赖于第二交易的第一交易的计算进程,可以为第一节点中的任意计算进程。

在一实施例中,针对第一区块和第二区块中的任一区块,所述控制进程可以在所述任一区块中的各笔交易均执行完成且所述任一区块的前一区块已完成提交的情况下,基于所述任一区块中的各笔交易的执行结果提交所述任一区块。通过该方式,可以完整针对所述任一区块的执行和提交过程,并将相应的交易和执行结果持久化记录在区块链节点的存储空间中。

图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。如图5所示,所述第一节点中包含控制进程52和多个计算进程54,其中,

所述控制进程52用于获取第一区块中待执行的第一交易;以及,在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程54中的第一计算进程54;

所述第一计算进程54用于执行接收到的第一交易。

可选的,所述第一交易不依赖于第二区块中的第二交易,包括:

第一交易不依赖于第二区块中的全部第二交易;或者,

第一交易不依赖于当前时刻第二区块中未执行完成的第二交易。

可选的,

还包括:所述控制进程52从第一交易的第一预执行信息中确定第一交易的第一预执行读集和第一预执行写集;以及,从第二交易的第二预执行信息中确定第二交易的第二预执行读集和第二预执行写集;

所述控制进程52确定第一交易不依赖于第二交易,包括:在第二预执行写集与第一预执行写集和第一预执行读集均不存在交集的情况下,确定第一交易不依赖于第二交易。

可选的,第一区块中包含多笔第一交易,

所述控制进程52获取第一区块中待执行的第一交易,包括:获取M个交易分组,所述M个交易分组基于所述多笔第一交易各自的第一预执行信息对所述多笔第一交易进行分组得到;或者,所述方法还包括:所述控制进程52根据所述多笔第一交易各自的第一预执行信息对所述多笔第一交易进行分组得到M个交易分组;其中,M>1,各个交易分组中的第一交易互不相同;

所述控制进程52响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程54中的第一计算进程54,包括:响应于所述M个交易分组中的每笔交易均不依赖于第二区块中的第二交易,将所述M个交易分组分别发送至所述多个计算进程54中相应的第一计算进程54。

可选的,第一计算进程54的数量N

所述方法还包括:所述控制进程52根据所述M个交易分组中分别包含的各笔第一交易的执行耗时指标,确定所述多个交易分组的分组预期耗时指标,任一交易分组的分组预期耗时指标用于表征执行该交易分组中全部第一交易需要的总时长;

所述控制进程52将所述M个交易分组分别发送至所述多个计算进程54中相应的第一计算进程54,包括:根据所述分组预期耗时指标将所述M个交易分组分发至所述N个第一计算进程54,以使所述N个第一计算进程54的任务预期耗时指标趋于一致,其中,各个第一计算进程54接收到的交易分组互不相同,任一第一计算进程54的任务预期耗时指标为该第一计算进程54执行自身所接收交易分组中的全部第一交易需要的总时长。

可选的,在第一节点并非所述区块链系统中的主节点的情况下,所述控制进程52获取所述多笔第一交易各自的第一预执行信息,包括:

从所述主节点处获取所述多笔第一交易各自的第一预执行信息,第一预执行信息由所述主节点预执行所述多笔第一交易得到。

可选的,第一区块中包含多笔第一交易,所述第一计算进程54执行接收到的第一交易,包括:

在接收到至少两个第一交易的情况下,第一计算进程54通过多个线程并行执行所述至少两个第一交易。

可选的,还包括:

所述控制进程52响应于第一交易依赖于第二区块中的第二交易,在确定第二交易执行完成的情况下,将第二交易的执行结果和第一交易发送至所述多个计算进程54中的第三计算进程54执行;或者,

所述控制进程52响应于第一交易依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程54中的第三计算进程54,并触发第三计算进程54在第二交易被执行完成的情况下基于第二交易的执行结果执行第一交易。

可选的,还包括:

针对第一区块和第二区块中的任一区块,所述控制进程52在所述任一区块中的各笔交易均执行完成且所述任一区块的前一区块已完成提交的情况下,基于所述任一区块中的各笔交易的执行结果提交所述任一区块。

所述第一节点的交易执行过程的具体实现可以参见前述实施例的记载,此处不再赘述。

基于与前述方法实施例相同的构思,本说明书实施例中还提供了一种区块链系统,所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程和多个计算进程,其中:

第二节点用于向第一节点发送第一区块中待执行的第一交易;

第一节点用于在确定存在处于执行阶段的第二区块的情况下,响应于第一交易不依赖于第二区块中的第二交易,将第一交易发送至所述多个计算进程中的第一计算进程执行。

图6是一示例性实施例提供的一种设备的结构示意图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他服务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

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

虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

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

本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

技术分类

06120116217811