交易执行方法、区块链节点及其计算设备和主机与流程

文档序号:28171740发布日期:2021-12-24 23:47阅读:111来源:国知局
交易执行方法、区块链节点及其计算设备和主机与流程

1.本说明书实施例涉及区块链技术领域,更具体地,涉及一种在区块链节点中执行交易的方法、区块链节点、及区块链节点中的计算设备和主机。


背景技术:

2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证数据区块不可篡改和不可伪造。区块链节点在执行区块中的多个交易时,可通过并行执行交易加快交易执行速度。
3.在一些区块链节点中,可通过至少两个计算设备并行执行区块中的交易。其中,每个计算设备中包括各自的处理器和内存,计算设备与计算设备之间并不共享内存。在该场景下,计算设备侧在执行交易时通常通过访问主机获得需要的状态信息。


技术实现要素:

4.本说明书实施例旨在提供一种交易执行方案,减少交易执行时间,提升了区块链节点的系统效率。
5.本说明书第一方面提供一种交易执行方法,所述方法由区块链节点执行,所述区块链节点包括主机和第一计算设备,所述方法包括:
6.主机将第一区块中的部分交易发送给第一计算设备,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作,所述主机中包括第一存储空间,所述第一存储空间用于在所述第一区块的执行过程中存储所述第一区块的多个第一信息,所述多个第一信息分别指示所述执行过程中访问的多个变量的当前状态,所述第一计算设备中包括第二存储空间;
7.所述第一计算设备在开始执行所述第一交易之后,至少在确定所述第二存储空间中存储有所述第一变量的第一状态的情况中,从所述第二存储空间读取所述第一变量的第一状态,根据所述第一状态得到所述第一交易的执行结果;将所述执行结果和第二信息发送给所述主机,所述第二信息指示所述第一交易的执行中读取了所述第一状态;
8.所述主机在依次提交所述第一区块中提交顺序在所述第一交易之前的交易之后,在根据所述第一信息和所述第二信息确定所述第一状态为所述第一变量的当前状态的情况下,提交所述第一交易。
9.在一种实施方式中,所述方法还包括:所述主机在依次提交所述第一区块中提交顺序在所述第一交易之前的交易之后,在根据所述第一信息和所述第二信息确定所述第一状态不是所述第一变量的当前状态的情况下,通知所述第一计算设备重新执行所述第一交易。
10.在一种实施方式中,所述方法还包括,在执行所述第一交易之前,所述第一计算设备向所述主机发送与第二交易对应的对所述第一变量的读取请求;所述主机响应于所述第
一计算设备的读取请求将所述第一变量的当前的第一状态和第三交易的标识发送给所述第一计算设备,所述第三交易为写入所述第一状态的交易;所述第一计算设备在所述第二存储空间中记录所述第一变量的第一状态信息,所述第一状态信息中包括所述第一状态和所述第三交易的标识,其中,所述第二信息为所述第三交易的标识。
11.在一种实施方式中,所述方法还包括,所述主机在将所述第一变量的第一状态和第三交易的标识发送给所述第一计算设备之后,在所述第一存储空间中记录与所述第一变量和所述第一计算设备对应的第一执行信息,所述第一执行信息包括所述第二交易和所述第三交易,指示所述第二交易的执行中读取了所述第三交易写入的状态。
12.在一种实施方式中,所述方法还包括,所述主机在接收所述执行结果和所述第二信息之后,在所述第一存储空间中记录与所述第一变量和所述第一计算设备对应的第二执行信息,所述第二执行信息包括所述第一交易和所述第三交易。
13.在一种实施方式中,所述第一变量的所述第一信息为写入所述第一变量的当前状态的交易的标识,所述根据所述第一信息和所述第二信息确定所述第一状态为所述第一变量的当前状态包括,在所述第一变量的第一信息为所述第三交易的标识的情况下,确定所述第一状态为所述第一变量的当前状态。
14.在一种实施方式中,所述方法还包括:所述主机将所述部分交易的提交顺序发送给所述第一计算设备;
15.所述至少在确定所述第二存储空间中存储有所述第一变量的第一状态的情况中,读取所述第一变量的第一状态包括:在确定所述第二存储空间中存储有所述第一变量的所述第一状态信息、且所述第三交易的提交顺序在所述第一交易之前的情况中,读取所述第一状态。
16.在一种实施方式中,所述方法还包括:所述第一计算设备在将所述第一状态信息存储到所述第二存储空间中之后,在确定所述第二存储空间中存储有所述第一交易读取了第四交易写入的第一变量的状态的信息的情况中,重新执行所述第一交易。
17.在一种实施方式中,所述方法还包括,所述第一计算设备在确定所述第二存储空间中未存储所述第一交易对所述第一变量的读取信息的情况中,在所述第二存储空间中记录所述第一交易读取了所述第三交易写入的第一变量的状态的信息,所述第一计算设备在得到所述第一交易的执行结果之后,从所述第二存储空间获取所述第二信息。
18.在一种实施方式中,所述第一交易中还包括对第二变量的写操作,所述方法还包括:所述第一计算设备在执行所述写操作之后,在所述第二存储空间中记录第二变量的第二状态信息,所述第二状态信息中包括所述第一交易的标识和所述第一交易写入的所述第二变量的第二状态。
19.在一种实施方式中,所述方法还包括:所述主机在提交所述第一交易之后,记录所述第二变量的当前状态为所述第二状态,并记录所述第一交易为写入所述第二变量的所述第二状态的交易。
20.在一种实施方式中,所述第一存储空间中存储有与第二变量和第二计算设备对应的第三执行信息,所述第三执行信息中包括第五交易和第六交易,指示所述第五交易的执行中读取了所述第六交易写入的第二变量的状态,所述第五交易的提交顺序在所述第一交易之后,所述第六交易的提交顺序在所述第一交易之前,所述方法还包括:所述主机在接收
到所述执行结果之后、或者在提交所述第一交易之后、或者在提交所述第五交易之前,根据所述第三执行信息通知所述第二计算设备重新执行所述第五交易。
21.在一种实施方式中,所述第一计算设备为fpga芯片中包括的一个计算单元。
22.本说明书第二方面提供一种交易执行方法,所述方法由区块链节点包括的计算设备执行,所述区块链节点还包括主机,所述方法包括:
23.从主机接收第一区块中的部分交易,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作;
24.在开始执行所述第一交易之后,至少在确定所述计算设备的存储空间中存储有所述第一变量的第一状态的情况中,从所述存储空间读取所述第一变量的第一状态,根据所述第一状态得到所述第一交易的执行结果;
25.将所述执行结果和第二信息发送给所述主机,所述第二信息指示所述第一交易的执行中读取了所述第一状态。
26.在一种实施方式中,所述方法还包括,在执行所述第一交易之前,向所述主机发送与第二交易对应的对所述第一变量的读取请求;从所述主机接收所述第一变量的当前的第一状态和第三交易的标识,所述第三交易为写入所述第一状态的交易;在所述存储空间中记录所述第一变量的第一状态信息,所述第一状态信息中包括所述第一状态和所述第三交易的标识,其中,所述第二信息为所述第三交易的标识。
27.在一种实施方式中,所述方法还包括,从主机接收所述部分交易的提交顺序,所述至少在确定所述存储空间中存储有所述第一变量的第一状态的情况中,读取所述第一变量的第一状态包括:在确定所述存储空间中存储有所述第一变量的第一状态信息、且所述第三交易的提交顺序在所述第一交易之前的情况中,读取所述第一状态。
28.在一种实施方式中,所述方法还包括:在将所述第一变量的第一状态信息存储到所述存储空间中之后,在确定所述存储空间中存储有所述第一交易读取了第四交易写入的第一变量的状态值的信息的情况中,重新执行所述第一交易。
29.在一种实施方式中,所述方法还包括,在确定所述存储空间中未存储所述第一交易对第一变量的读取信息的情况中,在所述存储空间中记录所述第一交易读取了所述第三交易写入的第一变量的状态值的信息,在得到所述第一交易的执行结果之后,从所述存储空间获取所述第二信息。
30.在一种实施方式中,所述第一交易中还包括对第二变量的写操作,所述方法还包括:在执行所述写操作之后,在所述存储空间中记录第二变量的第二状态信息,所述第二状态信息中包括所述第一交易的标识和所述第一交易写入的所述第二变量的第二状态。
31.本说明书第三方面提供一种交易执行方法,所述方法由区块链节点中包括的主机执行,所述区块链节点中还包括计算设备,所述方法包括:
32.将第一区块中的部分交易发送给所述计算设备,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作,所述主机中包括第一存储空间,所述第一存储空间用于在所述第一区块的执行过程中存储所述第一区块的多个第一信息,所述多个第一信息分别指示所述执行过程中访问的多个变量的当前状态,所述计算设备中包括第二存储空间;
33.从所述计算设备接收所述第一交易的执行结果和第二信息,所述第二信息指示所
述第一交易的执行中读取了所述第二存储空间中存储的第一变量的第一状态;
34.在依次提交所述第一区块中提交顺序在所述第一交易之前的交易之后,在根据所述第一信息和所述第二信息确定所述第一状态为所述第一变量的当前状态的情况下,提交所述第一交易。
35.本说明书第四方面提供一种区块链节点,包括主机和计算设备,
36.所述主机被配置为将第一区块中的部分交易发送给所述计算设备以及从所述计算设备接收交易的执行结果,所述主机中包括第一存储空间,所述第一存储空间用于在所述第一区块的执行过程中存储所述第一区块的多个第一信息,所述多个第一信息分别指示所述执行过程中访问的多个变量的当前状态;
37.所述计算设备被配置为从所述主机接收所述部分交易,执行所述部分交易,并将交易的执行结果和第二信息发送给所述主机,所述计算设备中包括第二存储空间,所述第二存储空间用于存储在执行所述部分交易的过程中访问的变量的状态,所述第二信息指示所述执行过程中读取的变量的状态。
38.在一种实施方式中,所述第一信息为写入所述当前状态的交易的标识,所述第二存储空间中还用于存储所述部分交易中的第一交易所读取的第一变量的第一状态对应的第二交易的标识,所述第二交易为写入所述第一状态的交易,所述第二信息为所述第二交易的标识,
39.所述主机还被配置为基于所述第二交易的标识和所述第一变量的所述第一信息,确定所述第一交易是否执行成功。
40.在一种实施方式中,所述主机还被配置为在接收所述执行结果和所述第二信息之后,在所述第一存储空间中记录与所述第一变量和所述第一计算设备对应的执行信息,所述执行信息包括所述第一交易和所述第二交易,指示所述第一交易的执行中读取了所述第二交易写入的状态。
41.本说明书第五方面提供一种用于区块链节点的计算设备,所述区块链节点还包括主机,所述计算设备包括:
42.接收单元,用于从主机接收第一区块中的部分交易,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作;
43.读取单元,用于在开始执行所述第一交易之后,至少在确定存储空间中存储有所述第一变量的第一状态的情况中,从所述存储空间读取所述第一变量的第一状态,根据所述第一状态得到所述第一交易的执行结果;
44.发送单元,用于将所述执行结果和第二信息发送给所述主机,所述第二信息指示所述第一交易的执行中读取了所述第一状态。
45.本说明书第六方面提供一种用于区块链节点的主机,所述区块链节点中还包括计算设备,所述主机包括:
46.发送单元,用于将第一区块中的部分交易发送给所述计算设备,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作,所述主机中包括第一存储空间,所述第一存储空间用于在所述第一区块的执行过程中存储所述第一区块的多个第一信息,所述多个第一信息分别指示所述执行过程中访问的多个变量的当前状态,所述计算设备中包括第二存储空间;
47.接收单元,用于从所述计算设备接收所述第一交易的执行结果和第二信息,所述第二信息指示所述第一交易的执行中读取了所述第二存储空间中存储的第一变量的第一状态;
48.提交单元,用于在依次提交所述第一区块中提交顺序在所述第一交易之前的交易之后,在根据所述全局执行信息确定所述第一状态为所述第一变量的当前状态的情况下,提交所述第一交易。
49.本说明书第七方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现本说明书第二方面或第三方面所述的方法。
50.本说明书第八方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行本说明书第二方面或第四方面所述的方法。
51.通过本说明书实施例提供的交易执行方案,在区块链节点中的不共享内存的多个计算设备中分别缓存交易执行过程中访问的变量的状态,对于其中频繁只读的变量,计算设备中缓存的变量的状态值为正确的状态值,从而计算设备可以不经过主机直接从本地内存读取到变量的正确的状态值,减少了与主机通信的时长,减少了交易执行时间,提升了系统性能。
附图说明
52.通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
53.图1示出本说明书实施例提供的区块链节点的架构图;
54.图2为本说明书实施例提供的交易执行方法的流程图;
55.图3为本说明书实施例提供的计算设备中的缓冲区的示意图;
56.图4为本说明书实施例提供的主机的全局缓冲区的示意图;
57.图5为本说明书实施例提供的在区块链节点中对变量进行写操作的方法流程图;
58.图6为本说明书实施例提供的一种用于区块链节点的计算设备的架构图;
59.图7为本说明书实施例提供的一种用于区块链节点的主机的架构图。
具体实施方式
60.下面将结合附图描述本说明书实施例。
61.图1示出本说明书实施例提供的区块链节点的架构图。如图1所示,区块链节点中包括主机100、计算设备210和计算设备220。其中,主机100中包括处理器101和内存102,内存102中可存储计算设备210和计算设备220在执行区块的过程中的全局信息。主机100可用于进行以下操作:从客户端或者其他区块链节点接收交易,通过共识确定区块中的多个交易和该多个交易的提交顺序,将区块中的多个交易分别发送给计算设备210和计算设备220,协调计算设备210和计算设备220对交易的并行执行,并在交易执行完成之后执行生成区块、更新世界状态等操作。
62.计算设备210和计算设备220用于并行地执行交易。计算设备210和计算设备220可以是空间分离的两个设备,例如,其可以为与主机通信的两台计算机,或者可以为插接到主
机上的两个计算芯片等。或者,计算设备210和计算设备220也可以是一个整体设备中包括的两个子设备,例如,其可以为插接到主机上的一个fpga芯片中的两个子设备(例如计算单元)。其中,计算设备210中包括处理器211和内存212,内存212用于存储处理器211执行交易过程中获取的变量的状态信息,计算设备220中包括处理器221和内存222,内存222用于存储处理器221执行交易过程中获取的变量的状态信息。计算设备210和计算设备220无论是空间分离的、还是集成到一个设备中,其都有各自的内存空间,并且内存212与内存222之间是分离的,即,计算设备210和计算设备220并不共享内存。
63.可以理解,图1中虽然仅示出两个计算设备作为示例,但是这并不用于限制本说明书实施例的范围。在一种实施方式中,区块链节点可以仅包括主机100和一个计算设备,并由主机和该计算设备并行执行交易,该计算设备例如为与主机通信的计算机,或者可以为安装到主机上的计算芯片等。在另一种实施方式中,区块链节点可包括主机100和两个以上(例如3个)计算设备,该多个计算设备可并行执行区块中的多个交易。另外,图1中虽然示出主机100通过内存102存储全局信息,计算设备210和220通过各自的内存存储状态信息,本说明书实施例不限于此,而是可以使用其他存储介质进行对信息的存储。
64.在相关技术中,计算设备210和计算设备220在并行执行一个区块中的多个交易时,其不会在其各自的内存中存储状态信息。这是因为,计算设备210和计算设备220都在并行执行交易,它们有可能会对相同的变量的状态进行更改。计算设备210和计算设备220之间不进行相互通信,例如计算设备210不能获知计算设备220中执行交易过程中的状态信息。因此计算设备210即使存储了在本地执行交易过程中得到的状态信息,该状态信息对于特定的交易有可能是错误的,基于该状态信息执行交易会导致交易执行失败。通常的做法是,在每执行一个交易时,计算设备210在需要读取状态信息时,都从主机100获取状态信息,基于该获取的状态信息执行交易。计算设备210在执行完成交易之后,将交易的执行结果发送给主机,由主机100基于缓存信息确定该交易是否执行成功,在执行成功的情况中,提交交易。
65.在上述相关技术中,由于在计算设备中不启用数据缓存,所有的数据访问请求都必须发送给主机100,增多了计算设备与主机之间的通信次数,降低了交易执行速度,限制了系统性能。
66.本说明书实施例提供一种交易执行方案,其中,计算设备在本地的内存中存储变量的状态信息,计算设备执行交易时直接基于本地缓存的状态信息执行交易,并将交易的执行结果和读取的状态的信息发送给主机,主机侧通过存储的全局信息确定交易的执行是否成功,从而,尤其在交易中读取的变量大部分为只读变量的场景中提高了交易执行速度。
67.图2为本说明书实施例提供的交易执行方法的流程图。其中,图2所示的计算设备可以为图1中的计算设备210或者计算设备220,下文中以计算设备210为例进行描述。图2所示的方法流程为计算设备执行的交易中包括对变量的读操作情况下的流程。下文将详细描述图2所示的各个步骤。
68.首先,在步骤s201,主机100向计算设备210发送区块b1的部分交易。
69.主机100通过与区块链中的其他节点的主机进行共识,从而确定待执行的区块(例如区块b1)中包括的多个交易及该多个交易的提交顺序。主机100在确定区块b1中的多个交易之后,可将该多个交易分成两组交易,并将该两组交易分别发送给计算设备210和计算设
备220,从而计算设备210和计算设备220可并行执行该两组交易。具体是,主机100可以随机将多个交易分成两组交易,或者可以按照预设规则将多个交易分成两组交易。例如,主机100发送给计算设备210中的一组交易中包括交易tx1、交易tx3、交易tx5、交易tx7等奇数编号交易,主机100发送给计算设备220中的一组交易中包括交易tx2、交易tx4、交易tx6、交易tx8等偶数编号交易。
70.在步骤s203,计算设备210确定缓冲区中是否命中交易txi(下面分别以tx1和tx3为例进行描述)中待读取的变量key1。
71.计算设备210在接收到例如交易tx1、交易tx3、交易tx5和交易tx7之后,可并行执行该4个交易,也可以串行执行该4个交易。
72.图3示出计算设备210的内存212中的缓冲区的架构图。如图3所示,内存212中可包括缓冲区1、缓冲区2和缓冲区3。其中,缓冲区1用于存储各个变量的状态值,以在计算设备210执行交易时提供变量的状态值。其中,计算设备210在执行交易的过程中从主机获取变量的状态值之后、或者在执行交易的过程中写入变量的状态值的情况下在缓冲区1中存储该变量的状态值。缓冲区2例如为与交易tx3对应的私有缓冲区,计算设备210在例如执行交易tx3的过程中读取了变量key1的状态值v0之后,建立缓冲区2,并在缓冲区2中存储交易tx3读取的变量key1的状态信息。缓冲区3例如为与交易tx5对应的私有缓冲区,可与缓冲区2类似地建立。可以理解,内存212中还可以包括与其它交易对应的其它缓冲区,在图3中未示出。
73.具体是,在缓冲区1中变量key1的信息中包括“tx

