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

交易执行方法和区块链节点

文献发布时间:2023-06-19 11:11:32


交易执行方法和区块链节点

技术领域

本说明书实施例涉及区块链技术领域,更具体地,涉及一种交易执行方法和区块链节点。

背景技术

为了在区块链加快交易执行速度,可并行执行相互没有读写依赖关系的多个交易。但在有些场景下,多个交易会更新同一数据(此时该数据被称作热点数据)。比如对于文娱链而言,某部电影的发行方账户为热点账户,交易的执行将导致从发行方账户转移预定账户资源到交易指定的账户,此时,涉及到此部电影的所有交易都会修改发行方账户的余额,即,这些交易都具有读写依赖关系,从而,现有的区块链平台(或区块链节点)无法通过多机/多处理器来并行执行这些交易以提升交易处理性能。在一种相关技术中,将热点账户拆分为多个子热点账户,不同的交易从不同的子热点账户中进行转账,从而将热点账户分散化,在一定程度提升并行能力。

发明内容

本说明书实施例旨在提供一种更有效的交易执行方案,以解决现有技术中的不足。

为实现上述目的,本说明书一个方面提供一种交易执行方法,包括:

获取待执行的多个交易,所述多个交易具有预定的执行顺序;

按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中,其中,所述第一集合中的交易为不会导致热点账户的余额不足的交易;

并行执行所述第一集合中的交易;

在执行完成所述第一集合中的全部交易之后,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额;

基于所述更新的热点账户的余额,串行执行所述第二集合中的交易。

在一种实施方式中,并行执行所述第一集合中的交易包括,在执行第一集合中的每个用于更改所述热点账户的余额的交易时,记录该交易对所述热点账户的余额的更改量,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额包括,基于所述记录的对所述热点账户余额的更改量,更新所述热点账户的余额。

在一种实施方式中,按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中包括:

对于所述多个交易中的每个交易,确定该交易是否为对热点账户的转账交易;在确定不是对热点账户的转账交易的情况中,将该交易放入所述第一集合;在确定该交易为对热点账户的转账交易的情况中,确定该交易是否不会导致热点账户的余额不足;在确定为是的情况中,将该交易放入所述第一集合,在确定为否的情况中,将该交易放入所述第二集合。

在一种实施方式中,在确定该交易为对热点账户的转账交易的情况中,确定该交易是否不会导致热点账户的余额不足包括,在确定该交易为对热点账户的转账交易的情况中,基于该交易调用的第一合约中包括的与所述热点账户相关的描述信息确定该交易对所述热点账户的最大更改量,基于所述最大更改量的确定该交易是否不会导致热点账户的余额不足。

在一种实施方式中,所述第一集合中包括用于更改所述热点账户的余额的第一交易,所述并行执行第一集合中的各个交易包括,执行所述第一交易中调用的第一合约,使得记录该第一交易对所述热点账户的余额的更改量。

在一种实施方式中,并行执行所述第一集合中的交易具体包括,基于所述第一集合中各个交易访问的除所述热点账户之外的变量,对所述第一集合中的交易分组为多个交易组,基于所述多个交易组并行执行所述第一集合中的交易。

在一种实施方式中,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额包括,基于所述第一集合中的交易对所述热点账户余额的更改量之和,更新所述热点账户的余额。

本说明书另一方面提供一种交易执行装置,包括:

获取单元,用于获取待执行的多个交易,所述多个交易具有预定的执行顺序;

分组单元,用于按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中,其中,所述第一集合中的交易为不会导致热点账户的余额不足的交易;

并行执行单元,用于并行执行所述第一集合中的交易;

更新单元,用于在执行完成所述第一集合中的全部交易之后,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额;

串行执行单元,用于基于所述更新的热点账户的余额,串行执行所述第二集合中的交易。

在一种实施方式中,所述并行执行单元具体用于,在执行第一集合中的每个用于更改所述热点账户的余额的交易时,记录该交易对所述热点账户的余额的更改量,所述更新单元具体用于,基于所述记录的对所述热点账户余额的更改量,更新所述热点账户的余额。

在一种实施方式中,所述分组单元具体用于:

对于所述多个交易中的每个交易,确定该交易是否为对热点账户的转账交易;在确定不是对热点账户的转账交易的情况中,将该交易放入所述第一集合;在确定该交易为对热点账户的转账交易的情况中,确定该交易是否不会导致热点账户的余额不足;在确定为是的情况中,将该交易放入所述第一集合,在确定为否的情况中,将该交易放入所述第二集合。

