区块链交易处理方法、区块链节点和区块链

摘要:

本说明书实施例提供了一种区块链交易处理方法、区块链节点和区块链,所述区块链节点包括主控装置和多个计算装置,所述方法包括:主控装置将接收的交易发送给所述多个计算装置中的一个计算装置;计算装置在每次从主控装置接收到交易之后,生成交易的访问变量记录;主控装置从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置;所述计算装置在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置;所述主控装置基于各个交易组的变量表,确定交易执行方案,并指示各个计算装置执行交易。

申请号: CN202110465388.2 专利名称: 区块链交易处理方法、区块链节点和区块链 申请(专利权)人: [支付宝(杭州)信息技术有限公司, 蚂蚁区块链科技(上海)有限公司] 发明人: [刘晓建] 其他信息:
1.一种区块链交易处理方法,所述方法由区块链节点执行,所述区块链节点包括主控装置和多个计算装置,所述方法包括: 主控装置在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置; 所述计算装置在每次从主控装置接收到交易之后,生成交易的访问变量记录; 主控装置从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置; 所述计算装置在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量; 所述主控装置在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。 2.根据权利要求1所述的方法,其中,基于各个交易组的变量表,确定交易执行方案包括,基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。 3.根据权利要求2所述的方法,还包括,所述主控装置在确定不同的计算装置包括访问相同变量的多个交易组的情况中,所述主控装置指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。 4.根据权利要求3所述的方法,所述多个计算装置中包括第一计算装置和第二计算装置,所述方法还包括,所述第一计算装置从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。 5.根据权利要求4所述的方法,还包括,所述第二计算装置在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。 6.根据权利要求5所述的方法,其中,将所述第一交易组排列在本地的多个交易组之后执行包括,将所述第一交易组排列在本地的与所述第一交易组冲突的交易组之后执行。 7.根据权利要求4所述的方法,还包括,所述第二计算装置在从所述第一计算装置接收到第一交易组及该第一交易组中各个交易的访问变量记录之后,基于所述第一交易组中各个交易的访问变量记录,进行对所述第一交易组中的交易的变量值预取。 8.根据权利要求1-7任一项所述的方法,其中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,主控装置基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置。 9.根据权利要求8所述的方法,其中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。 10.根据权利要求8所述的方法,其中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。 11.根据权利要求1-7任一项所述的方法,还包括,所述计算装置在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。 12.根据权利要求1或2所述的方法,还包括,所述主控装置在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。 13.一种区块链节点,包括主控装置和多个计算装置, 所述主控装置用于在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置; 所述计算装置用于在每次从主控装置接收到交易之后,生成交易的访问变量记录; 所述主控装置还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置; 所述计算装置还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给所述主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量; 所述主控装置还用于在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。 14.根据权利要求13所述的区块链节点,其中,所述主控装置用于基于各个交易组的变量表,确定交易执行方案包括,所述主控装置用于基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。 15.根据权利要求14所述的区块链节点,所述主控装置还用于,在确定不同的计算装置包括访问相同变量的多个交易组的情况中,指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。 16.根据权利要求15所述的区块链节点,所述多个计算装置中包括第一计算装置和第二计算装置,所述第一计算装置用于,从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置还用于将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。 17.根据权利要求16所述的区块链节点,所述第二计算装置还用于,在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。 18.根据权利要求13-17任一项所述的区块链节点,其中,所述主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,所述主控装置用于基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置。 19.根据权利要求18所述的区块链节点,其中,所述主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置用于根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。 20.根据权利要求18所述的区块链节点,其中,所述主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置用于根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。 21.根据权利要求13-17任一项所述的区块链节点,所述计算装置还用于在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。 22.根据权利要求13或14所述的区块链节点,所述主控装置还用于,在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。 23.一种区块链系统,包括主节点和从节点,所述主节点和所述从节点中都包括主控装置和多个计算装置, 所述主节点的主控装置用于在每次接收交易之后将接收的交易发送给所述主节点的多个计算装置中的一个计算装置; 所述主节点的计算装置用于在每次从主控装置接收到交易之后,生成交易的访问变量记录; 所述主节点的主控装置还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识分别发送给所述主节点的多个计算装置; 所述主节点的计算装置还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给所述主节点的主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量; 所述主节点的主控装置还用于在从主节点的各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示主节点的各个计算装置执行交易,基于所述交易执行方案生成共识提议,并向从节点的主控装置发送所述共识提议; 所述从节点的主控装置用于在接收到所述共识提议之后,根据所述共识提议指示从节点的各个计算装置执行交易。 24.根据权利要求23所述的区块链系统,所述共识提议中包括对多个交易的分组信息,其中,所述从节点的主控装置用于根据所述共识提议指示从节点的各个计算装置执行交易包括,所述从节点的主控装置用于根据所述多个交易的分组信息指示从节点的各个计算装置执行各个交易组中的交易。 25.根据权利要求24所述的区块链系统,所述从节点的计算装置还用于,在从所述从节点的主控装置接收到执行交易的指示之后,生成接收的各个交易组的变量表,将各个交易组的变量表发送给从节点的主控装置;所述从节点的主控装置还用于,在接收到各个交易组的变量表之后,对所述共识提议进行验证。 26.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-12中任一项的所述的方法。 27.一种计算装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-12中任一项所述的方法。

区块链交易处理方法、区块链节点和区块链系统

技术领域

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

背景技术

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

在一种区块链实例中,包括主节点和从节点,主节点用于提出共识提议,该共识提议中包括将成块的区块中包括的多个交易、以及该多个交易的执行顺序,并将共识提议发送给各个从节点。从节点在从主节点接收到共识提议之后,按照共识提议中确定的交易执行顺序执行共识提议中包括的多个交易,从而使得主节点和从节点存储一致的数据。

其中,主节点和从节点都可以具体实现为包括主控装置、多个计算装置、多个存储装置等多个装置,所述装置可以是物理计算机,也可以为物理计算机中的用于执行特定功能的虚拟装置。在主节点中,通常由主控装置在确定共识提议的多个交易之后,对该多个交易进行分组,并将获得的多个交易组下发给各个计算装置,其中,所述多个交易组相互之间没有共同的访问变量,从而使得各个计算装置可并行执行各个交易组中的交易。从节点的主控装置在从主节点接收到共识提议的多个交易及该多个交易的执行顺序之后,也由主控装置对该多个交易进行分组,并将分组获得的多个交易组下发给各个计算装置。

发明内容

本说明书实施例旨在提供一种更有效的区块链交易处理方案、区块链节点和区块链。本说明书实施例提供的方案使得充分使用区块链节点中的多个计算装置的算力并行进行对交易的处理,缩短了交易处理耗时,提高了区块链的效率。

为实现上述目的,本说明书第一方面提供一种区块链交易处理方法,所述方法由区块链节点执行,所述区块链节点包括主控装置和多个计算装置,所述方法包括:

主控装置在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置;

所述计算装置在每次从主控装置接收到交易之后,生成交易的访问变量记录;

主控装置从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置;

所述计算装置在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主控装置在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。

在一种实施方式中,基于各个交易组的变量表,确定交易执行方案包括,基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。

在一种实施方式中,所述方法还包括,所述主控装置在确定不同的计算装置包括访问相同变量的多个交易组的情况中,所述主控装置指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。

在一种实施方式中,所述多个计算装置中包括第一计算装置和第二计算装置,所述方法还包括,所述第一计算装置从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。

在一种实施方式中,所述方法还包括,所述第二计算装置在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。

在一种实施方式中,将所述第一交易组排列在本地的多个交易组之后执行包括,将所述第一交易组排列在本地的与所述第一交易组冲突的交易组之后执行。

在一种实施方式中,所述方法还包括,所述第二计算装置在从所述第一计算装置接收到第一交易组及该第一交易组中各个交易的访问变量记录之后,基于所述第一交易组中各个交易的访问变量记录,进行对所述第一交易组中的交易的变量值预取。

在一种实施方式中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,主控装置基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置。

在一种实施方式中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。

在一种实施方式中,主控装置将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。

在一种实施方式中,所述方法还包括,所述计算装置在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。

在一种实施方式中,所述方法还包括,所述主控装置在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。

本说明书第二方面提供一种区块链节点,包括主控装置和多个计算装置,

主控装置用于在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置;

所述计算装置用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主控装置还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置;

所述计算装置还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主控装置还用于在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。

在一种实施方式中,所述主控装置用于基于各个交易组的变量表,确定交易执行方案包括,所述主控装置用于基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。

在一种实施方式中,所述主控装置还用于,在确定不同的计算装置包括访问相同变量的多个交易组的情况中,指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。

在一种实施方式中,所述多个计算装置中包括第一计算装置和第二计算装置,所述第一计算装置用于,从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置还用于将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。

在一种实施方式中,所述第二计算装置还用于,在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。

在一种实施方式中,主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,主控装置用于基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置。

在一种实施方式中,主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置用于根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。

在一种实施方式中,主控装置用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置用于根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。

在一种实施方式中,所述计算装置还用于在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。

在一种实施方式中,所述主控装置还用于,在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。

本说明书第三方面提供一种区块链,包括主节点和从节点,所述主节点和所述从节点中都包括主控装置和多个计算装置,

所述主节点的主控装置用于在每次接收交易之后将接收的交易发送给所述主节点的多个计算装置中的一个计算装置;

所述主节点的计算装置用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主节点的主控装置还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识分别发送给所述主节点的多个计算装置;

所述主节点的计算装置还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给所述主节点的主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主节点的主控装置还用于在从主节点的各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示主节点的各个计算装置执行交易,基于所述交易执行方案生成共识提议,并向从节点的主控装置发送所述共识提议;

所述从节点的主控装置用于在接收到所述共识提议之后,根据所述共识提议指示从节点的各个计算装置执行交易。

在一种实施方式中,所述共识提议中包括对多个交易的分组信息,其中,所述从节点的主控装置用于根据所述共识提议指示从节点的各个计算装置执行交易包括,所述从节点的主控装置用于根据所述多个交易的分组信息指示从节点的各个计算装置执行各个交易组中的交易。

