在区块链系统中执行区块的方法及装置与流程

文档序号:26003920发布日期:2021-07-23 21:21阅读:176来源:国知局
在区块链系统中执行区块的方法及装置与流程

本说明书一个或多个实施例涉及区块链技术领域,尤其涉及在区块链系统中执行区块的方法及装置。



背景技术:

区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。

目前限制区块链技术大规模落地应用的一个很重要因素是性能,主要包括吞吐量,吞吐量一般可以通过每秒交易笔数(transactionpersecond,简称tps)来度量。开发者们提出了各种各样的方案来尝试提升区块的吞吐量,这一过程称为“扩容”。典型的“扩容”方案中,可以将区块链系统划分为多个分片,多个分片可以并行的执行交易。

单个交易的执行过程中涉及来自多个分片的跨分片子交易时,可能因多个跨分片子交易无法被高效的成功执行,导致相应的交易无法快速的完成执行,从而影响区块链的性能。



技术实现要素:

本说明书一个或多个实施例中提供了一种在区块链系统中执行区块的方法及装置。

第一方面,提供了一种在区块链系统中执行区块的方法,所述区块链系统包括第一分片和多个第二分片,所述方法由第一分片中的第一节点执行。所述方法包括:从所述多个第二分片接收多个第一跨分片子交易,所述多个第一跨分片子交易都与第一交易对应,所述第一交易为属于所述第一分片的第一区块的交易,所述多个第一跨分片子交易由所述多个第二分片分别在执行各自的第二区块的过程中生成;对所述多个第一跨分片子交易合并执行。

第二方面,提供了一种在区块链系统中执行区块的装置,所述区块链系统包括第一分片和多个第二分片,所述装置部署于所述第一分片中的第一节点。所述装置包括:交易接收单元,配置为从所述多个第二分片接收多个第一跨分片子交易,所述多个第一跨分片子交易都与第一交易对应,所述第一交易为属于所述第一分片的第一区块的交易,所述多个第一跨分片子交易由所述多个第二分片分别在执行各自的第二区块的过程中生成;合并处理单元,配置为对所述多个第一跨分片子交易合并执行。

第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,该计算设备实现第一方面中所述的方法。

第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面中所述的方法。

通过本说明书一个或多个实施例中提供的方法及装置,在包括多个分片的区块链系统中,对于当前分片从多个其它分片接收的多个跨分片子交易,并且多个跨分片子交易与属于当前分片的某个区块中的原始交易相对应的情况下,当前分片中的节点可以对多个跨分片子交易进行合并执行,从而提升区块链系统的整体性能。

附图说明

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

图1为本说明书实施例中提供的一种区块链系统的示意图;

图2为本说明书实施例中提供的区块链系统中各分片执行区块的示意图;

图3为本说明书实施例中提供的一种在区块链系统中执行区块的方法的流程示意图;

图4为本说明书实施例中提供的另一种在区块链系统中执行区块的方法的流程示意图;

图5为本说明书实施例中示例性提供的第二跨分片子交易的示意图;

图6为将多个示例性的第一跨分片子交易合并为新的子交易的示意图;

图7为本说明书实施例中提供的一种在区块链系统中执行区块的装置的结构示意图。

具体实施方式

下面结合附图,对本说明书所提供的各个非限制性实施例进行详细描述。

如前所述,可以将区块链系统划分为多个分片。具体而言,可以基于分片机制的不同划分为三种情况:网络分片(networksharding)、交易分片(transactionsharding)以及状态分片(statesharding)。网络分片是将整个区块链网络划分成多个子网络,即划分为多个分片,多个分片可以并行处理网络中不同的交易。交易分片是将交易按某种规则分配到不同分片,从而达到并行处理的目的;其中交易分片的前提是先进行网络分片。状态分片的关键是将整个存储区分开,让不同的分片存储不同账户的状态,单个分片负责存储归属于其自身的部分账户的世界状态,而不是存储区块链系统的全部账户的世界状态;其中状态分片能够解决存储能力瓶颈问题。本说明书实施例中提供的方案可应用于状态分片,可以理解,本说明书实施例的方案也可应用于其它类型的分片。

区块链系统被划分为多个分片时,由任意当前分片负责处理的交易,比如从用户设备接收的交易或者由其它节点转发的并且来自用户设备的交易,在其执行过程中可能涉及来自多个其它分片的跨分片子交易,例如涉及基于多个包含存储于其它分片中的状态参数的跨分片子交易,对当前分片中存储的状态进行修改和/或再次产生涉及其它分片的跨分片子交易。此种情况下,往往会因多个跨分片子交易无法被高效的执行而影响区块链的性能。

鉴于以上问题,本说明书实施例中至少提供了一种在区块链系统中执行区块的方法及装置。在包括多个分片的区块链系统中,对于任意当前分片从多个其它分片接收的多个跨分片子交易,并且该多个跨分片子交易与属于当前分片的某个区块中的原始交易相对应的情况下,当前分片中的节点可以对多个跨分片子交易进行合并执行,从而提升区块链系统的整体性能。