1,v0”,表示key1的状态值v0是与区块b1的上一个区块对应的状态值。在缓冲区1中变量key1的信息中还包括“tx3,v13”,表示key1的状态值v13在执行交易tx3时写入。也就是说,在缓冲区1中记录的tx

1和tx3用于指示写入变量key1的状态值的交易编号。在缓冲区2中包括“key1,tx

1”,表示在执行交易tx3时读取了变量key1的与交易tx

1对应的状态值。
74.可以理解,图3所示的各个缓冲区中的具体内容只是示例性的,而不用于限制本说明书实施例的范围。当计算设备210并行执行多个交易的情况中,通过在缓冲区1中记录变量的各个状态值对应的写入交易的编号,在执行交易中的读取操作时,有助于读取与当前交易对应的状态值。当计算设备210按照交易编号从小到大的顺序串行执行多个交易时,例如串行执行交易tx1、交易tx3、交易tx5和交易tx7,缓冲区1中可仅记录变量的最新的状态值,如此,在执行交易中的读取操作时,可读取该最新的状态值用于继续执行当前的交易。另外,缓冲区2中不限于记录交易tx3中读取的变量值对应的交易编号,而可以记录其他用于确定该变量值的信息,例如,缓冲区2中可记录变量的状态值v0的版本号信息等。通过在交易的私有的缓冲区(例如交易tx3对应的缓冲区2)中存储用于指示该交易执行过程中读取的变量的状态的信息,计算设备在执行完该交易并向主机发送执行结果时,可从该私有缓冲区读取该信息,并将该信息和执行结果一起发送给主机,从而主机可基于该信息确定该交易是否需要重新执行(这部分内容将在后续的步骤中详细描述)。另外,计算设备还可以基于交易的私有缓冲区中的信息确定该交易是否需要重新执行(这部分内容将在下文详细描述)。
75.假设计算设备210首先执行交易tx1,交易tx1中包括对变量key1的读取操作。计算设备210在执行到交易tx1中的该读取操作之后,首先确定内存中的缓冲区1中是否能够命
中变量key1,即确定缓冲区1中是否存储了key1的状态信息。
76.在确定缓冲区1中未存储key1的状态信息的情况中,计算设备210执行步骤s205,向主机100发送状态读取请求,以用于读取变量key1的当前状态(即最新状态)。
77.在步骤s207,主机100响应于计算设备210的读取请求,读取变量key1的当前状态。
78.主机100的内存102中设置了与执行区块b1对应的全局缓冲区。图4示出了全局缓冲区的示意图。在一种实施方式中,该全局缓冲区中可存储各个变量的当前状态(图4中未示出)。具体是,主机100在响应于任一计算设备在执行区块b的过程中的读取请求从状态数据库读取任意变量的状态之后,可将读取的状态作为该变量的当前状态与该变量关联地存储到全局缓冲区中,或者,主机在确定区块b1中的写入任意变量的交易执行成功并提交该交易时,可将该交易写入的该变量的状态作为该变量的当前状态与该变量关联地存储到全局缓冲区中。以变量key1为例,主机100在接收到计算设备210在执行交易tx1时发送的对变量key1的读取请求之后,会首先确定在全局缓冲区中是否命中变量key1,如果没有命中,说明当前还没有交易访问过变量key1,因此,主机100从状态数据库中读取变量key1的状态值v0(即变量key1的当前状态),并在全局缓冲区中存储变量key1的当前状态v0。
79.在另一种实施方式中,如图4所示,在全局缓冲区中除了存储变量的当前状态之外,还可以存储与该当前状态对应的交易编号,所述与该当前状态对应的交易编号也即写入该当前状态的交易的编号。例如,上述读取的变量key1的当前状态为区块b1的前一个区块对应的变量key1的状态v0,因此,可以将状态v0对应的交易编号记录为tx