在一种实施方式中,所述从节点的计算装置还用于,在从所述从节点的主控装置接收到执行交易的指示之后,生成接收的各个交易组的变量表,将各个交易组的变量表发送给从节点的主控装置;所述从节点的主控装置还用于,在接收到各个交易组的变量表之后,对所述共识提议进行验证。

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

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

附图说明

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

图1示出一种区块链的架构图;

图2示出根据本说明书实施例的交易处理方法的流程图;

图3示出计算装置生成的各个交易组的变量表的示意图;

图4示出主节点中进行交易迁移的方法流程图;

图5为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图;

图6为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图;

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

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

具体实施方式

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

图1示出一种区块链的架构图。如图1中所示,该区块链中包括主节点和多个从节点,其中,主节点用于确定共识提议的多个交易,并确定多个交易的执行顺序,将共识提议发送给各个从节点,并基于所述执行顺序执行该多个交易。从节点用于从主节点接收共识提议,并根据共识提议执行多个交易。主节点和各个从节点中都包括主控装置(图1中以字母M示意示出)和计算装置(图1中以字母C1-C3示意示出)。各个节点中还可以包括存储装置(图1中未示出),用于存储区块链的区块数据、状态数据等数据。所述主控装置、计算装置和存储装置可以分别为单独的实体计算设备,也可以为计算设备中的一个用于实现特定功能的虚拟装置。

在一种技术方案中,主节点的主控装置M从客户端接收由区块链用户发送的交易。当主节点的交易池中累计了预定数目的交易之后,主节点的主控装置M基于交易池中的交易确定共识提议的多个交易及该多个交易的执行顺序,并将该共识提议发送给各个从节点的主控装置M。同时,主节点为了通过多个计算装置C对并行执行该多个交易,主节点的主控装置M获得每个交易的读写集,该读写集中包括该交易读写的变量标识,基于各个交易的读写集对该多个交易进行分组,以获得多个交易组。该多个交易组彼此之间不访问相同的变量,从而使得各个交易组可并行执行而不会影响交易执行结果。之后,主节点的主控装置M将分组获得的各个交易组分别发送给各个计算装置,从而各个计算装置可并行执行对应的交易组中的交易。各个计算装置在开始执行对应的交易组中的交易之后,在第一次访问某个变量时,可从主节点的存储装置中读取交易访问的变量的值,从而执行交易,并在内存中维护该变量的值,在执行完成对应的交易组中的交易之后,各个计算装置可将内存中存储的更新的变量值存储到存储装置中,以更新变量的世界状态。同时,各个从节点的主控装置在接收到共识协议之后,仍需要与主节点的主控装置一样地进行对多个交易的分组,并将各个交易组发送给各个计算装置以执行交易。

在该技术方案中,仅由主控装置进行对多个交易的分组,由于单机计算能力有限,需要的时间较长。在主控装置计算交易分组时,各个计算装置无法进行前期的数据准备工作,而只有在从主控装置接收到交易分组之后才能根据交易的分组进行数据的预取等准备工作,影响了交易的执行速度。另一方面,从节点也需要重复对共识提议中的多个交易进行交易分组,浪费了区块链的算力。

本说明书实施例提供一种处理交易的方案,在该方案中,主节点的主控装置在接收到交易之后,立即将交易分发给计算装置,计算装置在接收到交易之后即可确定交易的读写集,并可从存储装置预取交易中访问的变量的值。主控装置在确定共识提议的多个交易之后,将该多个交易的标识发送给各个计算装置,从而各个计算装置可对本地获取的共识提议中的交易进行分组,并将各个交易组访问的变量表发送给主控装置。主控装置基于各个计算装置发送的各个交易组的变量表确定各个计算装置的交易组是否存在冲突,并根据该确定结果指示各个计算装置进行对共识提议中的交易的执行。同时,主节点的主控装置将交易分组信息包括在共识提议中发送给各个从节点的主控装置,从而,从节点的主控装置在接收到共识提议之后,可立即将各个分组分发给各个计算装置,而不需要进行对多个交易的分组。

本说明书实施例的该方案中,主节点的主控装置在接收到交易之后,可立即将该交易分发给计算装置,从而计算装置可在共识提议前提前做好交易的数据准备工作,节省了交易处理时间;主节点在确定共识提议包括的多个交易之后,各个计算装置可并行进行对本地接收的共识提议中的交易的分组,并由主节点基于各个计算装置的分组结果确定最终的交易执行方案,主节点不需要单独进行对多个交易的分组,加快了交易处理时间;另外,从节点在接收到共识提议之后,不再需要另外进行对多个交易的分组,加快了从节点的交易处理时间。

下文将详细描述本说明书实施例提供的交易处理方案。

图2示出根据本说明书实施例的交易处理方法的流程图。该方法由主节点的主控装置和计算装置及从节点的主控装置和计算装置共同执行,可以理解,图中仅示出一个从节点作为示意,在主节点和从节点中只示出一个计算装置作为示意,在实际区块链中,可包括多个从节点,主节点和从节点中可包括多个计算装置,其都执行与图中所示相同的过程。例如,图2中的主节点的主控装置为图1中的主节点中的主控装置M,图2中的主节点中的计算装置可以为图1中的主节点中的计算装置C1-C3中的任一计算装置,图2中的从节点可以为图1中的任一从节点,从节点中的计算装置可以为该从节点中的计算装置C1-C3中的任一个计算装置。

如图2所示,首先,在步骤S201,主节点的主控装置向主节点的计算装置发送交易。

主节点的主控装置在从用户客户端接收交易之后,按照交易的接收顺序对该交易编号,然后将该交易分发给计算装置进行处理。可根据预定的分发规则进行分发以使得满足以下至少一项:(1)尽量使得将修改相同变量的交易分到同一个计算装置,以避免不同计算装置分到的交易存在变量访问冲突;(2)使得各个计算装置负载相对均衡。

在一种实施方式中,区块链中的交易为转账交易,该交易访问的变量包括交易的发送账户的余额和接收账户的余额。在该情况中,主控装置在本地维护有账户与计算装置的对应关系表。主控装置在向计算装置转发交易之前,首先获取交易的发送账户和接收账户,在所述对应关系表中查询所述发送账户和/或所述接收账户对应的计算装置。

如果在所述对应关系表中没有记录所述发送账户和/或所述接收账户,说明主控装置还未接收过包括所述发送账户和/或接收账户的交易,因此,主控装置可将该交易分配给交易负载量较小的一个计算装置,并在所述对应关系表中记录该发送账户和接收账户与该分配的计算装置的对应关系。具体是,可在主控装置维护各个计算装置的负载表,该负载表记录各个计算装置当前收到的交易数量。主控装置可基于该负载表将负载较低的计算装置设置为默认计算装置,并在交易中的账户在对应关系表中未记录的情况中,将该交易分配给该默认计算装置,并修改该默认计算装置的交易负载。当默认计算装置的交易负载达到阈值的情况中,可将负载较低的另一个计算装置设置为默认计算装置。通过这样的设置,有可能将连续的多个交易分配给同一个计算装置,从而有助于在发送该多个交易时进行数据压缩。

当所述对应关系表中包括所述交易的发送账户和接收账户、且所述发送账户和接收账户对应相同的计算装置的情况中,可将交易分配给该两个账户对应的计算装置。当所述对应关系表中包括所述交易的发送账户和接收账户中的一个账户的情况中,可将交易分配给该账户对应的计算装置。

当所述对应关系表中包括所述交易的发送账户和接收账户、但是所述发送账户和接收账户对应不同的计算装置的情况中,可预设发送账户优先或接收账户优先的策略,从而将该交易分配给优先的账户对应的计算装置。

在一种实施方式中,主控装置通过多线程向计算装置转发交易,为了防止多线程同时访问对应关系表的情况,可将该对应关系表拆分为多个子表,每个子表包括所述对应关系表中的部分对应关系,从而加快多线程的读取速度。

在另一种实施方式中,从节点可能在收到主节点的共识提议之前也接收到待执行的交易,但是从节点接收交易的顺序可能与主节点接收交易的顺序不同,从而,从节点的主控装置如果按照上面的实施方式进行交易到计算装置的派发,可能导致与主节点不同的派发结果,使得从节点在接收到共识提议时,需要调整执行交易的计算装置。为了避免这种情况,当交易包括的账户在对应关系表中未记录的情况中,主节点和从节点可一致地根据预定映射函数将该交易派发给一个计算装置,并在对应关系表中记录该交易包括的账户与计算装置的对应关系。该预定映射关系例如为用于将交易包括的账户映射到计算装置的哈希函数,或者为用于将交易的交易体映射到计算装置的哈希函数等等。在该情况中,不再需要在主控装置中维护各个计算装置的负载情况,并且也可实现计算装置的负载均衡。

在步骤S202,主节点的计算装置生成接收的交易的访问变量记录。

计算装置在接收到交易之后,读取该交易的交易体,从而分析该交易的读写变量,并生成交易的访问变量记录。例如,计算装置可在如表1所示的交易信息检索表中记录该交易的读写集,该读写集中包括交易读取和/或写的变量的标识(或名称),从而用于记录该交易访问的变量。

表1

如表1所示,表1中记录了交易1、交易2、交易5的读写集,而交易3和交易4的读写集为空集,表示尚未接收到交易3和交易4。

在一种实施方式中,所述交易为从账户A向账户B的转账交易,则该交易的读集中包括账户A和账户B,并且该交易的写集中包括账户A和账户B。

在另一种实施方式中,主控装置不限于在接收到交易之后记录交易的读写集,而是可以仅记录交易中读和/或写的变量名称即可。例如对于上述转账交易,主控装置可仅记录账户A和账户B作为交易访问的变量名称。

主控装置在记录该交易访问的变量名称之后,还可以从存储装置或者内存中预取该交易访问的变量的值,从而为后续的交易执行做好数据准备工作。