在一些实施例中,区块链系统中不同分片的相互信任的节点可以形成集合。图1为本说明书实施例中提供的一种区块链系统的示意图,其中示出了属于分片1、分片2和分片3的节点,其中各节点可以分别实现为任何具有计算能力的装置、设备或设备集群等。图1中还示出了不同分片的互信的多个节点形成的集合a、集合b、集合c和集合d,其中各个集合中包括分别属于前述3个分片的3个节点,比如,集合a中包括节点1a、节点2a和节点3a,其中,节点1a为分片1中的节点,节点2a为分片2中的节点,节点3a为分片3中的节点。同一分片中的节点可以搭建一条区块链,具体例如,分片1中的节点1a、1b、1c和1d可以搭建一条区块链1,分片2中的节点2a、2b、2c和2d可以搭建一条区块链2,分片3中的节点3a、3b、3c和3d可以搭建一条区块链3。每个分片内部的各参与方节点之间进行共识。

各个集合中的任意两个节点彼此互为信任节点。对于各个集合中节点间信任关系的建立,以集合a中的节点1a和节点2a为例进行说明。在一个示例中,前述区块链系统可以包括联盟链系统,节点1a和节点2a属于相同的联盟成员,联盟成员中的节点彼此互相信任;其中节点1a和节点2a可以通过所属联盟成员的内部网络连接。在一个示例中,节点1a和节点2a各自属于彼此认可两个相互独立的机构。如此,可以通过建立从属于不同分片的节点之间的信任关系,在由此形成的节点集合中实现任意两个分片所对应节点之间的轻量级通信。

图2示出了区块链系统中各个分片执行区块的过程。分属于分片1、分片2和分片3的节点1a、节点2a和节点3a,通过相互之间进行跨分片通讯,各自完成对应分片中区块m的执行。其中,“区块m”中的“m”可指代区块高度。可以理解,分片1的区块m表示分片1中高度为m的区块,分片2的区块m表示分片2中高度为m的区块,以此类推,因此,分片1的区块m、分片2区块m和分片3区块m表示不同的区块。如图2所示,节点1a、节点2a和节点3a同时开始执行区块m,在执行过程中涉及k(其中k为正整数)轮次的跨分片通讯,k轮次的跨分片通讯结束意味着对区块m的执行结束,即意味着对区块m中的全部交易的执行结束,之后再开始区块m+1的执行。其中,属于不同分片的区块m可能包含相同或不同数量的交易,例如属于分片1的区块m包含n1个交易,属于分片2的区块m可能包含n2个交易,属于分片3的区块m可能包含n3个交易,而n1、n2和n3的值可能完全相同,也可能有所不同。此外,图2中示例的数值q表征节点1a进行第1轮次的跨分片通讯后所需处理的跨分片子交易的数量,数值q是:节点2a对前述n2个交易进行执行而产生的并且需要由分片1执行的跨分片子交易的数量,与节点3a对前述n3个交易进行执行而产生的并且需要由分片1执行的跨分片子交易的数量的总和。数值m数值和数值p类似与数值q,不再赘述。其中,节点1a执行n1个交易的过程、节点2a执行n2个交易的过程、节点3a执行n3个交易的过程都可以称为执行区块m的过程中的第1轮交易执行过程,该第1轮交易执行过程与第1轮跨分片通讯过程相对应,节点1a执行q个跨分片子交易的过程、节点2a执行m个跨分片子交易的过程、节点3a执行p个跨分片子交易的过程都可以称为执行区块m的过程中的第2轮交易执行过程,该第2轮交易执行过程与第2轮跨分片通讯过程相对应。

其中,前述的跨分片子交易是在执行区块过程中产生的交易,具体是,可以是执行属于区块的多个交易的过程中产生的需要跨分片执行的子交易,或者可以是执行跨分片子交易的过程中产生的需要跨分片执行的子交易。跨分片子交易例如包括操作指令,以指示在对应的分片中执行与该操作指令对应的操作。该子交易可以与交易具有相同的形式,即包括发送账户、接收账户、数据字段等。在该子交易在同一个联盟方包括的多个相互信任的节点之间发送的情况下,该多个节点之间不需要对子交易进行验证,因此,该子交易可以不包括数字签名。在该区块链系统包括状态分片的情况中,跨分片子交易用于查询或更改对应分片中的账户的状态(即世界状态),跨分片子交易例如可通过调用对应分片中的合约来查询或更改对应分片中的账户的状态。在一种实施方式中,跨分片子交易中可包括对应的原始交易的哈希值。在另一种实施方式中,跨分片子交易中包括对应的执行轮次信息,该执行轮次信息例如可指示生成该跨分片子交易的交易执行过程的轮次。

也就是说,各个节点对区块的执行过程可包括多轮交易执行过程,其中,在一轮交易执行过程之后可包括跨分片通讯过程,该跨分片通讯过程可跨分片的发送跨分片子交易,使得接收该跨分片子交易的节点进行下一轮的交易执行过程以执行该跨分片子交易,各个节点执行的所述多轮交易执行过程也是基本同步的。