在一种实施方式中,所述分组单元具体用于,在确定该交易为对热点账户的转账交易的情况中,基于该交易调用的第一合约中包括的与所述热点账户相关的描述信息确定该交易对所述热点账户的最大更改量,基于所述最大更改量的确定该交易是否不会导致热点账户的余额不足。

在一种实施方式中,所述第一集合中包括用于更改所述热点账户的余额的第一交易,所述并行执行单元具体用于,执行所述第一交易中调用的第一合约,使得记录该第一交易对所述热点账户的余额的更改量。

在一种实施方式中,所述并行执行具体用于,基于所述第一集合中各个交易访问的除所述热点账户之外的变量,对所述第一集合中的交易分组为多个交易组,基于所述多个交易组并行执行所述第一集合中的交易。

在一种实施方式中,所述更新单元具体用于,基于所述第一集合中的交易对所述热点账户余额的更改量之和,更新所述热点账户的余额。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

通过本说明书实施例提供的交易执行方案,通过将多个交易分组到第一集合和第二集合中,使得可以在并行执行第一集合中的交易的同时保证交易执行的正确性,提高了区块链的交易处理效率。

附图说明

通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:

图1为一种区块链系统的架构图;

图2示出根据本说明书实施例的一种交易执行方法的流程图;

图3为本说明书实施例中对交易进行分组的过程示意图;

图4示出根据本说明书实施例的一种区块链节点。

具体实施方式

下面将结合附图描述本说明书实施例。

图1为一种区块链系统的架构图。在图1示出的架构图中,示例性地示出6个区块链节点,可以理解,实际上区块链中可以包括任意数目的区块链节点。在区块链中可通过共识确定一个记账节点(可以是区块链节点中的任意一个),记账节点可以确定属于将要生成的区块的多个交易以及该多个交易的执行顺序,并将该确定结果发送给区块链中的每个节点(或者全节点)。如图1所示,假设记账节点确定将要生成的区块m中包括顺序排列的交易Tx1、交易Tx2等多个交易。该区块链例如为上文所述的文娱链,交易Tx1和交易Tx2都是涉及相同文娱对象(例如电影)的交易,其都通过调用与该文娱对象对应的合约Contract1,从而用于从该文娱对象对应的热点账户HotAddr1向交易发送账户转移预定金额的资源。其中,在交易Tx1和交易Tx2的数据字段中都调用合约Contract1中的函数Update(HotAddr1,delta)以用于从热点账户HotAddr1中转出的资源。

在相关技术中,由于交易Tx1和交易Tx2涉及对相同账户的余额的修改,因此,当在执行属于区块m的多个交易时,只能在执行交易Tx1之后再串行执行交易Tx2,以防止出现错误的执行结果。也就说说,在该情况中不能并行执行交易Tx1和交易Tx2。

在本说明书实施例中,如图1中所示,在各个区块链节点中都预先部署有合约Contact1,合约Contract1中例如包括函数DeclareHotData(HotAddr1,max_delta)和函数Update(HotAddr1,delta)。函数DeclareHotData(HotAddr1,max_delta)中例如包括描述性信息,以用于确定交易可能从账户HotAddr1转出的最大金额max_delta,区块链节点在接收到待执行的交易Tx1之后,可预先执行函数DeclareHotData(HotAddr1,max_delta),确定交易Tx1可能从账户HotAddr1转出的最大金额max_delta1,并基于账户HotAddr1的当前余额和max_delta1确定交易Tx1是否可能导致账户HotAddr1余额不足,从而基于该确定结果将交易Tx1分组到第一集合或第二集合中,其中,在第一集合中包括不会导致热点账户余额不足的交易,在第二集合中包括所述多个交易中的剩余交易。区块链节点可通过与上述相同的方法将交易Tx2分组到第一集合或第二集合中。在对一批交易都进行上述处理之后,区块链节点可并行执行第一集合中的多个交易,从而提高了区块链的交易处理效率。

可以理解,图1所示内容仅仅是示例性的,而不用于限制本说明书实施例的范围,例如,区块链节点将要执行的交易不限于具有交易Tx1和交易Tx2的形式,在区块链中可部署有与多个热点账户分别相关的多个合约,或者,所述合约Contract1可与多个热点账户相关,等等。下文将详细描述本说明书实施例提供的交易执行方案。

图2示出根据本说明书实施例的一种交易执行方法的流程图,该方法由区块链中的任一节点执行,包括:

步骤S202,获取待执行的多个交易,所述多个交易具有预定的执行顺序;

步骤S204,按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中,其中,所述第一集合中的交易为不会导致热点账户的余额不足的交易;

步骤S206,并行执行所述第一集合中的交易;

步骤S208,在执行完成所述第一集合中的全部交易之后,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额;

步骤S210,基于所述更新的热点账户的余额,串行执行所述第二集合中的交易。

首先,在步骤S202,获取待执行的多个交易,所述多个交易具有预定的执行顺序。

在一种实施方式中,区块链中的记账节点在确定属于区块m的多个交易及该多个交易的执行顺序之后,可将该多个交易及该多个交易的执行顺序发送给区块链中的各个节点,从而区块链中的各个节点可基于该多个交易的执行顺序开始执行属于区块m的多个交易。在另一种实施方式中,区块链中的记账节点在确定属于区块m的多个交易及该多个交易的执行顺序之后,将该多个交易的标识及该多个交易的执行顺序发送给区块链中的各个节点,各个节点基于该多个交易的标识从本地的交易池中获取所述多个交易,并可以开始基于所述多个交易的执行顺序执行该多个交易。

步骤S204,按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中,其中,所述第一集合中的交易为不会导致热点账户的余额不足的交易。

图3为本说明书实施例中对交易进行分组的过程示意图。可以理解,图3所示过程只是本说明书实施例中执行步骤S204的一种示例方式,步骤S204也可以通过其他方式实施,而不限于如图3所示的过程。

如图3所示,在步骤S2041,对于多个交易中的每个交易,获取该交易的访问的账户。

这里可以是获取交易进行转账涉及的转出金额的账户和转入金额的账户。进一步地,可仅获取交易的转出金额的账户。所述多个交易中可包括由热点账户发送的向其他账户转账的交易,对于该种类型的交易,区块链节点在获取该交易之后可从该交易的发送字段获取该交易中将转出金额的账户。所述多个交易中可包括通过调用合约(例如上述合约Contract1)使得从热点账户向交易发送账户转移金额的交易。在一种实施方式中,例如,交易中调用合约Contract1中的函数Update,则区块链节点可通过读取合约Contract1的函数Update的入参(如HotAddr1)或代码,来确定转出金额的账户。

但是在一些业务中,从交易调用的合约的函数中可能不能直接确定交易中的将转出金额的账户。在本说明书实施例中,在Contract1的代码中增加该合约的描述信息,即图1中的函数DeclareHotData(HotAddr1,max_delta),该函数DeclareHotData显式地声明函数Update中将转出金额的热点账户(例如HotAddr1),从而区块链节点在确定交易中调用了Contract1中的函数Update之后,可从状态数据库中读取Contract1的代码,并可从Contract1的代码中包括的函数DeclareHotDatad的代码获取交易中转出金额的账户HotAddr1。

在步骤S2042,确定上述确定的账户中是否包含热点账户。

在一种实施方式中,区块链节点可基于接收的交易统计各个账户的访问频次,从而确定热点账户,并在热点账户列表中记录该热点账户。区块链节点从而可基于本地记录的热点账户列表来确定上述确定的账户中是否包含热点账户。在另一种实施方式中,所述多个交易通过调用合约来进行从热点账户的转账,所述合约例如包括上述合约Contract1,区块链节点从而可基于交易调用的合约中的合约描述信息来确定上述确定的账户中是否包含热点账户。如果交易中转出金额的账户不是热点账户,从而该交易的执行肯定不会导致热点账户的余额不足,因此可以执行步骤S2043,将该交易放入第一集合。

如果交易中转出金额的账户是热点账户,则执行步骤S2044,确定热点账户是否可能余额不足,即,确定热点账户是否不会余额不足。