1。
80.在另一种实施方式中,如图4所示,全局缓冲区中除了存储变量的当前状态和相关交易的标识之外,还可以存储计算设备210和计算设备220分别执行的读取该变量的交易所读取的该变量的状态信息。在该实施方式中,主机100在响应于上述读取请求从状态数据库中读取变量key1的状态v0之后,可以执行步骤s209,在全局缓冲区中增加与变量key1和计算设备210关联的记录“tx1,tx

1”,用于表示交易tx1的执行过程中读取了变量key1的与交易tx

1对应的状态值(即v0)。通过记录该信息,可通过该信息在提交交易之前确定是否需要重新执行交易。
81.在步骤s211,主机100向计算设备210返回变量key1的当前状态v0。
82.在一种实施方式中,主机100可以仅向计算设备210返回状态v0。
83.在另一种实施方式中,主机100可以向计算设备210返回状态v0及对应的交易编号tx

1。
84.在步骤s213,计算设备210更新缓冲区1和与交易tx1对应的私有缓冲区。
85.在一种实施方式中,计算设备210可仅在缓冲区1中与变量key1关联地存储状态值“v0”,以指示变量key1的当前状态。
86.在另一种实施方式中,如图3所示,计算设备210可在缓冲区1中与变量key关联地存储“tx