分片1~分片3同时执行高度相同的各自的区块,可以是为了保证包括跨片事务的交易在不同分片的子交易的执行结果的原子性。具体是,分片1、分片2和分片3首先分别开始执行各自的创世块(也可称为区块0),各个分片在分别共识之后存入各自的创世块,创世块中一般包括配置信息,如分片中包括的分片节点,各个分片节点的ip地址、端口号、各个分片节点的公钥列表,分片中的共识节点标识等等。在执行创世块之后,分片1、分片2和分片3开始执行各自的区块1。具体是,分片1、分片2和分片3在分别通过共识确定属于区块1的多个交易及该多个交易的执行顺序之后,分片1、分片2和分片3分别开始执行经共识的各自的区块1中的多个交易。其中,分片1在执行交易的过程中可能会产生了需由分片2执行的跨分片子交易。如果该交易对应于对事务的执行,分片1在确定该交易的跨分片子交易执行成功之后才能确定对应交易执行成功。相应地,分片1在确定发送给全部其他分片节点的跨分片子交易都执行成功了,才能确定对区块1中的多个交易执行成功。其中,在上文及之后的描述中,使用“交易”表示在分片中共识的属于区块的多个交易,使用“跨分片子交易”表示通过执行交易或跨分片子交易所产生的子交易。

类似地,节点2a和节点3a也会向集合a中的其他节点发送跨分片子交易,也同样地在确定发送给全部其他节点的跨分片子交易都执行成功了,才能确定其对应的分片的区块1中的多个交易执行成功。因此,为了保证各个分片的区块1中的事务型交易的执行正确性,节点1a~节点3a分别等待集合a中的全部节点都结束对跨分片子交易的执行,并且确定这些跨分片子交易都执行成功之后才开始进行以下操作:更新世界状态(即存储区块1对应的世界状态),生成其所属分片的区块1(即区块1的区块体和区块头),并存储区块1,从而结束对其所属分片的区块1的执行,这样保证各个分片的区块1中的事务型交易包括的子交易的执行原子性。

节点1a~节点3a各自在确定集合a中的全部节点都结束对区块1的执行之后,才各自开始对区块2的执行,依此类推,节点1a~节点3a各自在确定全部节点都结束对区块2的执行之后,才各自开始对区块3的执行。因此,节点1a~节点3a(即不同分片)之间对区块的执行是同步的,各个节点在同一时间具有同样的区块高度。

可以理解,虽然在图2中示出节点1a~节点3a同时执行高度相同的各自所属的分片的区块,本说明书实施例不限于此,本说明书实施例也可以与其他用于保证交易原子性的技术相结合,在该其他用于保证交易原子性的技术中,不同的分片有可能执行不同高度的区块,也即,节点1a~节点3a有可能在同一时间执行不同高度的区块。

在一种实施情况中,k=1,这意味着节点1a、节点2a和节点3a在首轮通信中,即明确节点1a、节点2a和节点3a均没有生成新的跨分片子交易,进行1个轮次的跨分片通讯即完成对区块m的执行。

在一种实施情况中,k≥2,这意味着在前k-1轮次通信的各轮通信内,节点1a、节点2a和节点3a中存在节点发送指示其他分片中的节点执行跨分片操作的跨分片子交易,直到第k轮次的跨分片通讯中,节点1a、节点2a和节点3a均没有生成新的跨分片子交易,结束跨分片通讯。

从上述描述可以看出,在本说明书实施例中提供的包括多个分片的区块链系统中,执行区块的过程包括以下顺序进行的多个步骤:各个分片基本同时通过共识确定属于同一高度的区块(例如区块m)的多个交易,各个分片分别执行各自的属于区块m的多个交易,执行来自其他分片的多个跨分片子交易,各个分片在确定各个分片都完成对跨分片子交易的执行、并且没有生成新的跨分片子交易之后,分别基于多个交易和多个跨分片子交易的执行结果对应的状态信息,更新世界状态,即存储与区块m对应的世界状态,并生成区块m的区块体和区块头,存储区块m。可以理解,在各个分片在执行属于区块m的多个交易的过程中都没有产生跨分片子交易的情况中,执行区块的过程将不包括上述执行跨分片子交易的过程。

由于节点1a、节点2a和节点3a相互信任,因此在节点1a、节点2a和节点3a之间相互传递的跨分片子交易,其无需包含发送方节点的数字签名,接收方节点也无需对其接收的跨分片子交易验签,提高发送方节点和接收方节点处理跨分片通讯消息的效率,有利于提升区块链系统的整体性能。

需要说明的是,图1所示的区块链系统仅用于辅助描述本说明书实施例中提供的技术方案,例如区块链系统可能包括更多或更少的分片,可能包括更多或更少的集合。此外,区块链系统还可能无需按照节点间互相信任的情况将节点划分为多个集合;例如,分属于分片1、分片2和分片3的节点1a、节点2a和节点3a,仍然可以通过前述k轮次的跨分片通讯,各自完成对应分片中区块m的执行,但是节点1a、节点2a和节点3a并非相互信任的节点,而是其各自所属的分片中的特定节点,例如是其各自所属分片中的主节点。换而言之,本说明书实施例中提供的方法及装置适用的区块链系统,并不局限于图1所示的区块链系统。

以上内容首先从整体上描述了对区块m的执行过程,可以理解的是对区块m的执行过程实质上包括对属于区块m的每个交易进行执行的过程。也就是说,对于区块m中的单个交易而言,可类似的通过前述k轮次的跨分片通讯而完成对该交易的执行。下面详细描述执行区块m中的单个交易的过程。

图3为本说明书实施例中提供的一种在区块链系统中执行区块的方法的流程示意图。该方法可以由区块链系统所包括任意分片中的任意节点执行,下文中以图1所示分片1中的节点1a执行该方法为例进行详细描述。该方法至少包括如下步骤301和步骤303。

步骤301,从多个其它分片接收多个第一跨分片子交易,多个第一跨分片子交易都与交易t1对应,交易t1为属于分片1的区块m中的交易。其中,步骤301对应区块m的第n轮交易执行过程,或者说对应区块m的第n轮跨分片通讯过程,n的取值不小于1。

步骤303,对多个第一跨分片子交易合并执行。其中,步骤303对应区块m的第n+1轮交易执行过程,如果对多个第一跨分片子交易合并执行的结果包含一个或多个跨分片子交易,则需要继续进行第n+1轮跨分片通讯,实现将该一个或多个跨分片子交易发送至对应的分片,进而进行对应第一区块的第n+2轮交易执行过程。

前述方法具体实现在对区块m进行某个轮次的执行过程中,对来自多个其它分片并且与区块m中的某个交易相关的多个跨分片子交易进行合并执行,有利于更为快速的完成对区块m对应的单个轮次的执行过程,有利于更为快速的完成对区块m的执行,从而有利于提升区块链系统的整体性能。

图4为本说明书实施例中提供的另一种在区块链系统中执行区块的方法的流程图,该方法可以由区块链系统所包括任意分片中的任意节点执行,下文中以图1所示分片1中的节点1a执行该方法为例进行详细描述。

如图4所示,该方法至少可以包括如下步骤401至步骤407。

步骤401,执行交易t1,生成与多个其它分片相对应的多个第二跨分片子交易。其中,交易t1是节点1a所属分片1中待生成的区块m中的交易。

在分片1、分片2和分片3分别通过共识确定属于区块m的n1个交易及该多个交易的执行顺序之后,节点1a可以获取属于区块m的n1个交易,并按照n1个交易的执行顺序对n1个交易进行依次执行。

对于单个交易t1而言,前述步骤401中通过执行交易t1而生成与多个其它分片相对应的多个第二跨分片子交易,对应区块m的第1轮交易执行过程和即将进行的第1轮跨分片通讯过程。

交易t1可以是用于调用分片1中的智能合约的交易,节点1a可基于交易t1执行智能合约,生成与多个其它分片相对应的多个第二跨分片子交易。

以购物场景为例,单个商品对应的状态参数可以包括其自身的价格和库存,用户可通过其注册在区块链系统中的账户,发起调用智能合约的交易而完成对多个商品的购买,其中该用户的状态和其期望购买的多个商品的状态参数可能各自存储在不同的分片中。具体假设商品item_1的价格price_1作为其所属账户account_1的状态存储于分片2中,商品item_2的价格price_2作为其所属账户account_2的状态存储于分片3中,其中,账户account_1的状态中除了包括item_1的价格price_1的状态值之外,例如还可以包括item_1的库存stock_1等参数的状态值,账户account_2可类似地包括其他参数的状态值。账户account_3的状态(包括但不限于余额balance)存储于分片1中,至少在分片1中部署了用于支持对商品进行购买的智能合约contract_1。那么,用户可通过相应的用户设备发起调用智能合约contract_1的交易t1,交易t1的from字段包括账户account_3,to字段包括合约contract_1的合约地址,data字段可以包括商品item_1的标识和商品item_2的标识等输入参数,其中data字段还可以包括合约contract_1中被调用的函数buy_1的标识。与之相应的,节点1a执行交易t1时,可以将商品item_1的标识和商品item_2的标识,作为函数buy_1的输入参数执行函数buy_1,从而生成对应分片2的跨分片子交易t12和对应分片3的跨分片子交易t13。

节点1a通过对交易t1的执行而生成的第二跨分片子交易中,可以包括用于指示查询多个其它分片中的n个参数的状态值的信息,其中n≥2。在一个较为具体的示例中,节点1a通过对交易t1的执行而生成的单个第二跨分片子交易中,预先配置了与n个参数相对应的n个字段;对于n个参数中的任一参数而言,第二跨分片子交易期望其对应的分片向节点1a返回该参数对应的状态值,该第二跨分片子交易中与该参数对应的字段下可以设置表征需要返回相应状态值的指示信息,反之则在该参数对应的字段下可以设置表征不需要返回相应状态值的指示信息,其中表征不需要返回相应状态值的指示信息具体可以是参数值null或者其它预设参数值。这样,有利于其它分片根据第二跨分片子交易所包含的并且与n个参数相对应的n个字段,对应的返回包含与n个参数相对应的n个字段的第一跨分片子交易。