在一种实施方式中,在执行交易之前仅基于交易调用的合约的代码无法确定从热点账户转出的金额是多少,针对该问题,在本说明书实施例中,在函数DeclareHotData中显式地说明调用合约Contract1的交易对热点账户的最大转出额。该最大转出额是交易可能转出的最大金额,并且该最大转出额大于等于交易执行时实际从热点账户的转出金额。合约开发者可根据具体的业务逻辑确定交易对热点账户的最大转出额,并将该最大转出额显式地包含在函数DeclareHotData的代码中。例如,业务人员可首先将业务逻辑设置为,当调用合约Contract1的交易数在0-1000时,将从账户HotAddr1转出的金额设置为2,当调用合约Contract1的交易数在1000-2000时,将从账户HotAddr1转出的金额设置为3,从而合约开发者可在函数DeclareHotData中设定,当调用合约Contract1的交易数在0-1000时,交易的最大转出额(即最大的可能转出额)为2,当调用合约Contract1的交易数在1000-2000时,交易的最大转出额为3。

例如对于上述交易Tx1,假设交易Tx1是区块m中的第一个执行的交易,区块链节点在对交易Tx1进行分组时,在基于交易Tx1获取合约Contract1的代码之后,执行函数DeclareHotData,基于合约Contract1的状态存储中记录的调用合约Contract1的交易数,确定交易Tx1例如为调用合约Contract1的第0-1000个交易中的交易,从而可确定交易Tx1的max_delta=2,区块链节点还可以从状态数据库中获取账户HotAddr1的当前余额,从而可基于max_delta=2和账户HotAddr1的当前余额确定热点账户是否可能余额不足。具体是,如果账户HotAddr1的当前余额减去2大于等于零,则可确定交易Tx1不会导致账户HotAddr1的余额不足。如果账户HotAddr1的当前余额减去2小于零,则可确定交易Tx1可能会导致账户HotAddr1的余额不足。

假设区块链节点在通过图3所示过程处理交易Tx1之后处理交易Tx2,假设区块链节点同样地确定交易Tx2例如为调用合约Contract1的第0-1000个交易中的交易,从而可确定交易Tx2的max_delta=2。区块链节点从而可基于账户HotAddr1的当前余额、交易Tx1的max_delta以及交易Tx2的max_delta确定交易Tx2是否可能导致账户HotAddr1的余额不足。具体是,如果账户HotAddr1的当前余额减去4(即2+2)大于等于零,则可确定交易Tx2不会导致账户HotAddr1的余额不足。如果账户HotAddr1的当前余额减去4小于零,则可确定交易Tx2可能会导致账户HotAddr1的余额不足。

可以理解,在可基于交易调用的合约的代码确定交易将从热点账户转出的金额是多少的情况中,可直接根据该确定的转出金额确定热点账户是否会余额不足。

在步骤S2045,如果确定交易不会导致热点账户的余额不足,则将该交易放入第一集合。在步骤S2046,如果确定交易可能导致热点账户的余额步骤,即不能确定交易不会导致热点账户余额步骤,则将该交易放入第二集合。

在步骤S206,并行执行所述第一集合中的交易。

在一种情况中,假设第一集合中的每个交易都是从热点账户向交易发送账户转出金额的交易,并且假设第一集合中各个交易的交易发送账户相互不同,也就是说,第一集合中的交易除了热点账户之外相互之间没有读写冲突,由于第一集合中的每个交易都不会导致热点账户的余额不足,因此,即使并行执行第一集合中的全部交易,也不会出现交易执行失败的情况中,因此,可并行执行第一集合中的全部交易。在执行第一集合中的每个交易时,区块链节点可以以例如日志(log)的方式记录该交易对热点账户余额的更改量,以用于后续更新热点账户的余额。

在另一种情况中,第一集合中包括从第一热点账户向交易发送账户转出金额的多个交易和从第二热点账户向交易发送账户转出金额的多个交易。并且假设第一集合中的交易除了第一热点账户和第二热点账户之外没有其他的读写冲突,由于访问第一热点账户的交易与访问第二热点账户的交易之间没有读写冲突,因此,第一集合中的多个交易也可以并行执行,并且不存在执行失败的可能性。

在又一种情况中,第一集合中包括的多个交易除了热点账户之外,可能相对于其他访问变量存在读写冲突,在该情况中,可基于各个交易访问的除了热点账户之外的变量(即不包括热点账户的读写集)对该对个交易分为多个交易组,并行执行各个交易组。由于在用于分组的读写集中未包括热点账户,因此,不会将访问热点账户的交易分组到一个交易组中,而是将访问热点账户的多个交易分散到各个交易组中,从而实现对访问热点账户的多个交易的并行执行。