在步骤S203,主节点的主控装置向主节点的计算装置发送共识提议的多个交易的标识。

主节点的主控装置每接收到一个交易之后,可将该交易放入交易池中,并以预定时间间隔(或者在交易池中的数目达到预定数目之后)从交易池包括的交易中确定共识提议的多个交易以用于构成一个区块。主控装置在确定共识提议中包括的多个交易之后,可将该多个交易的标识(例如交易编号或交易号)发送给主节点的计算装置。可以理解,所述交易的标识不限于为交易编号,例如,所述交易的标识也可以为交易的哈希值。

在步骤S204,主节点的计算装置在接收到共识提议的多个交易的标识之后,对本地接收的共识提议中的交易进行分组,并生成各个交易组的变量表。

主节点的计算装置在接收到共识提议的多个交易的标识之后,可从本地接收的交易中确定被包括在所述共识提议中的交易,并可根据这些交易的访问变量记录对这些交易进行分组。该分组使得将访问相同变量的多个交易分到一个交易组中,并且按照预定规则确定被分到一个交易组中的多个交易的执行顺序,该分组获得的多个交易组彼此之间没有共同访问的变量。通过这样对交易进行分组,当计算装置执行该多个交易组中的交易,对各个交易组可并行处理,而不会影响各个交易最终的执行结果,同时,由于一个交易组中的交易存在访问变量冲突,因此,对于同一个交易组中的多个交易需要串行执行。

计算装置在如上所述将本地的共识提议中的交易分成多个交易组之后,还生成各个交易组的变量表。该变量表中包括各个交易组中的交易访问的变量。

图3示出计算装置生成的各个交易组的变量表的示意图,该计算装置例如为图1中的主节点中的计算装置C1。如图3所示,图中的G0、G1和G2为交易组的组号,该变量表中记录了各个交易组的变量位图,该变量位图的每位对应于一个变量,例如图3中的三个变量位图的左起各个位与变量a、变量b、变量c…等变量一一对应,并且该变量位图中的位的值为1时表示对应的交易组中包括访问对应的变量的交易,为0时表示该交易组中不包括访问该对应的变量的交易。例如,如图3中所示,交易组G0中包括访问变量a和b的交易,交易组G1中包括访问变量c的交易。通过以变量位图的形式记录交易组中的交易访问的变量,可便于进行两个交易组的访问变量的比对,以确定该两个交易组是否存在共同访问的变量。可以理解,本说明书实施例不限于通过变量位图的形式记录各个交易组访问的变量,例如,可直接记录各个交易组访问的变量的名称。

在步骤S205,主节点的计算装置在生成各个交易组的变量表之后,将各个交易组的变量表发送给主节点的主控装置。

参考图1,主节点中包括的计算装置C1-C3分别对本地的共识提议中的交易进行分组,并将各个交易组的变量表发送给主节点中的主控装置M。例如,主节点的计算装置C1将分组获取的交易组G0-G2各自的变量表发送给主节点的主控装置M,主节点的计算装置C2将分组获得的交易组G3-G5各自的变量表发送给主节点的主控装置M,主节点的计算装置C3将分组获取的交易组G6-G8各自的变量表发送给主节点的主控装置M。

在步骤S206,主节点的主控装置基于各个交易组的变量表确定交易执行方案。

具体是,主节点的主控装置首先基于各个交易组的变量表确定不同的计算装置中是否包括访问相同变量的多个交易组。主控装置可基于各个交易组的变量位图来确定不同的交易组是否访问了相同的变量。

在主控装置确定不同的计算装置不包括访问相同变量的多个交易组的情况下,主控装置可确定由各个计算装置分别执行本地的各个交易组的交易。并可基于该交易执行方案确定共识提议,该共识提议中至少包括所述多个交易、对所述多个交易的分组信息。

在主控装置确定不同的计算装置中包括访问相同变量的多个交易组的情况下,主控装置可确定由一个计算装置来串行执行所述多个交易组,并基于该确定的交易执行方案来确定共识提议中的交易分组信息。

在步骤S207,主节点的主控装置向从节点的主控装置发送共识提议。

在一种情况中,上述主节点的主控装置确定各个计算装置的交易分组不存在冲突的交易组,则主节点的主控装置可将计算装置C1-C3获取的交易组G0-G8作为对共识提议的多个交易的最终交易分组结果放入到共识提议中,并将共识提议发送给各个从节点的主控装置。各个从节点的主控装置在接收到该共识提议之后,可并行处理该多个交易组。如果各个从节点在接收共识提议之前不会接收到各个交易,则该共识提议中还需要包括各个交易的交易体,如果各个从节点可在接收共识提议之前接收到各个交易,则该共识提议中只需要包括所述多个交易的分组信息,其中,每个交易组中可包括交易的哈希值作为交易的标识。

在另一种情况中,假设图1中的主节点中的计算装置C2生成的交易组G4的变量位图中与变量c对应的位为1,即表示交易组G4中包括对变量c的访问,因此,交易组G4与交易组G1都访问了变量c,其为冲突的交易组。由于交易组G4与交易组G1存在冲突,如果其由两个计算装置并行执行,将不能保证各个节点对交易组G4和交易组G1的一致的执行顺序,即,在一个节点中,可能先执行了交易组G4,在另一个节点中,可能先执行了交易组G1,从而可能会导致各个节点对共识提议的多个交易的执行结果不一致,因此需要进行对交易组的迁移,以使得交易组G4与交易组G1由一个计算装置以预定先后顺序执行,从而保证执行结果的一致性。例如,主节点的主控装置可确定由计算装置C2将交易组G4迁移至计算装置C1,以由计算装置C1在执行交易组G1之后再执行交易组G4。通过由计算装置C1在执行完交易组G1之后再执行交易组G4,计算装置C1不需要先等待交易组G4的迁移,并且计算装置C1在执行交易组G1的同时,如果已经接收到迁移的交易组G4,还可以对交易组G4中的交易进行变量值预取等操作。类似地,例如,主控装置在判断交易组G1与交易组G6存在冲突的情况下,可确定由计算装置C3将交易组G6迁移至计算装置C1,以由计算装置C1在执行交易组G1之后再执行交易组G6。在该情况下,在共识提议中的交易分组信息将至少包括:交易组G0-G3、G5、G7、G8中的各个交易组可并行处理,交易组G1与交易组G4需要串行处理,并且在处理完交易组G1之后再执行交易组G4,交易组G1与交易组G6需要串行处理,如果交易组G4与交易组G6没有冲突,则交易组G4与交易组G6可并行处理,如果交易组G4与交易组G6也存在冲突,则需要交易组G1、交易组G4和交易组G6都串行处理。

在一种实施情况中,各个节点都包括相同数目的计算装置(或虚拟计算装置),则在共识提议中可如表2所示包括交易组到计算装置的分配。

表2

表2所示的共识提议表示,由计算装置C1处理交易组G0/G1-G4-G6/G2,其中,交易组G0/G1/G2可并行处理,交易组G4需要在交易组G1处理完之后再进行处理,交易组G6需要在交易组G4处理完之后进行处理(假设交易组G6与交易组G4存在冲突),由计算装置C2处理交易组G3和G5,这两个交易组可并行处理,由计算装置C3处理交易组G7和G8,这两个交易组可并行处理。

在步骤S208,主节点的主控装置在向从节点发送共识提议的同时,还向主节点的计算装置发送交易执行信息。

如上文所述,在一种情况中,主节点的主控装置确定各个计算装置的交易分组不存在冲突的交易组,则主节点的主控装置可向主节点的各个计算装置发送交易执行信息,以指示各个计算装置执行本地的多个交易组中的交易,其中,每个计算装置中的多个交易组都可以并行执行。

在另一种情况中,如上文所述,主节点的主控装置判断交易组G4、交易组G6与交易组G1为冲突的交易组,并且确定由主节点的计算装置C2将交易组G4迁移至计算装置C1,确定由计算装置C3将交易组G6迁移至计算装置C1。图4示出主节点中进行交易迁移的方法流程图。如图4所示,在该情况下,在步骤S2082,主节点的主控装置可向主节点的计算装置C2发送交易执行信息,该交易执行信息包括交易组G4到计算装置C1的迁移信息。类似地,在步骤S2083,主节点的主控装置可向主节点的计算装置C3发送交易执行信息,该交易执行信息包括交易组G6到计算装置C1的迁移信息。同时,在步骤S2081,主节点的主控装置可向主节点的计算装置C1发送交易执行信息,该交易执行信息指示计算装置C1接收交易组G4和G6,并串行处理交易组G1、G4和G6。

在步骤S2091,计算装置C1在接收到主控装置的交易执行信息之后,立即开始执行本地的各个交易组(即交易组G0,G1和G2)中的交易。在步骤S2092,计算装置C2根据主控装置的交易执行信息,将交易组G4中各个交易的交易体和访问变量记录(例如读写集)发送给计算装置C1。之后,在步骤S2094,计算装置C2可并行处理本地剩下的交易组G5和G6,其中,在处理交易组G5或G6时,以预定顺序串行执行交易组G5或G6中的每个交易。在执行交易组G5和G6中的交易的过程中,计算装置C2在首次读取变量时,可从存储装置中的状态数据库中读取的变量的状态值,之后在内存中维护该变量的状态值,在首次写变量时,可在内存中维护该变量的状态值。在对交易组G5和G6中的交易执行结束之后,计算装置C2可将内存中维护的变量的状态值更新到存储装置中的状态数据库中。其中,该存储装置可以与计算装置位于同一个物理设备中、或者不同的物理设备中。

在步骤S2093和步骤S2096,计算装置C3与计算装置C2执行类似的处理,在此不再赘述。