继续以前述示例的购物场景为例,跨分片子交易t12可能期望分片2向节点1a返回商品item_1的价格price_1,跨分片子交易t13可能期望分片3向节点1a返回商品item_2的价格price_2。请参考图5,跨分片子交易t12和跨分片子交易t13的data字段中,均可以包括与商品item_1的价格price_1相对应的子字段1和与商品item_2的价格price_2相对应子字段2。其中,跨分片子交易t12中的子字段1下可以包括用于指示需要返回商品item_1的价格price_1的指示信息,例如商品item_1的标识item_1,该指示信息同时可以用于指示分片2对存储于分片2中的商品item_1的价格进行查询;跨分片子交易t13中的子字段2下可以包括用于指示需要返回商品item_2的价格price_2的指示信息,例如商品item_2的标识item_2,该指示信息同时可以用于指示分片3对存储于分片3中的商品item_2的价格price_2进行查询。

节点1a通过对交易t1的执行而生成的单个第二跨分片子交易,具体可以用于调用部署于对应的其它分片中的智能合约,以便对应的其它分片查询一个或多个参数的状态值,生成待返回给节点1a的并且包含其查询的一个或多个状态值的第一跨分片子交易。此种情况下,节点1a生成的第二跨分片子交易的from字段可以包括交易t1所调用的智能合约的地址,或者该from字段可以包括节点1a的账户地址,to字段可以包括对应的其它分片中待调用的智能合约的地址,data字段中除了前述用于指示对一个或多个参数的状态值进行查询的信息外,还可以包括待调用的智能合约中需调用的函数的标识,其中前述用于指示对一个或多个参数的状态值进行查询的信息可以作为需调用的函数的输入参数。继续以前述示例的购物场景为例,跨分片子交易t12中调用部署于分片2中的合约contract_2,使分片2通过对子交易t12的执行而查询分片2中商品item_1的价格price_1,并向节点1a返回至少包含商品item_1的价格price_1的跨分片子交易t21。那么,参考图5,跨分片子交易t12的from字段可以包括合约contract_1的地址(记为contract_1),to字段可以包括contract_2的地址(记为contract_2),data字段可以包括需调用的合约contract_2中的函数get_price的标识(记为get_price),以及需传入函数get_price的其它信息,例如前述商品item_1的标识item_1。类似的,跨分片子交易t13中调用部署于分片2中的合约contract_3,使分片3通过对子交易t13的执行而查询分片3中商品item_2的价格price_2,并向节点1a返回至少包含商品item_2的价格price_2的跨分片子交易t31。

在节点1a通过对交易t1的执行而生成的第二跨分片子交易中,还可以包括交易t1的标识l(t1),例如l(t1)可以是交易t1的哈希值。另外,该第二跨分片子交易中还可以包括该第二跨分片子交易将要发送至的分片的标识。

在节点1a通过对交易t1的执行而生成的第二跨分片子交易中,还可以包括执行/通讯轮次信息,表明对应的跨分片子交易是针对区块m进行第几轮次的执行/通讯而产生的,或者,指示对应的跨分片子交易在第几轮次通信中被传输。

节点1a将其生成的多个第二跨分片子交易发送至其各自对应的其它分片,具体可以是将其生成的每个第二跨分片子交易发送至其对应的分片中与节点1a属于相同集合的节点;例如参考图2所示,节点1a可以将前述示例的跨分片子交易t12发送至节点2a,将前述示例的跨分片子交易t13发送至节点3a。如此,节点1a生成的跨分片子交易中无需包括节点1a的数字签名,其他分片中与节点1a互为信任节点的节点2a、节点3a等在执行对应的跨分片子交易时无需验签,可以有效节省通信消耗的资源和时间。

节点1a依次对包含交易t1在内的n1个交易均进行执行后,可以针对区块m进行第1轮次的跨分片通讯,将执行n1个交易而产生的每个跨分片交易,分别发送至其各自对应的其它分片。对于单个交易t1而言,节点1a针对交易t1继续执行如下步骤403。

步骤403,将多个第二跨分片子交易分别发送至其各自对应的其它分片。

其它分片接收到来自节点1a的并且源自交易t1的第二跨分片子交易后,可以各自执行其接收的第二跨分片子交易,生成相应的第一跨分片子交易并将第一跨分片子交易返回给节点1a。其中需要说明的是,由于分片1、分片2和分片3同时执行其各自的区块m,即节点1a、节点2a和节点3a同时执行其各自的所属分片的区块m,因此多个第一跨分片子交易具体可以由多个其它分片分别在执行各自的区块m的过程中生成。

其中如前所述的是,其它分片中接收到第二跨分片子交易的节点,可以是与节点1a属于相同集合的节点;相应的,执行第二跨分片子交易的节点同样可以是从节点1a接收第二跨分片子交易的节点。下文主要对节点2a执行其接收的第二跨分片子交易的过程进行描述。