1,v0”。计算设备210还可以在与交易tx1对应的私有缓冲区中存储“key1,tx

1”(图3中未示出)。
87.在步骤s215,计算设备210基于状态v0继续执行交易tx1,得到交易tx1的执行结果。计算设备210在执行交易tx1的过程中会产生读集和写集,其中,读集中包括在执行交易的过程中读取的各个变量的状态值,写集中包括在执行交易的过程中写入的各个变量的状态值。该执行结果中例如包括在执行交易tx1的过程产生的写集。
88.在步骤s217,计算设备210将交易tx1的执行结果和指示交易tx1读取的状态的信息发送给主机100。
89.在一种实施方式中,计算设备210可从交易tx1的读集中获取执行交易tx1的过程中读取的变量key1的状态值v0,并将交易tx1的执行结果和状态值v0发送给主机100。
90.在另一种实施方式中,计算设备210可以从与交易tx1对应的私有缓存区中读取交易tx1的执行中读取的变量key1的状态值(v0)对应的交易编号“tx

1”,并将交易tx1的执行结果和交易编号“tx

1”一起发送给主机100。
91.可选地,主机100在接收到交易tx1的执行结果和指示状态的信息之后执行步骤s219,在全局缓冲区中记录交易tx1读取的各个变量的状态的信息。这里,由于主机100之前已经在全局缓冲区中与变量key1和计算设备210关联地记录“tx1 tx