在步骤S2095,计算装置C1在从计算装置C2和C3接收到交易组G4和交易组G6的相关数据之后,可根据交易组G4和G6中各个交易的变量访问记录,进行对各个交易的变量值预取。计算装置C1可根据本地的各个交易组的变量表,确定交易组G4和G6中的交易访问的变量是否与本地的各个交易组中的访问变量相同,如果相同,则不进行对该变量的预取,如果不同则进行对该变量的预取。或者,主控装置可在确定冲突的交易组时就记录冲突的交易组共同访问的变量(例如变量c),并将该变量名称放在交易执行信息中发送给对应的计算装置(例如计算装置C1),从而计算装置C1可根据交易执行信息中记录的冲突变量的名称,确定对迁移进来的交易组G4和G6中的哪些变量进行预取。在步骤S2097,计算装置C1根据从主控装置接收的交易执行信息,在确定已经处理完交易组G1之后,即可开始执行交易组G4中的交易,由于计算装置C2在开始执行交易组G4中的交易之前已经对交易组G4中的交易进行了变量值预取,因此,节省了对交易组G4中的交易的执行时间。在步骤S2098,计算装置C1在确定交易组G4中的交易执行完成之后执行交易组G6中的交易。类似地,计算装置C1可在执行完成本地的交易组中的交易及迁移到本地的交易组中的交易之后,将内存中维护的变量值更新到存储装置的状态数据库中。

可以理解,上述计算装置处理交易的过程仅仅是示意性的,而不用于限制本说明书实施例的范围。例如,计算装置C1在从主控装置接收到交易执行信息之后,其不限于在确定执行完交易组G1中的交易之后立即进行对交易组G4的交易的执行,例如,计算装置C1可在执行完本地的各个交易组(即G0、G1、G2)之后,再进行对交易组G4中的交易的执行。另外,计算装置C1也有可能向其他计算装置迁移交易组,计算装置C2和C3也有可能从其他计算装置接收迁移入的交易组。

图5为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图。如图5所示,图中左侧的虚线为主节点的主控装置确定好共识提议中的多个交易的时刻,图5中的上部为本说明书实施例交易处理方案的主节点中交易处理过程的耗时示意图,图5中的下部为另一种交易处理方案的主节点中交易处理过程的耗时示意图,其中,每个框的水平长度表示相应的操作的耗时时长,斜线框表示该操作的执行主体为主控装置,白色框表示该操作的执行主体为计算装置,重叠的多个白色框表示由多个计算装置并行执行该操作。

参考图5中的上部,在本说明书实施例的交易处理方案中,主控装置在确定共识的多个交易之后,将该多个交易的交易号发送给各个计算装置。各个计算装置因为在主控装置确定共识的多个交易之前已经从共识装置接收到交易并生成了交易的读写集,因此,各个计算装置在接收到共识的交易号之后,可立即根据共识的交易号确定本地的共识的交易,并对这些交易进行交易分组。这里,假设由三个计算装置并行进行该交易分组操作,每个计算装置基本上只对共识的多个交易中的1/3的交易进行分组。计算装置在完成交易分组之后,生成每个交易组的变量表,并将该变量表发送给主控装置。主控装置在接收到交易组变量表之后,可基于该交易组变量表生成各个计算装置的交易执行方案,并将其分别发送给各个计算装置。各个计算装置在接收到交易执行方案之后,首先基于交易执行方案进行交易迁移,这里由三个计算装置并行进行各自的交易组中的交易向其他计算装置的迁移。之后,各个计算装置进行对各个交易组的交易的执行,由于计算装置在从主控装置接收到交易之后立即生成交易的读写集并进行交易的变量值预取,因此可缩短交易执行时间。

参考图5中的下部,在另一种交易处理方案中,主节点的主控装置在确定共识的多个交易之后,需要在本地完成对交易的分组,因此,主控装置生成各个交易的读写集,并基于各个交易的读写集对多个交易进行分组。这里,由于主控装置单机进行对多个交易的分组,相比于由三个计算装置并行对1/3的交易进行分组将耗费近似三倍的时间。主控装置在对所述多个交易进行分组之后,将各个交易组的交易分别发送给对应的计算装置,由于交易的交易体的数据量较大,并且由主控装置单机进行向各个计算装置发送,该发送时间相比于上部中的由三个计算装置并行交易迁移的时间更长。另外,在该技术方案中,各个计算装置在接收到各个交易组交易之后,在执行交易的过程中,还需要首先进行对交易的变量值读取工作,相比于上部的执行交易的时间更长。

从图5的耗时比较图可以显而易见地得出,本说明书实施例的主节点中的交易处理的各个环节都比图5中下部的技术方案中对应环节节省运行耗时,本说明书实施例的方案的总耗时比另一技术方案的总耗时短得多,大大节省了区块链中的交易处理时间,提高了区块链的交易处理效率。

再回到图2,在步骤S210,从节点的主控装置在从主节点的主控装置接收到共识提议之后,将交易组信息发送给从节点的各个计算装置。

如上文所述,如果从节点的主控装置在接收到共识提议之前未接收到共识提议中的各个交易,则该共识提议中包括共识的各个交易的交易体和多个交易的分组信息,从而从节点的主控装置发送给各个计算装置的交易组信息中包括各个交易组中的交易的交易体。从节点的主控装置可以将需要串行执行的交易组(例如上述交易组G1-G4-G6)发送给一个计算装置,并指示该计算装置以预定顺序串行执行交易组G1-G4-G6,从节点的主控装置可基于负载均衡的考虑将其他相互之间没有冲突的交易组分配给各个计算装置。

如果从节点的主控装置在接收到共识提议之前接收到共识提议中的各个交易,为了后续执行交易的便利性,从节点的主控装置需要与主节点的主控装置一致地将接收的交易发送给从节点的各个计算装置(例如基于交易的哈希值分配交易)。为此,从节点中需要包括与主节点中相同数目的计算装置,例如如图1中所示,从节点中也包括计算装置C1-C3。如果从节点中的计算装置与主节点中的计算装置数目不同,例如,从节点中包括两个计算装置,可在从节点的主控装置设置三个虚拟计算装置,并设定虚拟计算装置与两个计算装置的映射关系,从而从节点的主控装置可以对三个虚拟计算装置进行交易的分配。

在上述第二种情况中,从节点的主控装置在接收到交易之后,立即将交易发送给对应的计算装置,从节点的各个计算装置在接收到交易之后也立即生成交易的访问变量记录(图2中未示出)。从节点的主控装置在从主节点的主控装置接收到共识提议之后,向各个计算装置发送交易组信息,该交易组信息中仅需要包括各个计算装置的交易组中的交易的标识(例如哈希值)和交易组迁移信息。例如,对于从节点的计算装置C2,所述共识提议中包括交易组G3和G5中的交易的标识,并包括交易组G4中的交易的标识及交易组G4至从节点的计算装置C1的迁移信息。

在步骤S211,从节点的计算装置生成待执行的各个交易组的变量表。

对于步骤S210中的第一种情况,即,从节点在接收到共识提议之前未接收到交易,从节点的计算装置在从节点的主控装置接收到交易组信息之后,可基于各个交易组中的交易,生成各个交易的读写集,基于各个交易的读写集生成各个交易组的变量表(例如上文的变量位图)。在生成各个交易的读写集之后,从节点的计算装置还可以进行对各个交易的变量值预取操作,以加速后续的执行过程。

对于步骤S210中的第二种情况,即,从节点在接收到共识提议之前已经接收到各个交易,从节点的计算装置(例如计算装置C2)在接收到上述交易组信息之后,将交易组C4的交易和读写集发送给计算装置C2,基于预先生成的各个交易的读写集生成交易组C5和交易组C6的变量表。计算装置C3的操作可参考计算装置C2的操作,在此不再赘述。计算装置C1在接收到交易组信息之后,首先生成交易组G0、G1和G2的变量表,在从计算装置C2和C3分别接收到交易组G4和G6的相关数据之后,生成交易组G4和G6的变量表。

在步骤S212,从节点的计算装置将交易组的变量表发送给从节点的主控装置。

从节点的各个计算装置在生成待执行的各个交易组的变量表之后,将这些变量表都发送给从节点的主控装置。

在步骤S213,从节点的主控装置基于各个交易组的变量表确认各个交易组是否存在冲突。

如果确认各个交易组的变量表没有冲突,则可验证主节点的共识提议正确。如果确认各个交易组的变量表中存在冲突,则可验证主节点的共识提议中存在错误,在该情况下,从节点的主控装置将根据所述冲突发送交易组迁移指示、交易回滚指示、交易执行指示等,以获得正确的执行结果。例如,假设从所述主节点的主控装置发送的所述交易组信息中未包括交易组G4的从计算装置C2至计算装置C1的迁移信息,从节点的主控装置在根据交易组G1和G4的变量表确定其二者存在冲突之后,从节点的主控装置指示计算装置C2将交易组G4迁移至计算装置C1,并指示计算装置C2回滚执行交易组G4对变量值的更改,同时,从节点的主控装置指示计算装置C1回滚执行交易组G6对变量值的更改,并在执行交易组G4中的交易之后,再重新执行交易组G6中的交易。

可以理解,上述步骤S211-S213用于对主节点的共识提议进行验证,在确认主节点的主控装置是可信装置的情况中,可不对主节点的共识提议进行验证,因此上述步骤S211-S213不是必需的,而是可选的。

在步骤S214,从节点的各个计算装置执行交易组中的交易。

从节点的各个计算装置在从从节点的主控装置接收到交易组信息之后,可立即基于该交易组信息执行各个交易组中的交易。在该执行过程中,由于计算装置已经预先对交易进行了变量值预取,因此可缩短交易执行时间。

图6为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图。如图6所示,图中左侧的虚线为从节点的主控装置从主节点的主控装置接收到共识提议的时刻,图6中的上部为本说明书实施例交易处理方案的从节点中交易处理过程的耗时示意图,图6中的下部为另一种交易处理方案的从节点中交易处理过程的耗时示意图,其中,与图5类似地,每个框的水平长度表示相应的操作的耗时时长,斜线框表示该操作的执行主体为主控装置,白色框表示该操作的执行主体为计算装置,重叠的多个白色框表示由多个计算装置并行执行该操作。