节点2a执行其接收的第二跨分片子交易时,可以根据该第二跨分片子交易中包括的用于指示查询分片2中的一个或多个参数的状态值的信息,查询分片2中存储的相应状态值,并生成包含相应状态值的第一跨分片子交易。以节点2a接收前述包含商品标识item_1的第二跨分片子交易为例,节点2a对第二跨分片子交易进行执行时,可以根据标识item_1查询商品item_1的价格price_1,并生成包含商品item_1的价格price_1的第一跨分片子交易。

节点2a接收的第二跨分片子交易中调用部署在分片2中的智能合约时,节点2a可以根据该第二跨分片子交易执行相应的智能合约,实现查询存储于分片2中的一个或多个参数的状态值,并生成包含这些状态值的第一跨分片子交易。以节点2a接收前述用于调用智能合约contract_2的跨分片子交易t12为例,节点2a对跨分片子交易t12进行执行时,可以执行合约contract_2中的函数get_price,查询商品item_1的价格price_1并生成包含商品item_1的价格price_1的第一跨分片子交易t21。

节点2a通过执行其接收的第二跨分片子交易而生成的跨分片子交易中,还可以包括包含于第二跨分片子交易中的交易t1的标识l(t1)。

在节点2a通过执行其接收的第二跨分片子交易而生成的跨分片子交易中,还可以包括执行/通讯轮次信息,表明对应的跨分片子交易是针对交易t1进行的第几轮次的执行/通信而产生的,或者,指示对应的跨分片子交易在第几轮次通信中被传输。通过这样,当节点1a分别从节点2a和节点3a接收到第一跨分片子交易时,可验证其执行/通讯轮次信息是否为正确的轮次信息。这里,由于节点2a执行的第二跨分片子交易,是节点1a执行区块m的过程中的第1轮交易执行过程产生,节点2a执行第二跨分片子交易而生成的第一跨分片子交易所对应的执行/通讯轮次信息则为第2轮次。

在节点2a通过执行其接收的第二跨分片子交易而生成的第一跨分片子交易中,指示其自身包括的状态值为待返回的n个参数的状态值中的部分状态值。在一个较为具体的示例中,第一跨分片子交易包括与前述n个状态值分别对应的n个字段,n个字段中的与第一跨分片子交易未包括的状态值对应的字段的值为null。继续以节点1a通过执行交易t1,生成前述的跨分片子交易t12和跨分片子交易t13,跨分片子交易t12至少期望分片2向节点1a返回商品item_1的价格,跨分片子交易t13至少期望分片3向节点1a返回商品item_2的价格为例。请参考图6所示的跨分片子交易t21和跨分片子交易t31,节点2a对跨分片子交易t12进行执行而产生的跨分片子交易t21的data字段中,以及节点3a对跨分片子交易t13进行执行而产生的跨分片子交易t31的data字段中,均可以包括与商品item_1的价格price_1相对应的子字段1和与商品item_2的价格price_2相对应子字段2。其中,跨分片子交易t21中子字段1的字段值为商品item_1的价格price_1,子字段2的字段值为null;跨分片子交易t31中子字段1的字段值为null,子字段2的字段值为商品item_2的价格price_2。在另一个较为具体的示例中,第一跨分片子交易中包括预设保留字,通过预设保留字指示第一跨分片子交易包括的状态值为待返回的n个状态值中的部分状态值。

单个第一跨分片子交易包括的状态值为待返回的n个状态值中的部分状态值的情况下,第一跨分片子交易中还可以包括其期望调用的并且部署在分片1中的智能合约的合约地址,甚至还可以包括其期望调用的智能合约中的函数的标识。举例来说,节点2a通过执行前述示例的跨分片子交易t12而产生的跨分片子交易t21,以及节点3a通过执行前述示例的跨分片子交易t13而产生的跨分片子交易t31,均期望调用智能合约contract_4中的函数settle。那么,跨分片子交易t21的from字段可以包括contract_2的地址,to字段可以包括contract_4的地址,data字段可以包括待返回给节点1a的状态参数以及需调用的函数settle的标识;跨分片子交易t31的from字段可以包括contract_3的地址,to字段可以包括contract_4的地址,data字段可以包括待返回给节点1a的状态参数以及需调用的函数settle的标识。

对于节点2a通过执行来自节点1a的第二跨分片子交易而产生的第一跨分片子交易,可以由节点2a将其产生的跨分片子交易返回给节点1a。可以理解,节点2a产生的跨分片子交易同样无需包括节点2a的签名,节点1a无需对其接收的跨分片子交易进行验签。此外需要说明的是,节点2a执行来自节点1a的跨分片子交易时,不仅可以实现前述产生相应的跨分片子交易并返回给节点1a,还可能实现其它各种可能的处理,例如还可能产生需要由除分片1和分片2以外的其它分片所执行的跨分片子交易,还可能对其所属分片2中的状态进行修改,具体如执行前述示例的跨分片子交易t12时,还可能对存储于分片2中商品item_1的库存stock_1的状态值进行更改,对商品item_1所属账户account_1的状态(包括但不限于余额balance)进行修改等。

与之相应的,节点1a可以继续执行下述步骤405和步骤407。