1”,这里不需要重复存储,如果交易tx1的执行中还读取了计算设备210中存储的其它变量的状态,则可以类似地在全局缓冲区中与计算设备210和该其它变量关联地记录所读取的状态的信息。通过进行该记录,在提交交易tx1之前,可根据该记录判断交易tx1是否读取了错误的状态,从而可判断是否对交易tx1重新执行。
92.在步骤s221,主机100判断交易tx1是否成功执行。
93.在一种实施方式中,计算设备210将交易tx1的执行结果和变量key1的状态值v0发送给主机100,全局缓冲区中记录了变量key1的当前状态为v0。从而主机100通过比较执行结果中包括的状态值v0和全局缓冲区中记录的状态值v0是一致的,可确定交易tx1读取的为正确的变量key1的状态,因此可判断交易tx1成功执行。
94.在另一种实施方式中,计算设备210将交易tx1的执行结果和从交易tx1的私有缓冲区中读取的状态值v0对应的交易编号“tx

1”一起发送给主机100,全局缓冲区中记录了变量key1的当前状态v0的相关交易为交易tx

1。从而主机100可根据接收的状态值v0对应的交易编号“tx

1”和全局缓冲区中记录的变量key1的当前状态值关联的交易编号“tx

1”,确定交易tx1读取的为正确的变量key1的状态,因此可判断交易tx1成功执行。
95.在步骤s225,主机100在确定交易tx1成功执行之后,可提交交易tx1。
96.具体是,主机100可根据交易tx1的执行结果更新全局缓冲区中的变量状态信息,将交易tx1的执行结果放入已提交交易的数据集合中。具体是,如果交易tx1还包括对任一变量(例如变量key2)的写操作(例如写入的变量key2的状态值为v21),主机100可在全局缓冲区中记录变量key2的当前状态为v21,相关交易为交易tx1。另外,主机100还可以在全局缓冲区中删除前述记录的交易tx1对变量key1的状态的读取信息(例如“tx1 tx

1”),图4中以虚线框表示对该信息(“tx1 tx

1”)的删除。
97.再回到步骤s203,假设计算设备210将要执行的交易tx3中也包括对变量key1的读操作。假设计算设备210在提交交易tx1之后执行交易tx3中的该读操作,计算设备210在执行交易tx3中的该读操作之后,确定缓冲区1中是否命中交易tx3中的待读变量key1。此时由于之前已经执行了读取变量key1的交易tx1,因此,在缓冲区1中可以命中key1,从而计算设备210可直接从缓冲区1中读取变量key1的状态值v0,并执行步骤s215,基于从缓存区1读取的变量key1的状态值v0继续执行交易tx3,得到交易tx3的执行结果。
98.在一种实施方式中,计算设备210按照交易编号的从小到大的顺序执行交易tx1、tx3、tx5等交易,并且在缓冲区1中只记录了变量key1的由计算设备210所获取的状态中的
最新状态。从而,计算设备210在执行交易tx3中的读操作时可从缓冲区1中读取变量key1的状态值。在该实施方式中,在缓冲区1中还可以记录与变量key1的状态值对应的交易编号,计算设备210在读取状态值之后,还可以将与该状态值对应的交易编号(例如交易tx

1)与变量key1关联地存储到与交易tx3对应的私有缓冲区(例如图3中的缓冲区2)中。
99.在另一种实施方式中,计算设备210并行执行例如交易tx1、交易tx3和交易tx5等。计算设备210可在缓冲区1中记录各个变量的多个状态值及各个状态值对应的交易编号(例如如图3中所示)。如图3所示,假设缓冲区1中的变量key1的条目中当前记录了“tx