参考图6中的上部,由于在本说明书实施例的方案中,从节点的主控装置接收的共识提议中包括对共识提议中多个交易的分组信息,因此,从节点的主控装置可直接将各个交易组交易发送给对应的从节点的计算装置,而不需要再进行对所述多个交易进行分组。从节点的各个计算装置在接收到各个交易组的交易之后,即可进行对各个交易组的交易的执行,具体包括确定交易读写集、进行对交易变量的变量值预取,以及执行交易。从节点的计算装置在确定交易的读写集之后,可基于交易的读写集生成各个交易组的变量表,并发送给从节点的主控装置。从节点的主控装置在接收到各个交易组的变量表之后,在各个计算装置执行交易的同时可确认各个交易组是否有冲突,以对主节点的共识提议进行验证,进一步增加了交易执行的正确性,而不会延长交易处理耗时。

参考图6中的下部,在另一种交易处理方案中,从节点的主控装置接收的共识提议中仅包括共识提议的多个交易,而不包括对该多个交易的分组信息,因此,从节点的主控装置需要对该多个交易进行分组,如上文所述,该过程包括首先确定各个交易的读写集,和基于各个交易的读写集进行对该多个交易的分组,与上文参考图5所述类似地,由于由主控装置单机进行该分组过程,该交易分组过程的耗时较长。从节点的主控装置在确定好对多个交易的交易分组之后,将各个交易组交易发送给各个计算装置。各个计算装置在接收到交易组之后,执行各个交易组中的交易,由于没有预先的对交易的数据准备工作,在该执行过程中,还包括对交易的变量值的读取,因此,该执行交易的时长较长。

从图6的耗时比较图可以显而易见地得出,本说明书实施例的从节点中的交易处理的总耗时比另一技术方案的从节点的总耗时短得多,大大节省了区块链中的交易处理时间,提高了区块链的交易处理效率。

图7示出根据本说明书实施例的一种区块链节点,包括主控装置71和多个计算装置72,

所述主控装置71用于在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置;

所述计算装置72用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主控装置71还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置;

所述计算装置72还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主控装置71还用于在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。

在一种实施方式中,所述主控装置71用于基于各个交易组的变量表,确定交易执行方案包括,所述主控装置71用于基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。

在一种实施方式中,所述主控装置71还用于,在确定不同的计算装置包括访问相同变量的多个交易组的情况中,指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。

在一种实施方式中,所述多个计算装置72中包括第一计算装置和第二计算装置,所述第一计算装置用于,从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置还用于将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。

在一种实施方式中,所述第二计算装置还用于,在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,主控装置71用于基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置72。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置71用于根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置71用于根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。

在一种实施方式中,所述计算装置72还用于在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。

在一种实施方式中,所述主控装置71还用于,在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。

图8示出根据本说明书实施例的一种区块链,包括主节点81和从节点82,所述主节点81中包括主控装置811和多个计算装置812,所述主从节点82中包括主控装置821和多个计算装置822,

所述主节点81的主控装置811用于在每次接收交易之后将接收的交易发送给所述主节点的多个计算装置中的一个计算装置;

所述主节点81的计算装置812用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主节点81的主控装置811还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识分别发送给所述主节点的多个计算装置;

所述主节点81的计算装置812还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给所述主节点81的主控装置811,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主节点81的主控装置811还用于在从主节点81的各个计算装置812接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示主节点81的各个计算装置812执行交易,基于所述交易执行方案生成共识提议,并向从节点82的主控装置821发送所述共识提议;

所述从节点82的主控装置821用于在接收到所述共识提议之后,根据所述共识提议指示从节点82的各个计算装置822执行交易。

在一种实施方式中,所述共识提议中包括对多个交易的分组信息,其中,所述从节点82的主控装置821用于根据所述共识提议指示从节点82的各个计算装置822执行交易包括,所述从节点82的主控装置821用于根据所述多个交易的分组信息指示从节点82的各个计算装置822执行各个交易组中的交易。

在一种实施方式中,所述从节点82的计算装置822还用于,在从所述从节点82的主控装置821接收到执行交易的指示之后,生成接收的各个交易组的变量表,将各个交易组的变量表发送给从节点82的主控装置821;所述从节点82的主控装置821还用于,在接收到各个交易组的变量表之后,对所述共识提议进行验证。

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

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

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

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

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

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

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

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

图1示出一种区块链的架构图。如图1中所示,该区块链中包括主节点和多个从节点,其中,主节点用于确定共识提议的多个交易,并确定多个交易的执行顺序,将共识提议发送给各个从节点,并基于所述执行顺序执行该多个交易。从节点用于从主节点接收共识提议,并根据共识提议执行多个交易。主节点和各个从节点中都包括主控装置(图1中以字母M示意示出)和计算装置(图1中以字母C1-C3示意示出)。各个节点中还可以包括存储装置(图1中未示出),用于存储区块链的区块数据、状态数据等数据。所述主控装置、计算装置和存储装置可以分别为单独的实体计算设备,也可以为计算设备中的一个用于实现特定功能的虚拟装置。

在一种技术方案中,主节点的主控装置M从客户端接收由区块链用户发送的交易。当主节点的交易池中累计了预定数目的交易之后,主节点的主控装置M基于交易池中的交易确定共识提议的多个交易及该多个交易的执行顺序,并将该共识提议发送给各个从节点的主控装置M。同时,主节点为了通过多个计算装置C对并行执行该多个交易,主节点的主控装置M获得每个交易的读写集,该读写集中包括该交易读写的变量标识,基于各个交易的读写集对该多个交易进行分组,以获得多个交易组。该多个交易组彼此之间不访问相同的变量,从而使得各个交易组可并行执行而不会影响交易执行结果。之后,主节点的主控装置M将分组获得的各个交易组分别发送给各个计算装置,从而各个计算装置可并行执行对应的交易组中的交易。各个计算装置在开始执行对应的交易组中的交易之后,在第一次访问某个变量时,可从主节点的存储装置中读取交易访问的变量的值,从而执行交易,并在内存中维护该变量的值,在执行完成对应的交易组中的交易之后,各个计算装置可将内存中存储的更新的变量值存储到存储装置中,以更新变量的世界状态。同时,各个从节点的主控装置在接收到共识协议之后,仍需要与主节点的主控装置一样地进行对多个交易的分组,并将各个交易组发送给各个计算装置以执行交易。

在该技术方案中,仅由主控装置进行对多个交易的分组,由于单机计算能力有限,需要的时间较长。在主控装置计算交易分组时,各个计算装置无法进行前期的数据准备工作,而只有在从主控装置接收到交易分组之后才能根据交易的分组进行数据的预取等准备工作,影响了交易的执行速度。另一方面,从节点也需要重复对共识提议中的多个交易进行交易分组,浪费了区块链的算力。

本说明书实施例提供一种处理交易的方案,在该方案中,主节点的主控装置在接收到交易之后,立即将交易分发给计算装置,计算装置在接收到交易之后即可确定交易的读写集,并可从存储装置预取交易中访问的变量的值。主控装置在确定共识提议的多个交易之后,将该多个交易的标识发送给各个计算装置,从而各个计算装置可对本地获取的共识提议中的交易进行分组,并将各个交易组访问的变量表发送给主控装置。主控装置基于各个计算装置发送的各个交易组的变量表确定各个计算装置的交易组是否存在冲突,并根据该确定结果指示各个计算装置进行对共识提议中的交易的执行。同时,主节点的主控装置将交易分组信息包括在共识提议中发送给各个从节点的主控装置,从而,从节点的主控装置在接收到共识提议之后,可立即将各个分组分发给各个计算装置,而不需要进行对多个交易的分组。

本说明书实施例的该方案中,主节点的主控装置在接收到交易之后,可立即将该交易分发给计算装置,从而计算装置可在共识提议前提前做好交易的数据准备工作,节省了交易处理时间;主节点在确定共识提议包括的多个交易之后,各个计算装置可并行进行对本地接收的共识提议中的交易的分组,并由主节点基于各个计算装置的分组结果确定最终的交易执行方案,主节点不需要单独进行对多个交易的分组,加快了交易处理时间;另外,从节点在接收到共识提议之后,不再需要另外进行对多个交易的分组,加快了从节点的交易处理时间。

下文将详细描述本说明书实施例提供的交易处理方案。

图2示出根据本说明书实施例的交易处理方法的流程图。该方法由主节点的主控装置和计算装置及从节点的主控装置和计算装置共同执行,可以理解,图中仅示出一个从节点作为示意,在主节点和从节点中只示出一个计算装置作为示意,在实际区块链中,可包括多个从节点,主节点和从节点中可包括多个计算装置,其都执行与图中所示相同的过程。例如,图2中的主节点的主控装置为图1中的主节点中的主控装置M,图2中的主节点中的计算装置可以为图1中的主节点中的计算装置C1-C3中的任一计算装置,图2中的从节点可以为图1中的任一从节点,从节点中的计算装置可以为该从节点中的计算装置C1-C3中的任一个计算装置。

如图2所示,首先,在步骤S201,主节点的主控装置向主节点的计算装置发送交易。

主节点的主控装置在从用户客户端接收交易之后,按照交易的接收顺序对该交易编号,然后将该交易分发给计算装置进行处理。可根据预定的分发规则进行分发以使得满足以下至少一项:(1)尽量使得将修改相同变量的交易分到同一个计算装置,以避免不同计算装置分到的交易存在变量访问冲突;(2)使得各个计算装置负载相对均衡。

在一种实施方式中,区块链中的交易为转账交易,该交易访问的变量包括交易的发送账户的余额和接收账户的余额。在该情况中,主控装置在本地维护有账户与计算装置的对应关系表。主控装置在向计算装置转发交易之前,首先获取交易的发送账户和接收账户,在所述对应关系表中查询所述发送账户和/或所述接收账户对应的计算装置。

