CN113743943B - 在区块链中执行交易的方法、区块链、主节点和从节点 - Google Patents

在区块链中执行交易的方法、区块链、主节点和从节点 Download PDF

Info

Publication number
CN113743943B
CN113743943B CN202111296876.1A CN202111296876A CN113743943B CN 113743943 B CN113743943 B CN 113743943B CN 202111296876 A CN202111296876 A CN 202111296876A CN 113743943 B CN113743943 B CN 113743943B
Authority
CN
China
Prior art keywords
transaction
transactions
execution
read
executing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111296876.1A
Other languages
English (en)
Other versions
CN113743943A (zh
Inventor
邓福喜
谢桂鲁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202111296876.1A priority Critical patent/CN113743943B/zh
Publication of CN113743943A publication Critical patent/CN113743943A/zh
Application granted granted Critical
Publication of CN113743943B publication Critical patent/CN113743943B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification

Landscapes

  • Business, Economics & Management (AREA)
  • Engineering & Computer Science (AREA)
  • Accounting & Taxation (AREA)
  • Computer Security & Cryptography (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书实施例提供了一种在区块链中执行交易的方法、区块链主节点和从节点,所述方法包括:所述主节点预执行接收的多个交易,得到各个交易的预执行读写集;所述主节点将多个交易及各个交易的预执行读写集发送给从节点;所述从节点基于各个交易的预执行读写集对所述多个交易进行分组;所述从节点基于所述多个交易的分组结果并行执行所述多个交易。

Description

在区块链中执行交易的方法、区块链、主节点和从节点
技术领域
本说明书实施例涉及区块链技术领域,更具体地,涉及一种在区块链中执行交易的方法、区块链、主节点和从节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证数据区块不可篡改和不可伪造。区块链节点在执行区块中的多个交易时,可通过并行执行交易加快交易执行速度。然而,由于调用智能合约的交易在执行前不能预知访问的变量,因此通常不能并行执行。
发明内容
本说明书实施例旨在提供一种在区块链中执行交易的方法和区块链主节点和从节点,提高了区块链中的交易执行速度。
为实现上述目的,本说明书第一方面提供一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法包括:所述主节点预执行接收的多个交易,得到各个交易的预执行读写集;所述主节点将多个交易及各个交易的预执行读写集发送给从节点;所述从节点基于各个交易的预执行读写集对所述多个交易进行分组;所述从节点基于所述多个交易的分组结果并行执行所述多个交易。其中,交易的执行读集即为执行该交易得到的读集,该读集中包括执行该交易中包括的读取某个变量的操作而读取的该变量的值,交易的预执行读集即为预执行该交易得到的读集,该读集中包括预执行该交易中包括的读取某个变量的操作而读取的该变量的值。
本说明书第二方面提供一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述主节点执行,包括:预执行接收的多个交易,得到各个交易的预执行读写集;将多个交易及各个交易的预执行读写集发送给从节点;基于各个交易的预执行读写集对所述多个交易进行分组;基于所述多个交易的分组结果并行执行所述多个交易。
本说明书第三方面提供一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述从节点执行,包括:从所述主节点接收多个交易及各个交易的预执行读写集,所述预执行读写集通过由所述主节点预执行各个交易得到;基于各个交易的预执行读写集对所述多个交易进行分组;基于所述多个交易的分组结果并行执行所述多个交易。
本说明书第四方面提供一种区块链主节点,包括:预执行单元,用于预执行接收的多个交易,得到各个交易的预执行读写集;发送单元,用于将多个交易及各个交易的预执行读写集发送给从节点;分组单元,用于基于各个交易的预执行读写集对所述多个交易进行分组;并行执行单元,用于基于所述多个交易的分组结果并行执行所述多个交易。
本说明书第五方面提供一种区块链从节点,包括:接收单元,用于从所述主节点接收多个交易及各个交易的预执行读写集,所述预执行读写集通过由所述主节点预执行各个交易得到;分组单元,用于基于各个交易的预执行读写集对所述多个交易进行分组;并行执行单元,用于基于所述多个交易的分组结果并行执行所述多个交易。
本说明书第六方面提供一种区块链,包括主节点和从节点,
所述主节点用于:预执行接收的多个交易,得到各个交易的预执行读写集;将所述多个交易及各个交易的预执行读写集发送给从节点;
所述从节点用于:基于各个交易的预执行读写集对所述多个交易进行分组;基于所述多个交易的分组结果并行执行所述多个交易。
本说明书第七方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述第二方面所述的方法。
本说明书第八方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述第二方面所述方法。
本说明书第九方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述第三方面所述的方法。
本说明书第十方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述第三方面所述方法。
通过本说明书实施例提供的方案,区块链中的各个节点基于相同的预执行读写集对多个交易进行分组,基于相同的世界状态并行执行多个交易组的交易。在多个交易中的冲突交易较少、且主节点不作恶的情况中,可提高区块链中的交易执行速度。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1为本说明书一实施例所应用的区块链架构图;
图2为本说明书一实施例中的区块链的主节点和从节点的结构图;
图3为本说明书一实施例中的主节点和从节点执行交易的方法流程图;
图4为本说明书一实施例中的一种区块链主节点的架构图;
图5为本说明书一实施例中的一种区块链从节点的架构图。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出本说明书实施例所应用的区块链架构图。如图1中,区块链中例如包含主节点1、从节点2~从节点6共6个节点。节点之间的连线示意性的表示P2P(Peer to Peer,点对点)连接。这些节点上都存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点存储相同的状态数据库。所不同的是,主节点1可负责从客户端接收交易,并向各个从节点发起共识提议,该共识提议中例如包括将要成块的区块(例如区块B1)中的多个交易及各个交易的提交顺序等信息。在区块链中的节点对共识提议共识成功之后,各个节点可根据共识提议中的提交顺序执行该多个交易,从而生成区块B1。
可以理解,图1所示的区块链仅仅是示例性的,本说明书实施例不限于应用于图1所示的区块链,例如还可以应用于包括分片的区块链系统中。
另外,图1中虽然示出了区块链中包括6个节点,本说明书实施例不限于此,而是可以包括其他数目的节点。具体是,区块链中包含的节点可以满足拜占庭容错(ByzantineFault Tolerance,BFT)要求。所述的拜占庭容错要求可以理解为在区块链内部可以存在拜占庭节点,而区块链对外不体现拜占庭行为。一般的,一些拜占庭容错算法中要求节点个数大于3f+1,f为拜占庭节点个数,例如实用拜占庭容错算法PBFT(Practical ByzantineFault Tolerance)。
在相关技术中,为了提高区块链中的每秒执行交易(TPS)指标,需要加快交易的执行速度。为此,区块链节点中可通过并行执行交易来加快交易的执行速度。在一种实施方式中,区块链节点可通过单机中的多个进程并行执行交易,在另一种实施方式中,区块链节点可部署在服务器集群中,通过多台服务器并行执行交易。通常,对于转账交易,区块链节点首先根据交易访问的账户将多个交易划分为多个交易组,各个交易组之间不访问相同的账户,从而可并行执行各个交易组。然而,当交易中调用智能合约时,在执行该交易之前不能预知该交易中访问的变量,从而无法对多个交易进行有效的分组,也就无法对并行执行交易。
本说明书实施例提供了一种在图1所示区块链中并行执行交易的方案,可有效提高所述区块链中的TPS。
图2示出了本说明书实施例提供的区块链的主节点1和从节点(例如从节点2)的结构图。如图2所示,主节点1中包括预执行模块11、共识模块12、计算模块13,从节点2中包括共识模块22和计算模块23。主节点1例如可以与客户端连接,从而可以从客户端接收到多个交易。主节点1在接收到多个交易之后,预执行模块11预执行各个交易,得到各个交易的预执行读写集。其中,预执行读写集包括预执行读集和预执行写集,预执行读集具体可以为在预执行交易的过程中生成的读取的变量的键值对,预执行写集具体可以为在预执行交易的过程中生成的写入的变量的键值对。共识模块12根据接收到的交易向各个从节点的共识模块(例如共识模块22)发起共识提议,该共识提议中包括多个交易、该多个交易的提交顺序及各个交易的预执行读写集,以确定将生成的区块中包括的多个交易及该多个交易的提交顺序。
在区块链中的多个共识节点共识成功之后,主节点和各个从节点中的计算模块可以开始执行所述多个交易。其中,主节点1的计算模块13中包括分组子模块131、多个执行子模块(图中示意示出执行子模块132、执行子模块133和执行子模块134)和重新执行子模块135。从节点2的计算模块23中包括分组子模块231、多个执行子模块(图中示意示出执行子模块232、执行子模块233和执行子模块234)和重新执行子模块235。
具体是,在主节点1中,分组子模块131首先根据预执行读写集将多个交易划分为多个交易组,各个交易组之间不存在冲突交易。其中,两个交易组之间存在冲突交易的情况通常包括如下种情况:第一交易组读取第一变量,第二交易组写入第一变量;第一交易组写入第一变量,第二交易组写入第一变量;第一交易组读取第一变量且写入第一变量,第二交易组写入第一变量;第一交易组读取第一变量且写入第一变量,第二交易组读取第一变量且写入第一变量。其中,如果两个交易组读取相同的变量也可以认为是不存在冲突交易。通常,为了简化方案,分组子模块131可按照各个交易组之间不访问相同的变量的要求来对多个交易进行分组。
之后,多个执行子模块可并行执行所述多个交易组。各个执行子模块在执行交易的过程中,生成交易的执行读写集,其中,执行读写集包括执行读集和执行写集,执行读集具体可以为在执行交易的过程中生成的读取的变量的键值对,执行写集具体可以为在执行交易的过程中生成的写入的变量的键值对。如果确定该交易的执行读集与预执行的读集不一致,则对该交易的执行进行回滚,并由重新执行子模块135在各个执行子模块处理完成全部交易之后重新执行该经回滚的交易,以保证分组的正确性。
在从节点2中,分组子模块231首先根据预执行读写集将多个交易划分为多个交易组。之后,多个执行子模块可并行执行所述多个交易组。各个执行子模块在执行交易的过程中,如果确定该交易的执行读写集与预执行读写集不一致,则对该交易的执行进行回滚,并由重新执行子模块235在各个执行子模块处理完成全部所述多个交易之后重新执行经回滚的交易,以保证分组的正确性。
通过如上所述的过程,从节点不需要对多个交易进行预执行,就可以基于主节点的预执行读写集对多个交易进行分组,从而并行执行该多个交易。另外,通过比较交易的执行读写集和预执行读写集,确定执行时和主节点预执行时变量状态不一致的交易,回滚该交易的执行,并在处理完全部交易之后再重新执行该交易,保证了各个节点在执行多个交易之后的状态一致性。通过该方案,在不同交易访问相同变量的概率较小的情况中,回滚的交易数量较少,从而提高了交易执行速度。
下文将参考图3所示的执行交易的方法流程图详细描述上述过程。在图3中仅示出了主节点1和从节点2执行的流程,可以理解,区块链中的其他从节点与从节点2执行相同的流程。
如图3所示,首先,在步骤S301,主节点1预执行多个交易,得到各个交易的预执行读写集。
在一种实施方式中,主节点1可以在每接收到一个交易之后,就立即对该交易进行预执行,在对多个接收的交易完成预执行之后,对该多个交易进行共识,以确定将要生成的区块包括该多个交易,并确定该多个交易的提交顺序。在该情况中,主节点1可基于各个交易对应的最新区块的世界状态来预执行各个交易。该预执行的读写集对其它交易不可见,并且该预执行的读写集也不改变世界状态。由于主节点在不同的时间接收各个交易,该不同时间的最新区块有可能是不同的区块,因此该多个交易有可能对应不同区块的世界状态。例如,在主节点1流水线地执行多个区块的情况中,主节点1在预执行属于区块B2的交易的同时还执行区块B1(假设区块B1为区块B2之前的区块),从而,在生成区块B1之前预执行的交易基于区块B0对应的世界状态(假设区块B0为区块B1之前的区块)预执行,在生成区块B1之后预执行的交易基于区块B1对应的世界状态预执行。
在另一种实施方式中,主节点1可以在接收多个交易之后,再基于相同的当前最新区块对应的世界状态预执行该多个交易中的每个交易。在该情况中,该多个交易分别基于相同的世界状态进行预执行。
由于在预执行各个交易时不会改变世界状态,即各个交易的预执行不会存在交易冲突,因此,预执行模块11中可包括多个预执行单元,以并行执行对多个交易的预执行,从而加速交易预执行的速度。
主节点1在预执行多个交易中的每个交易之后,得到各个交易的预执行读写集。在一种实施方式中,该预执行读写集中包括读集和写集,其中,读集包括预执行该交易时读取的变量的键值对(key-value),写集包括预执行该交易时写入的变量的键值对。在另一种实施方式中,该预执行读写集的读集中可包括预执行该交易时读取的变量的版本号,写集中可包括写入的变量的版本号,其中,在状态数据库中例如存储了变量的各个写入值及各个写入值对应的版本号,从而通过在读写集中包括变量的版本号即可以确定交易读取和写入的值。
在交易中调用合约的情况中,区块链节点在执行该交易调用的合约的过程中,有可能根据读取的变量的值来对不同的变量进行写入。例如,当读取的变量的值为1时,对变量a写入10,当读取的变量的值为2时,对变量b写入20等等。因此,对于调用合约的交易,区块链节点必须通过执行该交易,才能确定该交易读取的变量和写入的变量,从而得到该交易的读写集。为此,主节点1通过预执行多个交易中的每个交易,得到每个交易的预执行读写集,该预执行的过程与执行交易的过程基本相同,不同在于,在预执行交易的过程中所基于的世界状态如上所述是根据预设规则确定的,不一定是执行交易时的世界状态,在预执行交易之后并不根据预执行交易的结果更新世界状态。
由于主节点1在预执行交易时所基于的世界状态不一定是执行交易时的世界状态,从而使得交易预执行读写集与后面的执行读写集不一致。另外,在另一种情况中,也有可能是主节点故意作恶导致交易预执行读写集与后面的执行读写集不一致。
在步骤S303,主节点1将多个交易及其预执行读写集发送给从节点2。
在一个实施方式中,主节点1可仅将多个交易及其预执行读写集发送给从节点2,从而从节点2可基于该多个交易的预执行读写集对该多交易进行分组。在该实施方式中,从节点无法验证主节点是否作恶,但是通过后续的步骤可以将主节点作恶的交易挑选出来,从而区块链中的多个节点仍然可以得出一致的执行结果。
在另一个实施方式中,主节点1可将多个交易、其预执行读写集及各个预执行读写集相关的区块高度发送给从节点2。所述相关的区块高度即为该预执行读写集所基于的世界状态对应的区块高度,通过将各个预执行读写集相关的区块高度发送给各个从节点,从节点可基于该预执行读写集相关的区块高度对各个预执行读写集进行验证,从而确定主节点是否作恶。在确定主节点作恶的情况中,区块链中可重新确定主节点,并重新执行该多个交易。
在步骤S305,主节点1基于预执行读写集将多个交易划分为多个交易组。
主节点1可基于各个交易的预执行读写集中包括的读取的变量key和写入的变量key,对多个交易进行分组。如上文所述,该分组可使得不同交易组中的交易不访问相同的变量,该访问包括读操作和写操作,在达到该分组条件的情况下,各个交易组之间不会存在冲突交易,因此,各个交易组可以并行执行。
在步骤S307,主节点1并行执行多个交易组中的交易,其中对于执行读集与预执行读集不一致的交易进行回滚。
参考图2,主节点1可通过多个执行子模块并行地执行多个交易组中的交易。假设分组子模块131将多个交易分为6个组g1~组g6,分组子模块131可将组g1和组g2发送给执行子模块132,将组g3和组g4发送给执行子模块133,将组g5和组g6发送给执行子模块134,从而各个执行子模块可并行执行其分到的组中的交易。
以执行子模块132为例,执行子模块132可串行或者并行地执行其分到的组g1和组g2。由于一个组中的交易之间可能存在冲突,执行子模块132串行执行单个组中的交易。执行子模块132在执行组g1的某个交易(例如交易Tx1)之后,仅需要得到该交易Tx1的执行读集。执行子模块132可比较该交易Tx1的执行读集与预执行读写集中的读集是否一致,如果一致,由于主节点1信任其自身预执行交易Tx1得到的预执行写集,因此,执行子模块132可直接将该交易Tx1的预执行的写集用作为该交易的执行写集,并根据该写集更新缓存中的各个变量的状态,该缓存中维护的状态也即为当前最新的世界状态。
如果该交易Tx1的执行读集与预执行读写集中的读集不一致,说明该交易Tx1在执行时的世界状态与其在预执行时的世界状态发生了改变,该交易Tx1的预执行读写集是错误的读写集。尤其是,如上文所述,在交易Tx1的预执行读集与执行读集不一致的情况中,交易Tx1在预执行时写入的变量有可能与在执行时写入的变量是不同的变量,从而使得分组子模块131基于预执行读写集进行分组得到的分组结果是错误的分组结果。为了使得执行子模块132、执行子模块133和执行子模块134仍可以根据已有的分组结果继续并行地执行各个交易组,执行子模块132回滚对该交易Tx1的执行,具体可以是删除执行该交易Tx1得到的读集,并将该交易Tx1从组g1中移出放入组g7中,该组g7用于汇集执行读集与预执行读集不同的交易。也就是说,通过回滚对交易Tx1的执行,使得交易Tx1不会影响当前的世界状态,造成其他交易的回滚,通过将交易Tx1移出组g1,使得交易Tx1访问的变量不会影响对其它交易的分组,使得各个执行子模块可以继续并行执行各个交易组。
可选地,在步骤S309,主节点1重新执行回滚的交易。
主节点1在执行完全部所述多个交易(其中包括执行之后回滚的交易)之后,可根据缓存中维护的变量状态重新执行组g7中的交易,即从所述多个交易组中移出的已回滚的一个或多个交易。其中,缓存中维护的变量状态是根据多个交易中未回滚的交易的写集得到的变量状态。可根据预设规则确定重新执行组g7中的多个交易的执行顺序。例如,可根据组g7中多个交易的交易编号的顺序串行执行该多个交易。
在另一种实施方式中,主节点1在对交易进行回滚之后,可直接向客户端返回交易执行失败,而不用重新执行该交易。
在步骤S311,主节点1在完成对多个交易的执行之后,生成区块。
主节点1在完成对多个交易的执行之后,或者主节点1在完成对多个交易的执行及对回滚的交易的重新执行之后,根据缓存中的状态数据更新状态数据库,并生成区块。该区块包括区块头和区块体。其中,区块体中例如包括所述多个交易各自的交易体、收据等数据。区块头中可以包括状态根、收据根、交易根等数据。
在一种实施方式中,该区块中还可以包括所述多个交易的预执行读写集,通过在区块中包括多个交易的预执行读写集,当其它节点由于故障等原因丢失数据时,可基于该主节点1中的该区块的预执行读写集重新执行该区块中的多个交易,从而获得与主节点1一致的世界状态。
在步骤S313,从节点2基于预执行读写集对多个交易进行分组,将多个交易划分为多个交易组。
该步骤可参考上文中对步骤S305的描述,在此不再赘述。
在步骤S315,从节点2基于多个加以的分组结果并行执行多个交易,其中对执行读写集与预执行读写集不一致的交易进行回滚。
与步骤S307类似地,从节点2在将多个交易分组为组g1~组g6之后,执行子模块232、执行子模块233和执行子模块234可并行执行组g1~g6中的交易。
以执行子模块232为例,执行子模块232在执行组g1的某个交易Tx1之后,得到该交易Tx1的执行读写集。执行子模块232可比较交易Tx1的执行读写集与预执行读写集是否一致。其中,交易Tx1的执行读写集与预执行读写集中不一致的情况包括以下任一种情况:交易Tx1的执行读集与预执行读集不一致;交易Tx1的执行写集与预执行写集不一致;交易Tx1的执行读集与预执行读集不一致,且交易Tx1的执行写集与预执行写集不一致。这里,由于可能存在主节点作恶的情况,执行子模块232即使确定了交易Tx1的执行读集与预执行读集是一致的,也需要继续比较交易Tx1的执行写集与预执行写集是否一致。
如果交易Tx1的执行读写集与预执行读写集一致,执行子模块232可根据交易Tx1的执行写集更新缓存中的各个变量的状态。
如果交易Tx1的执行读写集与预执行读写集中不一致,可能存在两种情况中。在第一种情况中,该交易Tx1在执行时依据的世界状态与其在预执行时依据的世界状态发生了改变,导致该交易的执行读集与预执行读集不同,即该交易的预执行读写集是错误的读写集。在该第一种情况中,如上文所述,如果根据该交易的写集更新缓存中维护的世界状态,有可能导致分组不正确,从而影响后续交易的执行。
在第二种情况中,主节点1有可能作恶使得交易的预执行读写集是错误的读写集。
在上述两种情况中,执行子模块232都可以回滚对该交易的执行,具体可以是删除执行该交易得到的读写集,并将该交易从组g1中移出放入组g7中,该组g7用于汇集执行读写集与预执行读集不同的交易,从而解决上述两种情况带来的问题。
可选地,在步骤S317,从节点2重新执行回滚的交易,即组g7中的交易。
该步骤可参考上文对步骤S309的描述,在此不再赘述。
通过如上所述执行交易,各个从节点与主节点在执行交易的过程中对相同的交易进行回滚,并基于相同的世界状态以相同的顺序执行回滚的交易,从而各个节点最后得到对多个交易的相同的执行结果,并得到相同的与包括该多个交易的区块对应的世界状态。在交易冲突较少,且主节点不作恶的情况中,回滚的交易的数量较少,各个节点通过并行执行交易提高了交易执行速度。
在步骤S319,从节点2生成区块,可选地,可以在区块中包括多个交易的预执行读写集。
该步骤的执行可参考上文对步骤S311的描述。通过在区块中包括多个交易的预执行读写集,当其它节点由于故障等原因丢失数据时,可基于该从节点2中的该区块的预执行读写集重新执行该区块中的多个交易,从而获得与从节点2一致的世界状态。
通过图3所示的方法,区块链中的各个节点基于相同的预执行读写集对多个交易进行分组,基于相同的世界状态并行执行多个交易组的交易,并对交易执行结果与预执行结果不同的交易采用相同的方法进行处理,最终各个节点得到的世界状态一致。在多个交易中的冲突交易较少、且主节点不作恶的情况中,可提高区块链中的交易执行速度。
图4示出根据本说明书实施例的一种区块链主节点的架构图,包括:
预执行单元41,用于预执行接收的多个交易,得到各个交易的预执行读写集;
发送单元42,用于将多个交易及各个交易的预执行读写集发送给从节点;
分组单元43,用于基于各个交易的预执行读写集对所述多个交易进行分组;
并行执行单元44,用于基于所述多个交易的分组结果并行执行所述多个交易。
在一种实施方式中,并行执行单元44还用于,在执行所述多个交易中的第二交易之后回滚对所述第二交易的执行,所述第二交易的执行读集与所述第二交易的预执行读写集中的读集不一致。
在一种实施方式中,所述区块链主节点还包括:重新执行单元45,用于在执行完成所述多个交易之后,重新执行一个或多个所述第二交易。
在一种实施方式中,所述预执行单元41具体用于,基于各个交易对应的最新区块的世界状态预执行各个交易。
在一种实施方式中,所述重新执行单元45具体用于,在执行完成所述多个交易之后,基于最新的世界状态重新执行一个或多个所述第二交易。
图5示出根据本说明书实施例的一种区块链从节点的架构图,包括:
接收单元51,用于从所述区块链的主节点接收多个交易及各个交易的预执行读写集,所述预执行读写集通过由所述主节点预执行各个交易得到;
分组单元52,用于基于各个交易的预执行读写集对所述多个交易进行分组;
并行执行单元53,用于基于所述多个交易的分组结果并行执行所述多个交易。
在一种实施方式中,所述并行执行单元53还用于,在执行所述多个交易中的第一交易之后回滚对所述第一交易的执行,所述第一交易的执行读写集与所述第一交易的预执行读写集不一致。
在一种实施方式中,所述区块链从节点还包括:重新执行单元54,用于在执行完成所述多个交易之后,重新执行一个或多个所述第一交易。
在一种实施方式中,所述区块链从节点还包括,生成单元55,用于在完成对所述多个交易的执行之后,生成第一区块,所述第一区块中包括所述多个交易的预执行读写集。
在一种实施方式中,所述重新执行单元54具体用于,在执行完成所述多个交易之后,基于最新的世界状态重新执行一个或多个所述第一交易。
在一种实施方式中,所述第一交易的所述执行读写集与所述第一交易的预执行读写集不一致包括:所述第一交易的执行读写集中的写集与所述第一交易的预执行读写集中的写集不一致。
在一种实施方式中,各个交易的预执行读写集中包括相关的区块高度。
在一种实施方式中,所述重新执行单元54具体用于,串行地重新执行多个所述第一交易。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (19)

1.一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法包括:
所述主节点预执行接收的多个交易,得到各个交易的预执行读写集;
所述主节点将所述多个交易及各个交易的预执行读写集发送给从节点;
所述从节点基于各个交易的预执行读写集对所述多个交易进行分组;
所述从节点基于所述多个交易的分组结果并行执行所述多个交易;其中,所述从节点在执行所述多个交易中的第一交易之后,确定所述第一交易在执行后得到的执行读写集与所述第一交易的预执行读写集是否一致,在确定不一致时不基于所述第一交易的执行读写集更新世界状态。
2.根据权利要求1所述的方法,还包括:所述从节点在执行完成所述多个交易之后,重新执行一个或多个所述第一交易。
3.根据权利要求1所述的方法,其中,所述主节点预执行接收的多个交易包括,所述主节点基于各个交易对应的最新区块的世界状态预执行各个交易。
4.根据权利要求2所述的方法,所述从节点在执行完成所述多个交易之后,重新执行一个或多个所述第一交易包括,所述从节点在执行完成所述多个交易之后基于最新的世界状态重新执行一个或多个所述第一交易。
5.根据权利要求1所述的方法,还包括,所述从节点在完成对所述多个交易的执行之后,生成第一区块,所述第一区块中包括所述多个交易的预执行读写集。
6.根据权利要求1所述的方法,所述第一交易的所述执行读写集与所述第一交易的预执行读写集不一致包括:所述第一交易的执行读写集中的写集与所述第一交易的预执行读写集中的写集不一致。
7.根据权利要求1所述的方法,其中,各个交易的预执行读写集中包括相关的区块高度。
8.一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述主节点执行,包括:
预执行接收的多个交易,得到各个交易的预执行读写集;
将所述多个交易及各个交易的预执行读写集发送给所述从节点;
基于各个交易的预执行读写集对所述多个交易进行分组;
基于所述多个交易的分组结果并行执行所述多个交易;其中,在执行所述多个交易中的第二交易之后,得到所述第二交易的执行读集和执行写集,确定所述第二交易的执行读集与所述第二交易的预执行读写集中的读集是否一致,在确定不一致时不基于所述第二交易的执行写集更新世界状态。
9.根据权利要求8所述的方法,还包括:在执行完成所述多个交易之后,重新执行一个或多个所述第二交易。
10.根据权利要求8所述的方法,其中,所述预执行接收的多个交易包括,基于各个交易对应的最新区块的世界状态预执行各个交易。
11.根据权利要求9所述的方法,在执行完成所述多个交易之后,重新执行一个或多个所述第二交易包括,在执行完成所述多个交易之后,基于最新的世界状态重新执行一个或多个所述第二交易。
12.一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述从节点执行,包括:
从所述主节点接收多个交易及各个交易的预执行读写集,所述预执行读写集通过由所述主节点预执行各个交易得到;
基于各个交易的预执行读写集对所述多个交易进行分组;
基于所述多个交易的分组结果并行执行所述多个交易;其中,在执行所述多个交易中的第一交易之后,确定所述第一交易在执行后得到的执行读写集与所述第一交易的预执行读写集是否一致,在确定不一致时不基于所述第一交易的执行读写集更新世界状态。
13.根据权利要求12所述的方法,还包括:在执行完成所述多个交易之后,重新执行一个或多个所述第一交易。
14.根据权利要求12所述的方法,还包括,在完成对所述多个交易的执行之后,生成第一区块,所述第一区块中包括所述多个交易的预执行读写集。
15.一种区块链主节点,包括:
预执行单元,用于预执行接收的多个交易,得到各个交易的预执行读写集;
发送单元,用于将所述多个交易及各个交易的预执行读写集发送给所述区块链的从节点;
分组单元,用于基于各个交易的预执行读写集对所述多个交易进行分组;
并行执行单元,用于基于所述多个交易的分组结果并行执行所述多个交易;
所述并行执行单元还用于,在执行所述多个交易中的第二交易之后,得到所述第二交易的执行读集和执行写集,确定所述第二交易的执行读集与所述第二交易的预执行读写集中的读集是否一致,在确定不一致时不基于所述第二交易的执行写集更新世界状态。
16.一种区块链从节点,包括:
接收单元,用于从所述区块链的主节点接收多个交易及各个交易的预执行读写集,所述预执行读写集通过由所述主节点预执行各个交易得到;
分组单元,用于基于各个交易的预执行读写集对所述多个交易进行分组;
并行执行单元,用于基于所述多个交易的分组结果并行执行所述多个交易;
所述并行执行单元还用于,在执行所述多个交易中的第一交易之后,确定所述第一交易在执行后得到的执行读写集与所述第一交易的预执行读写集是否一致,在确定不一致时不基于所述第一交易的执行读写集更新世界状态。
17.一种区块链,包括主节点和从节点,
所述主节点用于:预执行接收的多个交易,得到各个交易的预执行读写集;将所述多个交易及各个交易的预执行读写集发送给从节点;
所述从节点用于:基于各个交易的预执行读写集对所述多个交易进行分组;基于所述多个交易的分组结果并行执行所述多个交易;
所述从节点还用于:在执行所述多个交易中的第一交易之后,确定所述第一交易在执行后得到的执行读写集与所述第一交易的预执行读写集是否一致,在确定不一致时不基于所述第一交易的执行读写集更新世界状态。
18.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求8-14中任一项的所述的方法。
19.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求8-14中任一项所述的方法。
CN202111296876.1A 2021-11-04 2021-11-04 在区块链中执行交易的方法、区块链、主节点和从节点 Active CN113743943B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111296876.1A CN113743943B (zh) 2021-11-04 2021-11-04 在区块链中执行交易的方法、区块链、主节点和从节点

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111296876.1A CN113743943B (zh) 2021-11-04 2021-11-04 在区块链中执行交易的方法、区块链、主节点和从节点

Publications (2)

Publication Number Publication Date
CN113743943A CN113743943A (zh) 2021-12-03
CN113743943B true CN113743943B (zh) 2022-07-08

Family

ID=78727345

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111296876.1A Active CN113743943B (zh) 2021-11-04 2021-11-04 在区块链中执行交易的方法、区块链、主节点和从节点

Country Status (1)

Country Link
CN (1) CN113743943B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114936094A (zh) * 2022-05-30 2022-08-23 蚂蚁区块链科技(上海)有限公司 在区块链中执行交易的方法、区块链的主节点和从节点
CN115129727A (zh) * 2022-05-30 2022-09-30 蚂蚁区块链科技(上海)有限公司 状态数据的提交方法、节点和区块链系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110728578A (zh) * 2019-09-29 2020-01-24 南京金宁汇科技有限公司 区块链交易的并行执行方法、系统及存储介质
CN111754349B (zh) * 2020-08-28 2020-12-04 支付宝(杭州)信息技术有限公司 对区块链中的交易进行分组的方法和装置
CN112001797B (zh) * 2020-10-28 2021-01-08 支付宝(杭州)信息技术有限公司 对区块链中的交易进行分组的方法和装置
CN112150163A (zh) * 2020-11-26 2020-12-29 北京微芯区块链与边缘计算研究院 区块链的合约交易并行执行方法及装置
CN112887437B (zh) * 2021-04-28 2021-08-03 支付宝(杭州)信息技术有限公司 区块链交易处理方法、区块链节点和区块链系统

Also Published As

Publication number Publication date
CN113743943A (zh) 2021-12-03

Similar Documents

Publication Publication Date Title
CN113743941B (zh) 一种在区块链中执行交易的方法、区块链和主节点
CN113743950B (zh) 在区块链系统中执行交易的方法、节点和区块链系统
CN113743943B (zh) 在区块链中执行交易的方法、区块链、主节点和从节点
US11481765B2 (en) Blockchain-based transaction processing method and apparatus and electronic device
CN108073656A (zh) 一种数据同步方法及相关设备
CN113743940B (zh) 在区块链中执行交易的方法、区块链、主节点和从节点
TWI730690B (zh) 在區塊鏈中同時執行交易的方法和裝置及電腦可讀儲存媒體與計算設備
CN113743942B (zh) 交易执行方法、区块链、主节点和主存储设备
CN110675255B (zh) 在区块链中并发执行交易的方法和装置
CN113744062B (zh) 在区块链中执行交易的方法、区块链节点和区块链
WO2024001024A1 (zh) 在区块链系统中执行交易的方法、区块链系统和节点
US20230275771A1 (en) Pre-execution of block chain transaction in parallel during block consensus
CN113505024B (zh) 联盟链的数据处理方法、装置、电子设备及存储介质
CN114936256A (zh) 在区块链中执行交易的方法和区块链节点
CN113421073A (zh) 在区块链中并发执行交易的方法和装置
CN114827165A (zh) 对多个交易进行分组的方法和区块链节点
CN113743949B (zh) 在区块链中执行交易的方法、区块链、主节点和从节点
CN113744063B (zh) 区块链中执行交易的方法及装置
US20100180024A1 (en) Reducing occurrences of two-phase commits in a multi-node computing system
CN113744061B (zh) 在区块链系统中执行交易的方法、区块链系统、和从节点
CN110706108B (zh) 在区块链中并发执行交易的方法和装置
CN110689344B (zh) 在区块链中并发执行交易的方法和装置
WO2023274409A1 (zh) 在区块链系统中执行交易的方法和区块链节点
CN114356768A (zh) 通过占位符减少交易读写冲突的方法与装置
CN112561695B (zh) 在区块链中并发执行交易的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant