区块链系统中执行交易的方法及装置

文档序号:27432425发布日期:2021-11-17 22:23阅读:143来源:国知局
区块链系统中执行交易的方法及装置

1.本说明书一个或多个实施例涉及区块链技术领域,特别涉及一种区块链系统中执行交易的方法及装置。


背景技术:

2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
3.目前来说,在相关的技术中,区块链系统在计算和存储方面的可扩展性较弱,制约了区块链系统的吞吐量,难以满足应用的需求。因此,需要提供一种区块链系统中执行交易的方法。


技术实现要素:

4.本说明书一个或多个实施例提供一种区块链系统中执行交易的方法及装置。
5.根据第一方面,提供一种区块链系统中执行交易的方法,所述区块链系统包括执行分片和共识分片,所述执行分片包括第一执行分片和第二执行分片,所述方法包括:
6.所述共识分片的节点对接收到的交易进行共识,并将经过所述共识的共识结果发送给所述第一执行分片的节点和所述第二执行分片的节点,所述共识结果包括待执行的多个交易;所述多个交易包括第一交易,所述第一交易读取的至少部分参数对应的账户状态存储于所述第二执行分片;所述第一交易访问的参数中包括目标参数;所述目标参数对应的账户状态存储于所述第一执行分片;
7.所述第二执行分片的节点根据所述第一交易将所述至少部分参数对应的账户状态的状态值发送给所述第一执行分片的节点;
8.所述第一执行分片的节点基于所述状态值执行所述第一交易对应的操作;其中,所述第一交易对应的操作包括读和/或写操作。
9.根据第二方面,提供一种区块链系统中执行交易的方法,所述区块链系统包括执行分片和共识分片,所述执行分片包括第一执行分片和第二执行分片,所述方法由所述第一执行分片的节点执行,所述方法包括:
10.接收所述共识分片的节点发送的共识结果;所述共识结果为所述共识分片对交易进行共识得到的;所述共识结果包括待执行的多个交易;所述多个交易包括第一交易,所述第一交易读取的至少部分参数对应的账户状态存储于所述第二执行分片;所述第一交易访问的参数中包括目标参数;所述目标参数对应的账户状态存储于所述第一执行分片;
11.接收所述第二执行分片的节点发送的所述至少部分参数对应的状态值;
12.基于所述状态值执行所述第一交易对应的操作;其中,所述第一交易对应的操作
包括读和/或写操作。
13.根据第三方面,提供一种区块链系统中执行交易的方法,所述区块链系统包括执行分片和共识分片,所述执行分片包括第一执行分片和第二执行分片,所述方法由所述第二执行分片的节点执行,所述方法包括:
14.接收所述共识分片的节点发送的共识结果;所述共识结果为所述共识分片对交易进行共识得到的;所述共识结果包括待执行的多个交易;所述多个交易包括第一交易,所述第一交易读取的至少部分参数对应的账户状态存储于所述第二执行分片;所述第一交易访问的参数中包括目标参数;所述目标参数对应的账户状态存储于所述第一执行分片;
15.根据所述第一交易将所述至少部分参数对应的状态值发送给所述第一执行分片的节点。
16.根据第四方面,提供一种区块链系统中执行交易的装置,所述区块链系统包括执行分片和共识分片,所述执行分片包括第一执行分片和第二执行分片,所述装置部署于所述第一执行分片的节点,所述装置包括:
17.第一接收模块,用于接收所述共识分片的节点发送的共识结果;所述共识结果为所述共识分片对交易进行共识得到的;所述共识结果包括待执行的多个交易;所述多个交易包括第一交易,所述第一交易读取的至少部分参数对应的账户状态存储于所述第二执行分片;所述第一交易访问的参数中包括目标参数;所述目标参数对应的账户状态存储于所述第一执行分片;
18.第二接收模块,用于接收所述第二执行分片的节点发送的所述至少部分参数对应的状态值;
19.执行模块,用于基于所述状态值执行所述第一交易对应的操作;其中,所述第一交易对应的操作包括读和/或写操作。
20.根据第五方面,提供一种区块链系统中执行交易的装置,所述区块链系统包括执行分片和共识分片,所述执行分片包括第一执行分片和第二执行分片,所述装置部署于所述第二执行分片的节点,所述装置包括:
21.接收模块,用于接收所述共识分片的节点发送的共识结果;所述共识结果为所述共识分片对交易进行共识得到的;所述共识结果包括待执行的多个交易;所述多个交易包括第一交易,所述第一交易读取的至少部分参数对应的账户状态存储于所述第二执行分片;所述第一交易访问的参数中包括目标参数;所述目标参数对应的账户状态存储于所述第一执行分片;
22.发送模块,用于根据所述第一交易将所述至少部分参数对应的状态值发送给所述第一执行分片的节点。
23.根据第六方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面或第二方面或第三方面中任一项所述的方法。
24.根据第七方面,提供一种及计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第一方面或第二方面或第三方面中任一项所述的方法。
25.本说明书的实施例提供的技术方案可以包括以下有益效果:
26.本说明书的实施例提供的区块链系统中执行交易方法和装置,将区块链系统分为执行分片和共识分片,并利用共识分片对接收到的交易进行共识,利用执行分片执行由共识分片共识过的交易,从而将区块链系统的共识和执行的功能解耦,提高了区块链系统的容错率以及交易的执行效率。并且,区块链系统可以处理跨分片交易,任一执行分片在执行完成跨分片交易对应的操作之后,无需等待其它执行分片执行完成任一交易对应的操作,从而降低了通讯代价和阻塞时间。
27.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
28.为了更清楚地说明本技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
29.图1是本说明书根据一示例性实施例示出的一种区块链系统的架构图;
30.图2是本说明书根据一示例性实施例示出的一种区块链系统中执行交易的方法的交互流程图;
31.图3是本说明书根据一示例性实施例示出的另一种区块链系统中执行交易的方法的流程图;
32.图4a是本说明书根据一示例性实施例示出的一种排序锁队列的示意图;
33.图4b是本说明书根据一示例性实施例示出的另一种排序锁队列的示意图;
34.图5是本说明书根据一示例性实施例示出的一种区块链系统中执行交易的装置的框图;
35.图6是本说明书根据一示例性实施例示出的另一种区块链系统中执行交易的装置的框图。
具体实施方式
36.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
37.在本说明书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
38.应当理解,尽管在本技术可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
39.如图1所示,是根据一示例性实施例示出的一种区块链系统的架构图。
40.在图1中,区块链系统可以包括执行分片和共识分片,其中,共识分片可以包括分片as1,分片as2,
……
分片asn等n个共识分片。执行分片可以包括分片es1,分片es2,
……
分片esm等m个执行分片。不同的分片各自包括多个节点,各个节点可以实现为任何具有计算、处理能力的装置、服务器或设备集群等。可以理解,图1仅是示例性的示出n个共识分片和m个执行分片,实际上区块链系统可以包括任意数目的共识分片和执行分片。例如,共识分片的数目可以是一个也可以是多个,执行分片的数目可以是任意多个,共识分片的数目可以和执行分片的数目相同,也可以不同。
41.具体来说,首先,共识分片可以与客户端对接,从客户端接收交易,并对接收到的交易进行共识,不同的共识分片可以接收并共识不同的交易。接着,各个共识分片可以将各自共识得到的共识结果发送给各个执行分片的节点,共识结果可以包括待执行的多个交易(即共识成功的多个交易)以及该多个交易的执行顺序,由执行分片的节点完成对该多个交易的执行操作。
42.需要说明的是,区块链系统包括的多个执行分片中,不同的执行分片可以存储不同账户的状态。任一执行分片的节点可以确定接收的共识结果包括的多个交易中与该执行分片关联的交易,并执行该交易对应的操作,该操作可以包括读操作和/或写操作。其中,与该执行分片关联的交易访问的参数中包括至少一个目标参数,该目标参数对应的账户的状态存储于该执行分片中。另外,该执行分片的节点可以忽略该多个交易中除与该执行分片关联的交易之外的交易。
43.例如,分片as1接收到交易a和交易b,并对交易a和交易b进行共识。分片as2接收到交易c和交易d,并对交易c和交易d进行共识
……
。分片asn接收到交易x和交易y,并对交易x和交易y进行共识。经过共识之后,分片as1可以将共识成功的交易a和交易b及其顺序分别发送给分片es1,分片es2,
……
分片esm。分片as2可以将共识成功的交易c和交易d及其顺序分别发送给分片es1,分片es2,
……
分片esm。
……
分片asn可以将共识成功的交易x及其顺序分别发送给分片es1,分片es2,
……
分片esm。
44.需要说明的是,为了保证不同执行分片在执行交易对应的操作时的执行顺序能够保持一致,各个执行分片可以按照预设的规则对从共识分片接收到的交易进行排序。如根据交易的来源,对交易进行排序。比如,分片as1共识得到多组交易(一组交易为一个共识结果包括的交易),并发送给各个执行分片,该多组交易分别为c11,c12,c13。分片as2共识得到多组交易(一组交易为一个共识结果包括的交易),并发送给各个执行分片,该多组交易分别为c21,c22,c23。
……
分片asn共识得到多组交易,并发送给各个执行分片,该多组交易分别为cn1,cn2,cn3。各个执行分片接收到各个共识分片发送的多组交易之后,按照c11(来源为分片as1),c21(来源为分片as2),
……
cn1(来源为分片asn),c12(来源为分片as1),c22(来源为分片as2),
……
cn2(来源为分片asn),c13(来源为分片as1),c23(来源为分片as2),
……
cn3(来源为分片asn)顺序,对多组交易进行排序。
45.接着,分片es1根据接收到的各个交易各自访问的参数(读取和/或写入的参数)对应的账户,确定与其关联的交易包括交易a,交易c
……
。分片es2确定与其关联的交易包括交易b,
……
交易x。
……
分片esm确定与其关联的交易包括交易d,
……
交易x。其中,交易x为
跨分片交易,交易x读取的参数对应的账户的状态存储于分片es2中,交易x写入的参数对应的账户的状态存储于分片esm中。最后,分片es1执行交易a,交易c
……
各自对应的操作,并基于执行的结果更新分片es1的世界状态。分片es2执行交易b,
……
交易x各自对应的操作,并基于执行的结果更新分片es2的世界状态。其中,交易x对应的操作包括读取参数s的状态值,因此,还需要将读取的参数s对应的状态值发送给分片esm。
……
分片esm接收分片es2发送的参数s对应的状态值(以用于执行交易x的写操作),执行交易d,
……
交易x各自对应的操作,并基于执行的结果更新分片esm的世界状态。
46.下面将结合具体的实施例对本说明书提供的方案进行详细描述。
47.如图2所示,图2是根据一示例性实施例示出的一种区块链系统中执行交易的方法的交互流程图。该区块链系统包括执行分片和共识分片,执行分片包括第一执行分片和第二执行分片,该方法包括以下步骤:
48.在步骤201中,客户端向共识分片的节点发送待共识的交易。
49.在步骤203中,共识分片的节点对接收到的交易进行共识。
50.在本实施例中,客户端可以向与其对接的共识分片的节点发送待共识的交易,共识分片的节点对接收到的交易进行共识,得到共识结果。共识结果可以包括待执行的多个交易以及该多个交易对应的执行顺序,其中,待执行的交易为共识成功的交易。
51.在步骤205中,共识分片的节点将经过共识的共识结果分别发送给第一执行分片的节点和第二执行分片的节点。
52.在本实施例中,共识分片的节点可以将待执行的多个交易以及该多个交易对应的执行顺序发送给执行分片的节点,由执行分片的节点完成对该多个交易的执行操作。其中,执行分片包括第一执行分片和第二执行分片,共识分片的节点可以将待执行的多个交易以及该多个交易对应的执行顺序分别发送给第一执行分片和第二执行分片各自包括的各个节点。
53.在步骤207中,第二执行分片的节点获取共识结果包括的多个交易中的第一交易读取的至少部分参数对应的状态值。
54.在本实施例中,共识结果中的多个交易包括第一交易,第一交易为跨分片交易,第一交易读取的至少部分参数对应的账户状态存储于第二执行分片,第一交易访问的参数中包括目标参数,目标参数对应的账户状态存储于第一执行分片。其中,第一交易访问的目标参数包括第一交易读取的参数和/或写入的参数。
55.例如,第一交易访问的参数包括读取的参数u1和写入的参数u2,执行第一交易包括读取参数u1对应的状态值,并基于参数u1对应的状态值写入参数u2对应的状态值。其中,参数u1对应的账户状态存储于第二执行分片,参数u2对应的账户状态存储于第一执行分片。具体地,第二执行分片的节点可以读取参数u1对应的状态值,并发送给第一执行分片的节点,第一执行分片的节点可以基于参数u1对应的状态值更新参数u2对应的状态值。
56.又例如,第一交易访问的参数包括读取的参数u1和读取的参数u3,执行第一交易包括读取参数u1对应的状态值,并基于参数u1对应的状态值读取参数u3对应的状态值。其中,参数u1对应的账户状态存储于第二执行分片,参数u3对应的账户状态存储于第一执行分片。具体地,第二执行分片的节点可以读取参数u1对应的状态值,并发送给第一执行分片的节点,第一执行分片的节点可以基于参数u1对应的状态值读取参数u3对应的状态值。
57.需要说明的是,针对任一跨分片交易,该跨分片交易对应的多个执行分片中,读取的参数涉及的执行分片会将读取的参数的状态值发送给该跨分片交易对应的各个执行分片。例如,跨分片交易1访问的参数包括读取的参数t1,读取的参数t2,写入的参数t3和写入的参数t4。其中,读取的参数t1对应的账户状态的状态值存储于执行分片1,读取的参数t2对应的账户状态的状态值存储于执行分片2,写入的参数t3对应的账户状态的状态值存储于执行分片3,写入的参数t4对应的账户状态的状态值存储于执行分片4。执行分片1会将读取的参数t1的状态值分别发送给执行分片2,执行分片3和执行分片4。执行分片2会将读取的参数t2的状态值分别发送给执行分片1,执行分片3和执行分片4。
58.具体地,获取共识结果包括的多个交易中的第一交易读取的至少部分参数对应的状态值可以包括:子步骤2071,获取多个交易中各个交易各自访问的参数,并基于各个交易各自访问的参数,确定第一交易;以及子步骤2073,确定第一交易访问的部分参数对应的账户状态存储于第一执行分片,并读取上述状态值。
59.在子步骤2071中,第二执行分片的节点可以通过获取该多个交易中各个交易各自访问的各个参数的标识,确定各个交易各自访问的参数。其中,任一交易访问的参数可以仅包括该交易读取的参数,也可以仅包括该交易写入的参数,还可以即包括该交易读取的参数,也包括该交易写入的参数。
60.在一种实现方式中,可以由客户端预先获取待发送的交易访问的各个参数的标识,并将该交易和该交易访问的各个参数的标识一起发送给执行分片的节点。在另一种实现方式中,还可以由第二执行分片的节点通过预执行交易,或者利用静态分析根据智能合约的参数等方式,获取该访问的各个参数的标识。
61.接着,可以遍历多个交易中的各个交易各自访问的各个参数,并确定各个参数对应的账户。如果任一交易读取的至少一个参数对应的账户的状态存储于该第二执行分片,并且该交易访问的其它参数对应的账户的状态存储于其它执行分片,则可以确定该交易为第一交易(即为跨分片交易)。
62.在子步骤2073中,第二执行分片的节点可以进一步确定第一交易访问的其它部分参数对应的账户的状态存储于第一执行分片。例如,可以根据预设的状态存储规则,确定存储该账户的状态的执行分片为第一执行分片。也可以基于对应关系表(记录区块链系统中账户与执行分片的对应关系的表)查找存储该账户的状态的执行分片为第一执行分片。可以理解,第二执行分片的节点还可以通过其它任意可以实现的方式确定存储该账户的状态的执行分片,本实施例对此方面不限定。
63.在步骤209中,第二执行分片的节点将上述读取的至少部分参数对应的状态值发送给第一执行分片的节点。
64.在本实施例中,第二执行分片的节点可以将上述状态值发送给第一执行分片的节点,使得第一执行分片的节点能够基于该状态值,执行第一交易对应的操作。
65.可选地,在步骤211中,第一执行分片的节点获取多个交易中各个交易各自访问的参数。
66.在本实施例中,第一执行分片的节点可以通过获取该多个交易中各个交易各自访问的各个参数的标识,确定各个交易各自访问的参数。其中,任一交易访问的参数可以仅包括该交易读取的参数,也可以仅包括该交易写入的参数,还可以即包括该交易读取的参数,
也包括该交易写入的参数。
67.在一种实现方式中,可以由客户端预先获取待发送的交易访问的各个参数的标识,并将该交易和该交易访问的各个参数的标识一起发送给执行分片的节点。在另一种实现方式中,还可以由第一执行分片的节点通过预执行交易,或者利用静态分析根据智能合约的参数等方式,获取该访问的各个参数的标识。
68.在步骤213中,第一执行分片的节点基于该状态值执行第一交易对应的操作。
69.在本实施例中,第一执行分片的节点可以基于该状态值执行第一交易对应的操作。其中,任一交易对应的操作可以仅包括读操作(例如查询账户余额的交易可以仅涉及读操作),也可以仅包括写操作(例如存证的交易可以仅涉及读操作),还可以即包括读操作也包括写操作(例如对账户的某个状态进行更新的交易可以即涉及读操作也涉及写操作)。
70.具体地,基于该状态值执行第一交易对应的操作可以包括:子步骤2131,基于各个交易各自访问的参数以及该状态值,执行第一交易对应的操作。
71.在子步骤2131中,可以基于各个交易各自访问的参数以及从第二执行分片的节点接收到的该状态值,执行第一交易对应的操作。在一种实现方式中,可以基于各个交易各自访问的参数,确定多个交易中的第一交易,并记录第一交易的标识,再根据记录的标识,利用该状态值执行依次第一交易。
72.在另一种实现方式中,还可以基于各个交易各自访问的参数,确定第一交易,并确定第一交易访问的各个目标参数(对应的账户的状态存储于第一执行分片中的参数)以及第一交易对应的排序。然后,查找该第一交易访问的各个目标参数各自对应的各个排序锁队列,按照该第一交易对应的排序,在上述各个排序锁队列中加入针对该第一交易的目标信息,并基于上述各个排序锁队列,确定满足触发条件,在满足触发条件的情况下,基于该状态值执行第一交易对应的操作(该实现方式的详细过程具体可参见下面图3实施例的描述)。
73.在步骤215中,第一执行分片的节点根据执行的结果更新其世界状态。
74.在本实施例中,在执行完成第一交易对应的操作之后,可以根据执行的结果更新该第一执行分片的世界状态。具体来说,在执行第一交易对应的操作之后,若根据执行结果确定第一交易对应的操作包括写操作,则可以基于执行写操作的结果更新该第一执行分片的世界状态。
75.本说明书的上述实施例提供的区块链系统中执行交易的方法,将区块链系统分为执行分片和共识分片,并利用共识分片对接收到的交易进行共识,利用执行分片执行由共识分片共识过的交易,从而将区块链系统的共识和执行的功能解耦,提高了区块链系统的容错率以及交易的执行效率。并且,区块链系统可以处理跨分片交易,任一执行分片在执行完成跨分片交易对应的操作之后,无需等待其它执行分片执行完成任一交易对应的操作,从而降低了通讯代价和阻塞时间。
76.如图3所示,图3根据一示例性实施例示出的一种区块链系统中执行交易的方法的流程图,该实施例描述了基于各个交易各自访问的参数以及从第二执行分片的节点接收到的状态值,执行第一交易对应的操作的过程,该方法可以由第一执行分片的节点执行,包括以下步骤:
77.在步骤301中,基于多个交易中的各个交易各自访问的参数,确定第一交易。
78.在本实施例中,可以遍历多个交易中的各个交易各自访问的各个参数,并确定各个参数对应的账户。如果任一交易读取的至少一个参数对应的账户的状态存储于第二执行分片,并且该交易访问的部分其它参数对应的账户的状态存储于第一执行分片,则可以确定该交易为第一交易。
79.在步骤303中,确定第一交易访问的各个目标参数以及该第一交易对应的排序。
80.在本实施例中,第一交易访问的参数中包括至少一个目标参数,目标参数对应的账户状态存储于第一执行分片。可以确定第一交易访问的各个目标参数,并确定该第一交易对应的排序。具体来说,共识分片的节点对接收到的交易进行共识,得到共识结果。共识结果可以包括待执行的多个交易以及该多个交易中各个交易对应的排序。共识分片的节点将共识结果发送给第一执行分片的节点,第一执行分片的节点可以从共识结果中获取各个交易各自对应的排序。需要说明的是,不同执行分片的节点接收到的各个交易所对应的排序也是相同的。
81.在步骤305中,按照上述排序在上述各个目标参数各自对应的各个排序锁队列中加入针对第一交易的目标信息。
82.在本实施例中,第一执行分片的节点中存储有预设的索引列表,该索引列表中记录有参数与排序锁队列的地址之间的对应关系。可以从该索引列表中查找出第一交易访问的各个目标参数各自对应的各个排序锁队列,然后,按照第一交易对应的排序在各个排序锁队列中加入针对第一交易的目标信息。
83.其中,在第一交易访问的任一目标参数对应的排序锁队列中加入的针对第一交易的目标信息,包括第一交易的标识及该目标参数在第一交易中的读写属性。第一交易的标识可以包括但不限于第一交易的id,对第一交易的id进行哈希计算得到的哈希值,对第一交易的交易数据进行哈希计算得到的哈希值等。
84.在步骤307中,基于各个排序锁队列,确定满足触发条件。
85.在本实施例中,可以基于各个排序锁队列中针对第一交易的目标信息的位置,确定是否满足触发条件。具体来说,首先,可以确定第一交易访问的目标参数的个数,作为计数值的初始值。至少在确定任一排序锁队列中针对第一交易的目标信息位于首位的情况下,将该计数值减1。
86.可选地,在第一交易写入的目标参数所对应的排序锁队列中,如果针对第一交易的目标信息位于首位,则将计数值减1。在第一交易读取的目标参数所对应的排序锁队列中,如果针对第一交易的目标信息位于首位,或者针对第一交易的目标信息之前不存在包括写属性的信息,则将计数值减1。最后,在计数值为0的情况下,确定满足触发条件。
87.在步骤309中,在满足触发条件的情况下,基于从第二执行分片的节点接收到的状态值执行第一交易对应的操作。
88.在本实施例中,在满足触发条件的情况下,触发第一交易对应的操作的执行。可以直接基于该状态值执行第一交易对应的操作,也可以将第一交易放入执行池中,并从中随机取出第一交易,基于该状态值执行对应的操作。
89.在步骤311中,针对各个排序锁队列,执行对上述目标信息的出队列操作。
90.在本实施例中,在第一交易对应的操作执行完成之后,可以针对各个排序锁队列,执行对上述目标信息的出队列操作。对于任一排序锁队列,可以将上述目标信息删除,并将
该目标信息之后针对其它交易的目标信息前移一位。
91.为了便于理解,下面提供一个完整的应用实例,对本实施例的方案进行示意性说明。具体来说,区块链系统包括执行分片a和执行分片b,参数k1,参数k2
……
参数km对应的账户状态均存储于执行分片a中。参数v1对应的账户状态存储于执行分片b中。执行分片a的节点存储有预设的索引列表a,列表a中包括参数k1对应的排序锁队列1的地址,参数k2对应的排序锁队列2的地址,
……
参数km对应的排序锁队列m的地址。
92.执行分片a的节点和执行分片b的节点接收到多个交易,按顺序排列为交易1,交易2和交易3。其中,交易1为跨分片交易。交易1访问的参数包括读取的参数v1,读取的参数k1和写入的参数k2,其访问的目标参数的个数为2,将2作为交易1对应的计数值的初始值。交易2访问的参数包括读取的参数k1和读取的参数k2,其访问的目标参数的个数为2,将2作为交易2对应的计数值的初始值。交易3访问的参数包括读取的参数k1和写入的参数k2,其访问的目标参数的个数为2,将2作为交易3对应的计数值的初始值。
93.首先,可以基于预设的索引列表,查找到参数k1对应的排序锁队列1的地址,以及参数k2对应的排序锁队列2的地址。并按照交易的排序依次将针对交易1的第一目标信息,针对交易2的第二目标信息以及针对交易3的第三目标信息分别加入排序锁队列1和排序锁队列2中。
94.如图4a所示,在排序锁队列1中,位于首位的是针对交易1的第一目标信息,包括交易1的标识tx1以及参数k1在交易1中的读写属性“读”。位于第二位的是针对交易2的第二目标信息,包括交易2的标识tx2以及参数k1在交易2中的读写属性“读”。位于第三位的是针对交易3的第三目标信息,包括交易3的标识tx3以及参数k1在交易3中的读写属性“读”。在排序锁队列2中,位于首位的是针对交易1的第一目标信息,包括交易1的标识tx1以及参数k2在交易1中的读写属性“写”。位于第二位的是针对交易2的第二目标信息,包括交易2的标识tx2以及参数k2在交易2中的读写属性“读”。位于第三位的是针对交易3的第三目标信息,包括交易3的标识tx3以及参数k2在交易3中的读写属性“写”。
95.由图4a可知,第一目标信息在排序锁队列1和排序锁队列2中,均位于首位,因此,可以将交易1对应的计数值两次减1。第二目标信息在排序锁队列1中,虽然没有位于首位,但第二目标信息之前的第一目标信息对应的读写属性为读,因此,可以将交易2对应的计数值减1。第三目标信息在排序锁队列1中,也没有位于首位,但第三目标信息之前的第一目标信息和第二目标信息对应的读写属性均为读,因此,可以将交易3对应的计数值减1。此时,交易1对应的计数值为0,交易2对应的计数值为1,交易3对应的计数值为1。
96.由于交易1对应的计数值为0,可以将交易1放入执行池,等待执行。由于交易1读取的参数还包括参数v1,因此,当接收到执行分片b的节点发送的参数v1对应的状态值之后,才能执行在交易1对应的操作。在交易1对应的操作执行完成之后,执行对第一目标信息的出队列操作,具体地,删除排序锁队列1和排序锁队列2中的第一目标信息,并分别将之后的第二目标信息和第三目标信息各前移一位。如图4b所示,为执行对第一目标信息的出队列操作之后的排序锁队列1和排序锁队列2。
97.由图4b可知,第二目标信息在排序锁队列2中,位于首位,因此,可以将交易2对应的计数值再减1。而第三目标信息在排序锁队列2中,没有位于首位,所以交易3对应的计数值不变。此时,交易2对应的计数值为0。可以将交易2放入执行池,等待执行。在交易2对应的
操作执行完成之后,执行对第二目标信息的出队列操作,具体地,删除排序锁队列1和排序锁队列2中的第二目标信息,并将之后的第三目标信息各前移一位。
98.本说明书的上述实施例提供的区块链系统中执行交易的方法,基于第一交易访问的各个目标参数各自对应的各个排序锁队列,触发第一交易对应的操作的执行。保证了所有发送到区块链系统的交易都具有一个全局唯一的顺序,从而保证了不同执行分片对交易执行的一致性,更有效地利用了计算资源,提高了交易执行的效率。
99.应当注意,尽管在上述实施例中,以特定顺序描述了本说明书实施例的方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
100.与前述区块链系统中执行交易的方法实施例相对应,本说明书还提供了区块链系统中执行交易的装置的实施例。
101.如图5所示,图5是本说明书根据一示例性实施例示出的一种区块链系统中执行交易的装置框图,该区块链系统包括执行分片和共识分片,执行分片包括第一执行分片和第二执行分片,该装置部署于第一执行分片的节点,该装置可以包括:第一接收模块501,第二接收模块502和执行模块503。
102.其中,第一接收模块501,用于接收共识分片的节点发送的共识结果,该共识结果为共识分片对交易进行共识得到的。共识结果包括待执行的多个交易,该多个交易包括第一交易,第一交易读取的至少部分参数对应的账户状态存储于第二执行分片。第一交易访问的参数中包括目标参数,目标参数对应的账户状态存储于第一执行分片。
103.第二接收模块502,用于接收第二执行分片的节点发送的至少部分参数对应的状态值。
104.执行模块503,用于基于该状态值执行第一交易对应的操作。其中,第一交易对应的操作包括读和/或写操作。
105.在一些实施方式中,该装置还可以包括:更新模块(图中未示出)。
106.其中,更新模块,用于在执行第一交易对应的操作之后,根据执行的结果更新第一执行分片的世界状态。
107.在另一些实施方式中,该装置还可以包括:获取模块(图中未示出)。
108.其中,获取模块,用于获取多个交易中各个交易各自访问的参数,任一交易访问的参数包括该交易读取的参数和/或写入的参数。
109.其中,执行模块503可以包括:执行子模块(图中未示出)。
110.执行子模块,用于基于各个交易各自访问的参数以及上述状态值,执行第一交易对应的操作。
111.在另一些实施方式中,执行子模块包括:第一确定子模块,第二确定子模块,添加子模块,触发子模块和操作子模块(图中未示出)。
112.其中,第一确定子模块,用于基于各个交易各自访问的参数,确定第一交易。
113.第二确定子模块,用于确定第一交易访问的各个目标参数及第一交易对应的排序。
114.添加子模块,用于按照上述排序在各个目标参数各自对应的各个排序锁队列中加入针对第一交易的目标信息。
115.触发子模块,用于基于各个排序锁队列,确定满足触发条件。
116.操作子模块,用于在满足触发条件的情况下,基于上述状态值执行第一交易对应的操作。
117.在另一些实施方式中,触发子模块被配置用于:基于各个排序锁队列中目标信息的位置,确定满足触发条件。
118.在另一些实施方式中,触发子模块通过如下方式基于各个排序锁队列中目标信息的位置,确定满足触发条件:确定第一交易访问的目标参数的个数,作为计数值的初始值,至少在确定任一排序锁队列中目标信息位于首位的情况下,将计数值减1,在计数值减为0的情况下,确定满足触发条件。
119.在另一些实施方式中,该装置还可以包括:释放模块(图中未示出)。
120.其中,释放模块,用于针对各个排序锁队列,执行对目标信息的出队列操作。
121.在另一些实施方式中,在第一交易访问的任一目标参数对应的排序锁队列中加入的针对第一交易的目标信息包括第一交易的标识及目标参数在第一交易中的读写属性。
122.应当理解,上述装置可以预先设置在第一执行分片的节点中,也可以通过下载等方式而加载到第一执行分片的节点中。上述装置中的相应模块可以与第一执行分片的节点中的模块相互配合以实现区块链系统中执行交易的方案。
123.如图6所示,图6是本说明书根据一示例性实施例示出的一种区块链系统中执行交易的装置框图,该区块链系统包括执行分片和共识分片,执行分片包括第一执行分片和第二执行分片,该装置部署于第二执行分片的节点,该装置可以包括:接收模块601和发送模块602。
124.其中,接收模块601,用于接收共识分片的节点发送的共识结果,共识结果为共识分片对交易进行共识得到的。共识结果包括待执行的多个交易,多个交易包括第一交易,第一交易读取的至少部分参数对应的账户状态存储于第二执行分片。第一交易访问的参数中包括目标参数,目标参数对应的账户状态存储于第一执行分片。
125.发送模块602,用于根据第一交易将至少部分参数对应的状态值发送给第一执行分片的节点。
126.在一些实施方式中,发送模块602包括可以包括:获取子模块,第一确定子模块,第二确定子模块和发送子模块(图中未示出)。
127.其中,获取子模块,用于获取多个交易中各个交易各自访问的参数,任一交易访问的参数包括该交易读取的参数和/或写入的参数。
128.第一确定子模块,用于基于各个交易各自访问的参数,确定第一交易。
129.第二确定子模块,用于确定第一交易访问的部分参数对应的账户状态存储于第一执行分片。
130.发送子模块,用于读取该状态值,并将该状态值发送给第一执行分片的节点。
131.应当理解,上述装置可以预先设置在第二执行分片的节点中,也可以通过下载等方式而加载到第二执行分片的节点中。上述装置中的相应模块可以与第二执行分片的节点中的模块相互配合以实现区块链系统中执行交易的方案。
132.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书一个或多个实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
133.本说明书一个或多个实施例还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图2至图3任一实施例提供的区块链系统中执行交易的方法。
134.本说明书一个或多个实施例还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述图2至图3任一实施例提供的区块链系统中执行交易的方法。
135.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
136.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
137.本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。其中,软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的存储介质中。
138.以上所述的具体实施方式,对本技术的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本技术的具体实施方式而已,并不用于限定本技术的保护范围,凡在本技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1