如果在所述对应关系表中没有记录所述发送账户和/或所述接收账户,说明主控装置还未接收过包括所述发送账户和/或接收账户的交易,因此,主控装置可将该交易分配给交易负载量较小的一个计算装置,并在所述对应关系表中记录该发送账户和接收账户与该分配的计算装置的对应关系。具体是,可在主控装置维护各个计算装置的负载表,该负载表记录各个计算装置当前收到的交易数量。主控装置可基于该负载表将负载较低的计算装置设置为默认计算装置,并在交易中的账户在对应关系表中未记录的情况中,将该交易分配给该默认计算装置,并修改该默认计算装置的交易负载。当默认计算装置的交易负载达到阈值的情况中,可将负载较低的另一个计算装置设置为默认计算装置。通过这样的设置,有可能将连续的多个交易分配给同一个计算装置,从而有助于在发送该多个交易时进行数据压缩。

当所述对应关系表中包括所述交易的发送账户和接收账户、且所述发送账户和接收账户对应相同的计算装置的情况中,可将交易分配给该两个账户对应的计算装置。当所述对应关系表中包括所述交易的发送账户和接收账户中的一个账户的情况中,可将交易分配给该账户对应的计算装置。

当所述对应关系表中包括所述交易的发送账户和接收账户、但是所述发送账户和接收账户对应不同的计算装置的情况中,可预设发送账户优先或接收账户优先的策略,从而将该交易分配给优先的账户对应的计算装置。

在一种实施方式中,主控装置通过多线程向计算装置转发交易,为了防止多线程同时访问对应关系表的情况,可将该对应关系表拆分为多个子表,每个子表包括所述对应关系表中的部分对应关系,从而加快多线程的读取速度。

在另一种实施方式中,从节点可能在收到主节点的共识提议之前也接收到待执行的交易,但是从节点接收交易的顺序可能与主节点接收交易的顺序不同,从而,从节点的主控装置如果按照上面的实施方式进行交易到计算装置的派发,可能导致与主节点不同的派发结果,使得从节点在接收到共识提议时,需要调整执行交易的计算装置。为了避免这种情况,当交易包括的账户在对应关系表中未记录的情况中,主节点和从节点可一致地根据预定映射函数将该交易派发给一个计算装置,并在对应关系表中记录该交易包括的账户与计算装置的对应关系。该预定映射关系例如为用于将交易包括的账户映射到计算装置的哈希函数,或者为用于将交易的交易体映射到计算装置的哈希函数等等。在该情况中,不再需要在主控装置中维护各个计算装置的负载情况,并且也可实现计算装置的负载均衡。

在步骤S202,主节点的计算装置生成接收的交易的访问变量记录。

计算装置在接收到交易之后,读取该交易的交易体,从而分析该交易的读写变量,并生成交易的访问变量记录。例如,计算装置可在如表1所示的交易信息检索表中记录该交易的读写集,该读写集中包括交易读取和/或写的变量的标识(或名称),从而用于记录该交易访问的变量。

表1

如表1所示,表1中记录了交易1、交易2、交易5的读写集,而交易3和交易4的读写集为空集,表示尚未接收到交易3和交易4。

在一种实施方式中,所述交易为从账户A向账户B的转账交易,则该交易的读集中包括账户A和账户B,并且该交易的写集中包括账户A和账户B。

在另一种实施方式中,主控装置不限于在接收到交易之后记录交易的读写集,而是可以仅记录交易中读和/或写的变量名称即可。例如对于上述转账交易,主控装置可仅记录账户A和账户B作为交易访问的变量名称。

主控装置在记录该交易访问的变量名称之后,还可以从存储装置或者内存中预取该交易访问的变量的值,从而为后续的交易执行做好数据准备工作。

在步骤S203,主节点的主控装置向主节点的计算装置发送共识提议的多个交易的标识。

主节点的主控装置每接收到一个交易之后,可将该交易放入交易池中,并以预定时间间隔(或者在交易池中的数目达到预定数目之后)从交易池包括的交易中确定共识提议的多个交易以用于构成一个区块。主控装置在确定共识提议中包括的多个交易之后,可将该多个交易的标识(例如交易编号或交易号)发送给主节点的计算装置。可以理解,所述交易的标识不限于为交易编号,例如,所述交易的标识也可以为交易的哈希值。

在步骤S204,主节点的计算装置在接收到共识提议的多个交易的标识之后,对本地接收的共识提议中的交易进行分组,并生成各个交易组的变量表。

主节点的计算装置在接收到共识提议的多个交易的标识之后,可从本地接收的交易中确定被包括在所述共识提议中的交易,并可根据这些交易的访问变量记录对这些交易进行分组。该分组使得将访问相同变量的多个交易分到一个交易组中,并且按照预定规则确定被分到一个交易组中的多个交易的执行顺序,该分组获得的多个交易组彼此之间没有共同访问的变量。通过这样对交易进行分组,当计算装置执行该多个交易组中的交易,对各个交易组可并行处理,而不会影响各个交易最终的执行结果,同时,由于一个交易组中的交易存在访问变量冲突,因此,对于同一个交易组中的多个交易需要串行执行。

计算装置在如上所述将本地的共识提议中的交易分成多个交易组之后,还生成各个交易组的变量表。该变量表中包括各个交易组中的交易访问的变量。

图3示出计算装置生成的各个交易组的变量表的示意图,该计算装置例如为图1中的主节点中的计算装置C1。如图3所示,图中的G0、G1和G2为交易组的组号,该变量表中记录了各个交易组的变量位图,该变量位图的每位对应于一个变量,例如图3中的三个变量位图的左起各个位与变量a、变量b、变量c…等变量一一对应,并且该变量位图中的位的值为1时表示对应的交易组中包括访问对应的变量的交易,为0时表示该交易组中不包括访问该对应的变量的交易。例如,如图3中所示,交易组G0中包括访问变量a和b的交易,交易组G1中包括访问变量c的交易。通过以变量位图的形式记录交易组中的交易访问的变量,可便于进行两个交易组的访问变量的比对,以确定该两个交易组是否存在共同访问的变量。可以理解,本说明书实施例不限于通过变量位图的形式记录各个交易组访问的变量,例如,可直接记录各个交易组访问的变量的名称。

在步骤S205,主节点的计算装置在生成各个交易组的变量表之后,将各个交易组的变量表发送给主节点的主控装置。

参考图1,主节点中包括的计算装置C1-C3分别对本地的共识提议中的交易进行分组,并将各个交易组的变量表发送给主节点中的主控装置M。例如,主节点的计算装置C1将分组获取的交易组G0-G2各自的变量表发送给主节点的主控装置M,主节点的计算装置C2将分组获得的交易组G3-G5各自的变量表发送给主节点的主控装置M,主节点的计算装置C3将分组获取的交易组G6-G8各自的变量表发送给主节点的主控装置M。

在步骤S206,主节点的主控装置基于各个交易组的变量表确定交易执行方案。

具体是,主节点的主控装置首先基于各个交易组的变量表确定不同的计算装置中是否包括访问相同变量的多个交易组。主控装置可基于各个交易组的变量位图来确定不同的交易组是否访问了相同的变量。

在主控装置确定不同的计算装置不包括访问相同变量的多个交易组的情况下,主控装置可确定由各个计算装置分别执行本地的各个交易组的交易。并可基于该交易执行方案确定共识提议,该共识提议中至少包括所述多个交易、对所述多个交易的分组信息。

在主控装置确定不同的计算装置中包括访问相同变量的多个交易组的情况下,主控装置可确定由一个计算装置来串行执行所述多个交易组,并基于该确定的交易执行方案来确定共识提议中的交易分组信息。

在步骤S207,主节点的主控装置向从节点的主控装置发送共识提议。

在一种情况中,上述主节点的主控装置确定各个计算装置的交易分组不存在冲突的交易组,则主节点的主控装置可将计算装置C1-C3获取的交易组G0-G8作为对共识提议的多个交易的最终交易分组结果放入到共识提议中,并将共识提议发送给各个从节点的主控装置。各个从节点的主控装置在接收到该共识提议之后,可并行处理该多个交易组。如果各个从节点在接收共识提议之前不会接收到各个交易,则该共识提议中还需要包括各个交易的交易体,如果各个从节点可在接收共识提议之前接收到各个交易,则该共识提议中只需要包括所述多个交易的分组信息,其中,每个交易组中可包括交易的哈希值作为交易的标识。

在另一种情况中,假设图1中的主节点中的计算装置C2生成的交易组G4的变量位图中与变量c对应的位为1,即表示交易组G4中包括对变量c的访问,因此,交易组G4与交易组G1都访问了变量c,其为冲突的交易组。由于交易组G4与交易组G1存在冲突,如果其由两个计算装置并行执行,将不能保证各个节点对交易组G4和交易组G1的一致的执行顺序,即,在一个节点中,可能先执行了交易组G4,在另一个节点中,可能先执行了交易组G1,从而可能会导致各个节点对共识提议的多个交易的执行结果不一致,因此需要进行对交易组的迁移,以使得交易组G4与交易组G1由一个计算装置以预定先后顺序执行,从而保证执行结果的一致性。例如,主节点的主控装置可确定由计算装置C2将交易组G4迁移至计算装置C1,以由计算装置C1在执行交易组G1之后再执行交易组G4。通过由计算装置C1在执行完交易组G1之后再执行交易组G4,计算装置C1不需要先等待交易组G4的迁移,并且计算装置C1在执行交易组G1的同时,如果已经接收到迁移的交易组G4,还可以对交易组G4中的交易进行变量值预取等操作。类似地,例如,主控装置在判断交易组G1与交易组G6存在冲突的情况下,可确定由计算装置C3将交易组G6迁移至计算装置C1,以由计算装置C1在执行交易组G1之后再执行交易组G6。在该情况下,在共识提议中的交易分组信息将至少包括:交易组G0-G3、G5、G7、G8中的各个交易组可并行处理,交易组G1与交易组G4需要串行处理,并且在处理完交易组G1之后再执行交易组G4,交易组G1与交易组G6需要串行处理,如果交易组G4与交易组G6没有冲突,则交易组G4与交易组G6可并行处理,如果交易组G4与交易组G6也存在冲突,则需要交易组G1、交易组G4和交易组G6都串行处理。