步骤405,从多个其它分片接收多个第一跨分片子交易。步骤407,对多个第一跨分片子交易合并执行。其中,步骤405例如对应第2轮次的跨分片通讯,步骤407例如对应区块m的执行过程中的第3轮次交易执行过程和第3轮次跨分片通讯过程。

节点1a可以在其成功接收前述的n个状态值时,对包含前述n个状态值并且来自多个其它分片的第一跨分片子交易合并执行。其中可以将来自其它分片的第一跨分片子交易中所包括的交易t1的标识,作为对源自交易t1的第一跨分片子交易进行合并执行的依据。在一个较为具体的示例中,节点1a可以配置与交易t1相对应的存储空间,例如通过交易t1的标识l(t1)(比如交易t1的交易哈希)来标识相应的存储空间;该存储空间可以采用堆栈或其它特定的数据结构来存储并管理源自交易t1的跨分片子交易。节点1a接收到来自其它分片的第一跨分片子交易时,可以根据来自其它分片的第一跨分片子交易中所包括的交易t1的标识l(t1),将源自交易t1的第一跨分片子交易存储到该存储空间中。于是,节点1a可以通过该存储空间中缓存的第一跨分片子交易,判断其是否成功接收前述的n个状态值。例如,节点1a对存储于该存储空间中的第一跨分片子交易进行解析,以确定该存储空间中缓存的第一跨分片子交易是否包括全部的n个状态值,如果是则确定其已成功接收n个状态值;或者,n个状态值对应在特定数量的第一跨分片子交易,节点1a在确定该存储空间中包括特定数量的第一跨分片子交易时,确定其已成功接收n个状态值。

节点1a对来自多个其它分片的跨分片子交易合并执行,具体可以将来自多个其它分片的跨分片子交易合并成新的子交易,然后执行该新的子交易;例如参考图2所示,节点1a可以从节点2a接收前述示例的跨分片子交易t21,以及从节点2a接收前述示例的跨分片子交易t31,然后再区块m的第3轮执行过程中,将前述示例的跨分片子交易t21和前述示例的跨分片子交易t21合并为新的子交易并执行。如此,节点1a无需对来自多个其它分片的跨分片子交易逐一执行,降低完成执行多个跨分片子交易所需的时间,有利于降低完成执行区块m的时间,从而有利于提升区块链系统的整体性能。

在一种可能的实施方式中,在对多个第一跨分片子交易合并执行时,可以按照预定的算法处理该多个第一跨分片子交易中各自包含的参数的状态值,从而得到合并执行的执行结果,该执行结果例如可对另一个参数的状态值进行更改。

在一种可能的实施方式中,待合并执行的多个第一跨分片子交易,可能期望调用当前分片(节点1a所在分片1)中相同的智能合约,即单个第一跨分片子交易所包括的状态值作为实际调用智能合约时所需传入的n个状态值中的部分状态值,合并得到的新的子交易中可以包括全部的n个状态值,然后将新的子交易作为实际调用相应智能合约的交易而执行。如此,由于来自其它分片的并且期望调用智能合约的第一跨分片子交易,并不需要作为实际调用相应智能合约的跨分片子交易而执行;因此允许来自其它分片的并且期望调用智能合约的单个第一跨分片子交易仅包括实际调用智能合约时所需传入的n个状态参数中的部分状态参数,这样有利于实现各种极为复杂的合约调用场景,例如可以实现基于智能合约对分片1中存储的状态进行修改的特定算法,必须依赖于分片2和分片3中存储的多个状态值的合约场景。

在一个更为具体的示例中,合并得到的新的子交易中from字段的值,可以为任一第一跨分片子交易中的from字段的值,或者可以为null;合并得到的新的子交易中data字段可以包括前述的n个状态值;合并得到的新的子交易中to字段可以包括分片1中被调用的智能合约的地址。继续参考前述如图6中示例的跨分片子交易t21和跨分片子交易t31,跨分片子交易t21和跨分片子交易t31合并为新的子交易,完整包含调用合约contract_4中的settle函数所需传入的商品item_1的价格price_1和商品item_2的价格price_2。如此,节点1a执行新的子交易时,可以通过执行contract_4中的settle函数而实现预定事务,获得相应的执行结果。例如计算用于对账户account_3的状态(包括但不限于余额balance)进行修改的结果。

如前所述,对多个第一跨分片子交易进行合并执行后,可得到合并执行的结果。在一个较为具体的示例中,合并执行的结果可以包括用于对区块m的世界状态进行更改的状态信息,该状态信息包括在合并执行的过程中写入的变量的值,于是还可以基于合并执行的结果更新区块m对应的世界状态。在另一个较为具体的示例中,合并执行的结果可能包括新的跨分片子交易,新的跨分片子交易对应第3轮次的跨分片通讯,于是还可以将新的跨分片子交易发送至其对应的分片执行,直至不再产生源自交易t1的跨分片子交易。

当节点1a完成对包含交易t1在内的前述n1个交易的执行后,可以基于对区块m中全部交易的执行结果更新世界状态,生成区块m的区块头和包含前述n1个交易的区块体,并存储区块m,然后进行对区块m+1的相关处理。