1,v0”和“tx5,v15”(当前忽略图3中示出的虚线框中的数据),由于交易tx3的交易编号(即3)小于交易tx5的交易编号(即5)且大于交易tx

1的交易编号,因此,计算设备210从缓冲区1中读取在交易tx3执行之前的状态值“v0”,并基于“v0”继续执行交易tx3。同样地,计算设备210在读取了状态值“v0”之后,可在与交易tx3对应的缓冲区2中记录“key1,tx

1”,以指示交易tx3的执行过程中读取了与交易tx

1对应的状态值v0。
100.计算设备210在执行完成交易tx3之后执行步骤s217,将交易tx3的执行结果和指示交易tx3读取的状态的信息发送给主机100。与上文类似地,该指示交易tx3读取的状态信息可以为状态值v0,或者可以为状态值v0对应的交易编号“tx

1”。
101.可选地,主机100在接收到交易tx3的执行结果和指示状态的信息之后执行步骤s219,在全局缓冲区中记录交易tx3对变量key1的状态值v0的读取,例如,如图4所示,主机100可在全局缓冲区中与变量key1和计算设备210对应地记录“tx3 tx

1”,以指示交易tx3读取了交易tx

1写入的变量key1的状态。通过进行该记录,在提交交易tx3之前,如果在交易tx3之前提交的交易对变量key1进行了写入,则可根据该记录判断交易tx3是否读取了错误的状态,从而可判断是否对交易tx3重新执行。
102.之后,主机10执行步骤s221,判断交易tx3是否成功执行。
103.具体是,主机100按照交易编号从小到大的顺序提交各个交易,即,在提交交易tx2之后开始进行对交易tx3的提交。在提交交易tx3时,主机100根据全局缓冲区中记录的变量key1的当前状态的信息和交易tx3的指示状态的信息来确定交易tx3是否读取了过时的状态值,从而确定交易tx3是否成功执行。
104.在一种实施方式中,计算设备210将从交易tx3的读集中获取的交易tx3读取的状态值v0与交易tx3的执行结果一起发送给主机100,假设全局缓冲区中例如记录了变量key1当前的状态值为v12。主机100可判断交易tx3的执行中读取的变量key1的值“v0”与变量key1的当前状态值不一致,因此,主机100可确定交易tx3执行失败。
105.在另一种实施方式中,计算设备210将与状态值v0对应的交易编号“tx