在一种实施情况中,各个节点都包括相同数目的计算装置(或虚拟计算装置),则在共识提议中可如表2所示包括交易组到计算装置的分配。

表2

表2所示的共识提议表示,由计算装置C1处理交易组G0/G1-G4-G6/G2,其中,交易组G0/G1/G2可并行处理,交易组G4需要在交易组G1处理完之后再进行处理,交易组G6需要在交易组G4处理完之后进行处理(假设交易组G6与交易组G4存在冲突),由计算装置C2处理交易组G3和G5,这两个交易组可并行处理,由计算装置C3处理交易组G7和G8,这两个交易组可并行处理。

在步骤S208,主节点的主控装置在向从节点发送共识提议的同时,还向主节点的计算装置发送交易执行信息。

如上文所述,在一种情况中,主节点的主控装置确定各个计算装置的交易分组不存在冲突的交易组,则主节点的主控装置可向主节点的各个计算装置发送交易执行信息,以指示各个计算装置执行本地的多个交易组中的交易,其中,每个计算装置中的多个交易组都可以并行执行。

在另一种情况中,如上文所述,主节点的主控装置判断交易组G4、交易组G6与交易组G1为冲突的交易组,并且确定由主节点的计算装置C2将交易组G4迁移至计算装置C1,确定由计算装置C3将交易组G6迁移至计算装置C1。图4示出主节点中进行交易迁移的方法流程图。如图4所示,在该情况下,在步骤S2082,主节点的主控装置可向主节点的计算装置C2发送交易执行信息,该交易执行信息包括交易组G4到计算装置C1的迁移信息。类似地,在步骤S2083,主节点的主控装置可向主节点的计算装置C3发送交易执行信息,该交易执行信息包括交易组G6到计算装置C1的迁移信息。同时,在步骤S2081,主节点的主控装置可向主节点的计算装置C1发送交易执行信息,该交易执行信息指示计算装置C1接收交易组G4和G6,并串行处理交易组G1、G4和G6。

在步骤S2091,计算装置C1在接收到主控装置的交易执行信息之后,立即开始执行本地的各个交易组(即交易组G0,G1和G2)中的交易。在步骤S2092,计算装置C2根据主控装置的交易执行信息,将交易组G4中各个交易的交易体和访问变量记录(例如读写集)发送给计算装置C1。之后,在步骤S2094,计算装置C2可并行处理本地剩下的交易组G5和G6,其中,在处理交易组G5或G6时,以预定顺序串行执行交易组G5或G6中的每个交易。在执行交易组G5和G6中的交易的过程中,计算装置C2在首次读取变量时,可从存储装置中的状态数据库中读取的变量的状态值,之后在内存中维护该变量的状态值,在首次写变量时,可在内存中维护该变量的状态值。在对交易组G5和G6中的交易执行结束之后,计算装置C2可将内存中维护的变量的状态值更新到存储装置中的状态数据库中。其中,该存储装置可以与计算装置位于同一个物理设备中、或者不同的物理设备中。

在步骤S2093和步骤S2096,计算装置C3与计算装置C2执行类似的处理,在此不再赘述。

在步骤S2095,计算装置C1在从计算装置C2和C3接收到交易组G4和交易组G6的相关数据之后,可根据交易组G4和G6中各个交易的变量访问记录,进行对各个交易的变量值预取。计算装置C1可根据本地的各个交易组的变量表,确定交易组G4和G6中的交易访问的变量是否与本地的各个交易组中的访问变量相同,如果相同,则不进行对该变量的预取,如果不同则进行对该变量的预取。或者,主控装置可在确定冲突的交易组时就记录冲突的交易组共同访问的变量(例如变量c),并将该变量名称放在交易执行信息中发送给对应的计算装置(例如计算装置C1),从而计算装置C1可根据交易执行信息中记录的冲突变量的名称,确定对迁移进来的交易组G4和G6中的哪些变量进行预取。在步骤S2097,计算装置C1根据从主控装置接收的交易执行信息,在确定已经处理完交易组G1之后,即可开始执行交易组G4中的交易,由于计算装置C2在开始执行交易组G4中的交易之前已经对交易组G4中的交易进行了变量值预取,因此,节省了对交易组G4中的交易的执行时间。在步骤S2098,计算装置C1在确定交易组G4中的交易执行完成之后执行交易组G6中的交易。类似地,计算装置C1可在执行完成本地的交易组中的交易及迁移到本地的交易组中的交易之后,将内存中维护的变量值更新到存储装置的状态数据库中。

可以理解,上述计算装置处理交易的过程仅仅是示意性的,而不用于限制本说明书实施例的范围。例如,计算装置C1在从主控装置接收到交易执行信息之后,其不限于在确定执行完交易组G1中的交易之后立即进行对交易组G4的交易的执行,例如,计算装置C1可在执行完本地的各个交易组(即G0、G1、G2)之后,再进行对交易组G4中的交易的执行。另外,计算装置C1也有可能向其他计算装置迁移交易组,计算装置C2和C3也有可能从其他计算装置接收迁移入的交易组。

图5为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图。如图5所示,图中左侧的虚线为主节点的主控装置确定好共识提议中的多个交易的时刻,图5中的上部为本说明书实施例交易处理方案的主节点中交易处理过程的耗时示意图,图5中的下部为另一种交易处理方案的主节点中交易处理过程的耗时示意图,其中,每个框的水平长度表示相应的操作的耗时时长,斜线框表示该操作的执行主体为主控装置,白色框表示该操作的执行主体为计算装置,重叠的多个白色框表示由多个计算装置并行执行该操作。

参考图5中的上部,在本说明书实施例的交易处理方案中,主控装置在确定共识的多个交易之后,将该多个交易的交易号发送给各个计算装置。各个计算装置因为在主控装置确定共识的多个交易之前已经从共识装置接收到交易并生成了交易的读写集,因此,各个计算装置在接收到共识的交易号之后,可立即根据共识的交易号确定本地的共识的交易,并对这些交易进行交易分组。这里,假设由三个计算装置并行进行该交易分组操作,每个计算装置基本上只对共识的多个交易中的1/3的交易进行分组。计算装置在完成交易分组之后,生成每个交易组的变量表,并将该变量表发送给主控装置。主控装置在接收到交易组变量表之后,可基于该交易组变量表生成各个计算装置的交易执行方案,并将其分别发送给各个计算装置。各个计算装置在接收到交易执行方案之后,首先基于交易执行方案进行交易迁移,这里由三个计算装置并行进行各自的交易组中的交易向其他计算装置的迁移。之后,各个计算装置进行对各个交易组的交易的执行,由于计算装置在从主控装置接收到交易之后立即生成交易的读写集并进行交易的变量值预取,因此可缩短交易执行时间。

参考图5中的下部,在另一种交易处理方案中,主节点的主控装置在确定共识的多个交易之后,需要在本地完成对交易的分组,因此,主控装置生成各个交易的读写集,并基于各个交易的读写集对多个交易进行分组。这里,由于主控装置单机进行对多个交易的分组,相比于由三个计算装置并行对1/3的交易进行分组将耗费近似三倍的时间。主控装置在对所述多个交易进行分组之后,将各个交易组的交易分别发送给对应的计算装置,由于交易的交易体的数据量较大,并且由主控装置单机进行向各个计算装置发送,该发送时间相比于上部中的由三个计算装置并行交易迁移的时间更长。另外,在该技术方案中,各个计算装置在接收到各个交易组交易之后,在执行交易的过程中,还需要首先进行对交易的变量值读取工作,相比于上部的执行交易的时间更长。

从图5的耗时比较图可以显而易见地得出,本说明书实施例的主节点中的交易处理的各个环节都比图5中下部的技术方案中对应环节节省运行耗时,本说明书实施例的方案的总耗时比另一技术方案的总耗时短得多,大大节省了区块链中的交易处理时间,提高了区块链的交易处理效率。

再回到图2,在步骤S210,从节点的主控装置在从主节点的主控装置接收到共识提议之后,将交易组信息发送给从节点的各个计算装置。

如上文所述,如果从节点的主控装置在接收到共识提议之前未接收到共识提议中的各个交易,则该共识提议中包括共识的各个交易的交易体和多个交易的分组信息,从而从节点的主控装置发送给各个计算装置的交易组信息中包括各个交易组中的交易的交易体。从节点的主控装置可以将需要串行执行的交易组(例如上述交易组G1-G4-G6)发送给一个计算装置,并指示该计算装置以预定顺序串行执行交易组G1-G4-G6,从节点的主控装置可基于负载均衡的考虑将其他相互之间没有冲突的交易组分配给各个计算装置。

如果从节点的主控装置在接收到共识提议之前接收到共识提议中的各个交易,为了后续执行交易的便利性,从节点的主控装置需要与主节点的主控装置一致地将接收的交易发送给从节点的各个计算装置(例如基于交易的哈希值分配交易)。为此,从节点中需要包括与主节点中相同数目的计算装置,例如如图1中所示,从节点中也包括计算装置C1-C3。如果从节点中的计算装置与主节点中的计算装置数目不同,例如,从节点中包括两个计算装置,可在从节点的主控装置设置三个虚拟计算装置,并设定虚拟计算装置与两个计算装置的映射关系,从而从节点的主控装置可以对三个虚拟计算装置进行交易的分配。

在上述第二种情况中,从节点的主控装置在接收到交易之后,立即将交易发送给对应的计算装置,从节点的各个计算装置在接收到交易之后也立即生成交易的访问变量记录(图2中未示出)。从节点的主控装置在从主节点的主控装置接收到共识提议之后,向各个计算装置发送交易组信息,该交易组信息中仅需要包括各个计算装置的交易组中的交易的标识(例如哈希值)和交易组迁移信息。例如,对于从节点的计算装置C2,所述共识提议中包括交易组G3和G5中的交易的标识,并包括交易组G4中的交易的标识及交易组G4至从节点的计算装置C1的迁移信息。