前述各个实施例中,对于交易t1调用的智能合约,第二跨分片子交易调用的智能合约以及第一跨分片子交易调用的智能合约,可以是部署在不同的分片中但具有相同的功能的智能合约。例如前述各个示例中的合约contract_1和合约contract_4可以是部署在分片1中的相同合约,合约contract_1、合约contract_2和合约contract_3可能具有相同的功能,具体如前述各个合约中均包括函数buy_1、函数get_price以及函数settle。

在一些实施例中,不同于前述如图4所示实施例的是,步骤401中执行的交易t1还可以是来自其它分片的跨分片子交易,即交易t1可以是其它分片对属于相应区块m的某个交易进行执行时,产生并发送到节点1a的跨分片子交易。此种情况下,较之于以上详细描述的执行属于区块m的交易t1的过程,除步骤401至步骤407对应的执行/通讯轮次不同外,其它处理过程完全相同。

在一些实施例中,不同于前述如图4所示实施例的是,在步骤403与步骤405之间,还可能包括区块m对应的1轮或多轮交易执行过程。例如节点2a接收来自节点1a的第二跨分片子交易后,对第一跨分片子交易进行执行而继续产生新的跨分片子交易,新的跨分片子交易被发送至对应的分片进行执行(即区块m对应的第3轮交易执行过程)时,节点2a可能获得来自相应分片的跨分片子交易,继续对该跨分片子交易进行执行而获得待返回给节点1a的第一跨分片子交易。

与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链系统中执行区块的装置,所述区块链系统包括第一分片和多个第二分片,所述装置部署于所述第一分片中的第一节点。如图7所示,所述装置可以包括:交易接收单元701,配置为从所述多个第二分片接收多个第一跨分片子交易,所述多个第一跨分片子交易都与第一交易对应,所述第一交易为属于所述第一分片的第一区块的交易,所述多个第一跨分片子交易由所述多个第二分片分别在执行各自的第二区块的过程中生成;合并处理单元703,配置为对所述多个第一跨分片子交易合并执行。

在一种可能的实施方式中,所述合并处理单元703,配置为将所述多个第一跨分片子交易合并为第三子交易并执行。

在一种可能的实施方式中,还包括:状态更新单元705,配置为在对所述多个第一跨分片子交易合并执行之后,基于所述合并执行的结果,更新所述第一区块对应的世界状态。

在一种可能的实施方式中,还包括:交易执行单元707,配置为执行第一交易,生成与多个第二分片相对应的多个第二跨分片子交易;交易发送单元709,配置为将多个所述第二跨分片子交易分别发送至其各自对应的第二分片,以使得所述多个第二分片产生所述多个第一跨分片子交易。

在一种可能的实施方式中,所述交易发送单元709,具体配置为将所述多个第二跨分片子交易分别发送至其各自对应的第二分片中的第二节点,各个所述第二节点和所述第一节点互为信任节点。

在一种可能的实施方式中,所述区块链是联盟链,各个所述第二节点和所述第一节点属于相同的联盟成员。

在一种可能的实施方式中,各个所述第二跨分片子交易和各个所述第一跨分片子交易中包括所述第一交易的标识。

在一种可能的实施方式中,各个所述第二跨分片子交易中不包括所述第一节点的数字签名。

在一种可能的实施方式中,所述多个第二跨分片子交易包括用于指示查询所述多个第二分片中的n个参数的状态值的信息,其中n≥2;所述多个第一跨分片子交易中包括所述n个状态值。所述合并处理单元703,配置为在确定已接收所述n个状态值之后,对所述多个第一跨分片子交易合并执行。

在一种可能的实施方式中,所述第二跨分片子交易中调用部署于对应的第二分片中的第一合约,用于查询所述对应的第二分片的一个或多个参数的状态值并生成第一跨分片子交易,所述第一跨分片子交易以所述一个或多个状态值为部分传入参数调用部署于第一分片中的第二合约,所述第二合约用于对所述n个状态值进行处理。

在一种可能的实施方式中,所述第一跨分片子交易中指示其中包括的状态值为待返回的n个状态值中的部分状态值。

在一种可能的实施方式中,所述第一跨分片子交易包括与所述n个状态值分别对应的n个字段,所述n个字段中的与所述第一跨分片子交易未包括的状态值对应的字段的值为null。

在一种可能的实施方式中,还包括:缓存管理单元711,配置为在从任一所述第二分片接收所述第一跨分片子交易之后,在与所述第一交易对应的第一存储空间中缓存该第一跨分片子交易。所述合并执行单元703,具体配置为在确定所述第一存储空间中缓存的多个第二跨分片子交易包括全部n个状态值的情况下,确定已接收所述n个状态值。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令/代码进行传输,以便这些功能所对应的计算机程序被计算机执行时,通过计算机实现本说明书任意一个实施例中所述的方法。

本说明书实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,计算设备执行本说明书任意一个实施例中提供的方法。

本说明书实施例中还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序/可执行代码,所述处理器执行所述计算机程序/可执行代码时,实现本说明书任意一个实施例中提供的方法。

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

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

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

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