在执行第一集合中的各个交易时,区块链节点会通过例如log的形式记录对各个账户的更改量,其中例如包括各个交易的对热点账户的余额的转出额(即减少量)。

在步骤S208,在执行完成所述第一集合中的全部交易之后,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额。

区块链节点在执行完成所述第一集合中的全部交易之后,对于相对于各个交易记录的对非热点账户的更改量,可直接使用该更改量更新该非热点账户的余额。

对于相对于各个交易记录的对热点账户的更改量,区块链节点可将第一集合中的全部对热点账户的更改量相加,并使用该相加获得的更改量之和一次性的更新热点账户的余额,从而提高效率。可以理解,区块链节点也可以使用各个对热点账户的更改量,依次更新热点账户的余额。

如果第一集合中包括访问第一热点账户的交易和访问第二热点账户的交易,则区块链节点可分别计算第一集合中的交易对第一热点账户的余额更改量之和及对第二热点账户的余额更改量之和,从而分别更新第一热点账户的余额和第二热点账户的余额。

在步骤S210,基于所述更新的热点账户的余额,串行执行所述第二集合中的交易。

在如上所述更新热点账户的余额之后,可以将该余额作为开始执行第二集合中的交易的状态信息,来串行执行第二集合中的交易。由于第二集合中的交易有可能使得热点账户的余额不足,通过按照预先确定的交易的执行顺序串行执行第二集合中的各个交易,当执行第二集合中的某个交易时热点账户的余额不足时,可确定该交易及排在该交易后面的各个交易都执行失败,从而可保证交易执行的正确性。

图4示出根据本说明书实施例的一种区块链节点,包括:

获取单元41,用于获取待执行的多个交易,所述多个交易具有预定的执行顺序;

分组单元42,用于按照所述多个交易的执行顺序依次将所述多个交易中的每个交易分组到第一集合或第二集合中,其中,所述第一集合中的交易为不会导致热点账户的余额不足的交易;

并行执行单元43,用于并行执行所述第一集合中的交易;

更新单元44,用于在执行完成所述第一集合中的全部交易之后,基于所述第一集合中的交易对所述热点账户余额的更改量,更新所述热点账户的余额;

串行执行单元45,用于基于所述更新的热点账户的余额,串行执行所述第二集合中的交易。

在一种实施方式中,所述并行执行单元43具体用于,在执行第一集合中的每个用于更改所述热点账户的余额的交易时,记录该交易对所述热点账户的余额的更改量,所述更新单元44具体用于,基于所述记录的对所述热点账户余额的更改量,更新所述热点账户的余额。

在一种实施方式中,所述分组单元42具体用于:

对于所述多个交易中的每个交易,确定该交易是否为对热点账户的转账交易;在确定不是对热点账户的转账交易的情况中,将该交易放入所述第一集合;在确定该交易为对热点账户的转账交易的情况中,确定该交易是否不会导致热点账户的余额不足;在确定为是的情况中,将该交易放入所述第一集合,在确定为否的情况中,将该交易放入所述第二集合。

在一种实施方式中,所述分组单元42具体用于,在确定该交易为对热点账户的转账交易的情况中,基于该交易调用的第一合约中包括的与所述热点账户相关的描述信息确定该交易对所述热点账户的最大更改量,基于所述最大更改量的确定该交易是否不会导致热点账户的余额不足。

在一种实施方式中,所述第一集合中包括用于更改所述热点账户的余额的第一交易,所述并行执行单元43具体用于,执行所述第一交易中调用的第一合约,使得记录该第一交易对所述热点账户的余额的更改量。

在一种实施方式中,所述并行执行单元43具体用于,基于所述第一集合中各个交易访问的除所述热点账户之外的变量,对所述第一集合中的交易分组为多个交易组,基于所述多个交易组并行执行所述第一集合中的交易。

在一种实施方式中,所述更新单元44具体用于,基于所述第一集合中的交易对所述热点账户余额的更改量之和,更新所述热点账户的余额。

本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。

本说明书另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。

通过本说明书实施例提供的交易执行方案,通过将多个交易分组到第一集合和第二集合中,使得可以在并行执行第一集合中的交易的同时保证交易执行的正确性,提高了区块链的交易处理效率。

需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。

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

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

本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

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

相关技术
  • 区块链交易执行方法、区块链节点及控制装置
  • 区块链交易执行方法、区块链节点及控制装置
技术分类

06120112835657