在步骤S211,从节点的计算装置生成待执行的各个交易组的变量表。

对于步骤S210中的第一种情况,即,从节点在接收到共识提议之前未接收到交易,从节点的计算装置在从节点的主控装置接收到交易组信息之后,可基于各个交易组中的交易,生成各个交易的读写集,基于各个交易的读写集生成各个交易组的变量表(例如上文的变量位图)。在生成各个交易的读写集之后,从节点的计算装置还可以进行对各个交易的变量值预取操作,以加速后续的执行过程。

对于步骤S210中的第二种情况,即,从节点在接收到共识提议之前已经接收到各个交易,从节点的计算装置(例如计算装置C2)在接收到上述交易组信息之后,将交易组C4的交易和读写集发送给计算装置C2,基于预先生成的各个交易的读写集生成交易组C5和交易组C6的变量表。计算装置C3的操作可参考计算装置C2的操作,在此不再赘述。计算装置C1在接收到交易组信息之后,首先生成交易组G0、G1和G2的变量表,在从计算装置C2和C3分别接收到交易组G4和G6的相关数据之后,生成交易组G4和G6的变量表。

在步骤S212,从节点的计算装置将交易组的变量表发送给从节点的主控装置。

从节点的各个计算装置在生成待执行的各个交易组的变量表之后,将这些变量表都发送给从节点的主控装置。

在步骤S213,从节点的主控装置基于各个交易组的变量表确认各个交易组是否存在冲突。

如果确认各个交易组的变量表没有冲突,则可验证主节点的共识提议正确。如果确认各个交易组的变量表中存在冲突,则可验证主节点的共识提议中存在错误,在该情况下,从节点的主控装置将根据所述冲突发送交易组迁移指示、交易回滚指示、交易执行指示等,以获得正确的执行结果。例如,假设从所述主节点的主控装置发送的所述交易组信息中未包括交易组G4的从计算装置C2至计算装置C1的迁移信息,从节点的主控装置在根据交易组G1和G4的变量表确定其二者存在冲突之后,从节点的主控装置指示计算装置C2将交易组G4迁移至计算装置C1,并指示计算装置C2回滚执行交易组G4对变量值的更改,同时,从节点的主控装置指示计算装置C1回滚执行交易组G6对变量值的更改,并在执行交易组G4中的交易之后,再重新执行交易组G6中的交易。

可以理解,上述步骤S211-S213用于对主节点的共识提议进行验证,在确认主节点的主控装置是可信装置的情况中,可不对主节点的共识提议进行验证,因此上述步骤S211-S213不是必需的,而是可选的。

在步骤S214,从节点的各个计算装置执行交易组中的交易。

从节点的各个计算装置在从从节点的主控装置接收到交易组信息之后,可立即基于该交易组信息执行各个交易组中的交易。在该执行过程中,由于计算装置已经预先对交易进行了变量值预取,因此可缩短交易执行时间。

图6为本说明书实施例的交易处理方案与另一种交易处理方案的耗时对比图。如图6所示,图中左侧的虚线为从节点的主控装置从主节点的主控装置接收到共识提议的时刻,图6中的上部为本说明书实施例交易处理方案的从节点中交易处理过程的耗时示意图,图6中的下部为另一种交易处理方案的从节点中交易处理过程的耗时示意图,其中,与图5类似地,每个框的水平长度表示相应的操作的耗时时长,斜线框表示该操作的执行主体为主控装置,白色框表示该操作的执行主体为计算装置,重叠的多个白色框表示由多个计算装置并行执行该操作。

参考图6中的上部,由于在本说明书实施例的方案中,从节点的主控装置接收的共识提议中包括对共识提议中多个交易的分组信息,因此,从节点的主控装置可直接将各个交易组交易发送给对应的从节点的计算装置,而不需要再进行对所述多个交易进行分组。从节点的各个计算装置在接收到各个交易组的交易之后,即可进行对各个交易组的交易的执行,具体包括确定交易读写集、进行对交易变量的变量值预取,以及执行交易。从节点的计算装置在确定交易的读写集之后,可基于交易的读写集生成各个交易组的变量表,并发送给从节点的主控装置。从节点的主控装置在接收到各个交易组的变量表之后,在各个计算装置执行交易的同时可确认各个交易组是否有冲突,以对主节点的共识提议进行验证,进一步增加了交易执行的正确性,而不会延长交易处理耗时。

参考图6中的下部,在另一种交易处理方案中,从节点的主控装置接收的共识提议中仅包括共识提议的多个交易,而不包括对该多个交易的分组信息,因此,从节点的主控装置需要对该多个交易进行分组,如上文所述,该过程包括首先确定各个交易的读写集,和基于各个交易的读写集进行对该多个交易的分组,与上文参考图5所述类似地,由于由主控装置单机进行该分组过程,该交易分组过程的耗时较长。从节点的主控装置在确定好对多个交易的交易分组之后,将各个交易组交易发送给各个计算装置。各个计算装置在接收到交易组之后,执行各个交易组中的交易,由于没有预先的对交易的数据准备工作,在该执行过程中,还包括对交易的变量值的读取,因此,该执行交易的时长较长。

从图6的耗时比较图可以显而易见地得出,本说明书实施例的从节点中的交易处理的总耗时比另一技术方案的从节点的总耗时短得多,大大节省了区块链中的交易处理时间,提高了区块链的交易处理效率。

图7示出根据本说明书实施例的一种区块链节点,包括主控装置71和多个计算装置72,

所述主控装置71用于在每次接收交易之后将接收的交易发送给所述多个计算装置中的一个计算装置;

所述计算装置72用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主控装置71还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识发送给各个所述计算装置;

所述计算装置72还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给主控装置,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主控装置71还用于在从各个计算装置接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示各个计算装置执行交易。

在一种实施方式中,所述主控装置71用于基于各个交易组的变量表,确定交易执行方案包括,所述主控装置71用于基于各个交易组的变量表,确定不同的计算装置是否包括访问相同变量的多个交易组;基于所述确定结果确定交易执行方案。

在一种实施方式中,所述主控装置71还用于,在确定不同的计算装置包括访问相同变量的多个交易组的情况中,指示相应的计算装置向其他计算装置进行交易迁移,以使得所述访问相同变量的多个交易组在同一个计算装置按照特定顺序执行。

在一种实施方式中,所述多个计算装置72中包括第一计算装置和第二计算装置,所述第一计算装置用于,从所述主控装置接收到交易迁移信息,所述交易迁移信息包括将第一交易组迁移到第二计算装置的指示,所述第一计算装置还用于将本地的第一交易组及该第一交易组中各个交易的访问变量记录发送给所述第二计算装置。

在一种实施方式中,所述第二计算装置还用于,在从所述第一计算装置接收到迁移的第一交易组之后,将所述第一交易组排列在本地的多个交易组之后执行。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,主控装置71用于基于预先记录的交易的发送账户和/或接收账户与计算装置的对应关系表,将交易发送给对应的计算装置72。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置71用于根据预定映射函数将交易分配给一个计算装置,并更新所述对应关系表,所述预定映射函数基于各个交易的至少部分数据将多个交易均匀映射到各个计算装置。

在一种实施方式中,主控装置71用于将接收的交易发送给所述多个计算装置中的一个计算装置包括,当所述交易的发送账户和/或接收账户未记录在所述对应关系表中的情况中,所述主控装置71用于根据各个计算装置已接收的交易数量将交易分配给一个计算装置,并更新所述对应关系表。

在一种实施方式中,所述计算装置72还用于在每次从主控装置接收到交易并生成交易的访问变量记录之后,对该交易进行变量值预取。

在一种实施方式中,所述主控装置71还用于,在确定交易执行方案之后,基于所述交易执行方案生成共识提议,并将所述共识提议发送给其它区块链节点。

图8示出根据本说明书实施例的一种区块链,包括主节点81和从节点82,所述主节点81中包括主控装置811和多个计算装置812,所述主从节点82中包括主控装置821和多个计算装置822,

所述主节点81的主控装置811用于在每次接收交易之后将接收的交易发送给所述主节点的多个计算装置中的一个计算装置;

所述主节点81的计算装置812用于在每次从主控装置接收到交易之后,生成交易的访问变量记录;

所述主节点81的主控装置811还用于从接收的交易中确定共识提议中的多个交易,将所述多个交易的标识分别发送给所述主节点的多个计算装置;

所述主节点81的计算装置812还用于在接收到所述多个交易的标识之后,基于各个交易的访问变量记录,将本地接收的共识提议中的交易分组为多个交易组,生成各个交易组的变量表,并将各个交易组的变量表发送给所述主节点81的主控装置811,其中,所述变量表记录交易组中的多个交易访问的变量,同一个计算装置中的各个交易组之间没有共同的访问变量;

所述主节点81的主控装置811还用于在从主节点81的各个计算装置812接收到各个交易组的变量表之后,基于各个交易组的变量表,确定交易执行方案,并基于所述交易执行方案指示主节点81的各个计算装置812执行交易,基于所述交易执行方案生成共识提议,并向从节点82的主控装置821发送所述共识提议;

所述从节点82的主控装置821用于在接收到所述共识提议之后,根据所述共识提议指示从节点82的各个计算装置822执行交易。

在一种实施方式中,所述共识提议中包括对多个交易的分组信息,其中,所述从节点82的主控装置821用于根据所述共识提议指示从节点82的各个计算装置822执行交易包括,所述从节点82的主控装置821用于根据所述多个交易的分组信息指示从节点82的各个计算装置822执行各个交易组中的交易。

在一种实施方式中,所述从节点82的计算装置822还用于,在从所述从节点82的主控装置821接收到执行交易的指示之后,生成接收的各个交易组的变量表,将各个交易组的变量表发送给从节点82的主控装置821;所述从节点82的主控装置821还用于,在接收到各个交易组的变量表之后,对所述共识提议进行验证。

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

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

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

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

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

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

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

个性化你的检索平台
使用键盘键 进行切换