1”与交易tx3的执行结果一起发送给主机100。假设主机100中的当前的全局缓冲区中记录了写入变量key1的当前状态的交易编号为交易tx2。主机100可判断交易tx3中读取的变量key1的状态值的相关交易“tx

1”与变量key1的当前状态的相关交易“tx2”不一致,因此,主机100可确定交易tx3执行失败。可选地,当主机100如上所述在接收到交易tx3的执行结果和指示状态的信息之后在全局缓冲区中记录了“tx3 tx

1”的情况中,主机100可从该记录中获取交易tx3读取的key1的状态值的相关交易为“tx

1”,并据此判断交易tx3中读取的变量key1的状态值的相关交易“tx

1”与变量key1的当前状态的相关交易“tx2”不一致。
106.主机100在确定交易tx3执行失败之后,执行步骤s223,通知计算设备210重新执行
交易tx3。在一种实施方式中,主机100可在上述通知中包括变量key1的当前状态值和关联的交易“tx2,v12”,以使得计算设备210可基于该状态值v12重新执行交易tx3。其中,主机100在将“tx2,v12”发送给计算设备210之后,可相应地在全局缓冲区中与key1和计算设备210关联的条目中记录“tx3,tx2”,以指示交易tx3的执行中读取了交易tx2写入的变量key1的状态值。假设交易tx3中还包括对变量key1的写入操作,主机100在确定交易tx3执行失败之后,由于此时交易tx3还未提交,全局缓冲区中仅与计算设备210和key1对应的信息中有可能记录了其它交易对交易tx3写入的key1的状态值的读取,因此,主机100还可以从全局缓冲区中的与计算设备210和key1对应的信息中查找读取了交易tx3写入的变量key1的状态值的其它交易,并通知计算设备210重新执行该其它交易。
107.计算设备210在接收到“tx2,v12”之后,可在缓冲区1中在“tx

1,v0”与“tx5,v15”之间记录“tx2,v12”(如图3中虚线框所示),以表示v12为由交易tx2写入的状态值。计算设备210在重新执行交易tx3的过程中,可以从缓存区1中读取变量key1的状态值中交易编号小于3的最大交易编号对应的状态值(即与tx2对应的v12),还可以在缓冲区2中将“key1,tx

1”修改为“key1,tx2”。之后,计算设备210可基于状态值v12重新执行交易tx3,并将重新执行得到的执行结果发送给主机100。
108.交易tx3中除了包括上述读取变量key1的操作,有可能在该读取操作之后包括写入变量key1的操作,用于将变量key1的状态更新为新的状态(例如v13)。在该情况中,计算设备210在通过上述步骤s215执行交易tx3的过程中,在执行读取变量key1的操作之后,还执行写入变量key1的操作。图5示出本说明书实施例提供的在区块链节点中对变量进行写操作的方法流程图。
109.如图5所示,在步骤s501,计算设备210执行对变量key1的写操作,具体是,在交易tx3的读写集中写入对变量key1写入的状态值v13。
110.在步骤s503,计算设备210基于上述写操作更新缓冲区1。
111.具体是,计算设备210在缓冲区1中与变量key1关联地写入交易tx3的执行中写入的状态值“v13”。在一种实施方式中,计算设备210按照交易编号从小到大的顺序执行交易,因此,计算设备210可仅将“v13”与变量key1关联地写入缓冲区1中,并且删除变量key1的之前的老状态值。
112.在另一种实施方式中,计算设备210并行执行多个交易,从而,计算设备210可如图3中所示,在变量key1的条目中在“tx

1,v0”和“tx5,v15”之间增加“tx3,v13”,以表示交易tx3对变量key1进行了写入,且交易tx3与状态值v13对应。
113.计算设备210可在执行上述操作之后执行步骤s505,向主机100发送变量key1的状态更新信息。在一种实施方式中,计算设备210可在执行上述写操作之后立即将包括“key1,tx3,v13”的信息发送给主机100。在另一种实施方式中,计算设备210可在执行完成交易tx3之后向主机100发送交易tx3的执行结果,该执行结果中包括执行交易tx3的过程中写入的变量的值,从而将变量key1的状态更新信息发送给主机100.
114.主机100在接收到变量key1的状态更新信息之后,执行步骤s507,基于该状态更新信息确定各个计算设备中需要重新执行的交易的信息,并在步骤s509通知相应的计算设备。主机100可以在接收到该状态更新信息之后立即执行步骤s507和步骤s509,也可以在提交交易tx3之后执行步骤s507和步骤s509。
115.具体是,参考图4,假设在全局缓冲区中与变量key1和计算设备210关联地记录了“tx5,tx2”,表示交易tx5的执行中读取了交易tx2写入的变量key1的状态值,交易tx2的提交顺序在交易tx3之前,而交易tx3的执行又更新了变量key1的状态值,因此,主机100可确定交易tx5的执行过程中读取了变量key1的错误的(或者过时的)状态值,因此交易tx5需要重新执行。主机100之后可通知计算设备210重新执行交易tx5。类似地,假设交易tx5中包括对变量key2的写入,主机100在确定交易tx5执行失败之后,主机100还可以从全局缓冲区中的与计算设备210和key2对应的信息中查找读取了交易tx5写入的变量key2的状态值的其它交易,并通知计算设备210重新执行该其它交易。计算设备210在接收到通知之后在步骤s511重新执行交易tx5。计算设备210在重新执行交易tx5的过程中,由于之前通过对交易tx3的执行已经在缓冲区1中的变量key1的条目中增加了“tx3,v13”,因此计算设备210可从缓冲区1中读取变量key1的状态值“v13”用于执行交易tx5,从而使得交易tx5读取到正确的状态值。
116.同样参考图4,假设在全局缓冲区中与变量key1和计算设备220关联地记录了“tx4,tx2”,表示交易tx4的执行中读取了交易tx2写入的变量key1的状态值,交易tx2的提交顺序在交易tx3之前,而交易tx3的执行又更新了变量key1的状态值,因此,可确定交易tx4的执行过程中读取了变量key1的错误的状态值,因此交易tx4也需要重新执行,主机100可同样地执行步骤s211,通知计算设备220重新执行交易tx4。计算设备220在步骤s513重新执行交易tx4。在一种实施方式中,主机100可将“tx3,v13”与所述通知一起发送给计算设备220,从而计算设备220可基于该状态值“v13”重新执行交易tx4。
117.在一种实施方式中,主机100可以在交易tx3提交之后通知计算设备220交易tx4需要重新执行,在交易tx3提交之后,主机100在全局缓冲区中将变量key1的当前状态修改为“v13”,并将相关交易的标识修改为“tx3”。计算设备220在重新执行交易tx4时,从主机100请求读取变量key1的当前状态(即“v13”)及相关的交易编号(即“tx3”),从而计算设备220可获取正确的状态值用于重新执行交易tx4。主机100在将“tx3 v13”发送给计算设备220之后,可删除全局缓冲区中与变量key1和计算设备220关联的“tx4tx2”,并在该位置记录“tx4 tx3”。
118.参考图3,假设计算设备210在执行交易tx3的上述写操作之前执行了交易tx5中的对变量key1的读取操作,读取了状态值v0,并在内存212中与交易tx5对应的缓冲区3中记录了“key1,tx

1”。假设计算设备210在如上文所述在缓冲区1中记录了“tx3 v13”之后,再次执行交易tx5中对变量key1的读取操作,此时读取的状态值为“v13”,计算设备210在读取到状态值v13之后,在将“key1 tx3”记录到缓冲区3的过程中确定缓冲区3中已经记录了“key1 tx

1”,从而可确定交易tx5在之前的执行中读取了错误的状态值,因此回滚对交易tx5的执行,并重新执行交易tx5。其中,在回滚对交易tx5的执行中,可包括在缓冲区1中删除变量key1的条目中的“tx5 v15”,并在缓冲区3中删除“key1,tx

1”。
119.在重新执行交易tx5的过程中,计算设备210在执行交易tx5中对变量key1的第一次读取时,根据缓冲区1中的内容将读取“tx3 v13”,从而读取到正确的状态值。
120.上文参考图2

图5描述了本说明书实施例提供的交易执行方案,通过该方案,在区块链节点中的不共享内存的多个计算设备中分别缓存交易执行过程中访问的变量的状态,对于其中频繁只读的变量,计算设备中缓存的变量的状态值为正确的状态值,计算设备可
以不经过主机直接从本地内存读取到变量的状态值,减少了与主机通信的时长,减少了交易执行时间,提升了系统性能。
121.图6为本说明书实施例提供的一种用于区块链节点的计算设备的架构图,所述区块链节点还包括主机,所述计算设备用于执行图2或图5所示方法,包括:
122.接收单元61,用于从主机接收第一区块中的部分交易,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作;
123.读取单元62,用于在开始执行所述第一交易之后,至少在确定内存中存储有所述第一变量的第一状态的情况中,从所述内存读取所述第一变量的第一状态,根据所述第一状态得到所述第一交易的执行结果;
124.发送单元63,用于将所述执行结果和指示所述第一交易的执行中读取了的状态的信息发送给所述主机。
125.图7为本说明书实施例提供的一种用于区块链节点的主机的架构图,所述区块链节点中还包括计算设备,所述主机用于执行图2或图5所示方法,包括:
126.发送单元71,用于将第一区块中的部分交易发送给所述计算设备,其中,所述部分交易中包括第一交易,所述第一交易中包括对第一变量的读取操作,所述主机中包括第一存储空间,所述第一存储空间用于在所述第一区块的执行过程中存储所述第一区块的多个第一信息,所述多个第一信息分别指示所述执行过程中访问的多个变量的当前状态,所述计算设备中包括第二存储空间;
127.接收单元72,用于从所述计算设备接收所述第一交易的执行结果和第二信息,所述第二信息指示所述第一交易的执行中读取了所述第二存储空间中存储的第一变量的第一状态;
128.提交单元73,用于在依次提交所述第一区块中提交顺序在所述第一交易之前的交易之后,在根据所述全局执行信息确定所述第一状态为所述第一变量的当前状态的情况下,提交所述第一交易。
129.需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
130.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
131.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
132.本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计
约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。其中,软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

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