发明内容
本申请提供一种区块链的共识方法、装置及设备,用以提高区块链的共识效率。
第一方面,本申请提供一种区块链的共识方法,应用于区块链系统中的共识节点,所述方法包括:
将交易池中的交易信息划分为N个交易信息集合,所述N为大于1的自然数;
并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果;
根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。
一种可能的实现方式中,所述根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,包括:
判断所述第i个交易信息集合对应的第一共识结果是否为共识成功;
若是,在所述i等于1时,确定所述第i个交易信息集合对应的第二共识结果为共识成功;在所述i大于1时,将所述第i-1个交易信息集合对应的第二共识结果确定为所述第i个交易信息集合对应的第二共识结果;
若否,确定所述第i个交易信息集合对应的第二共识结果为共识失败。
一种可能的实现方式中,所述根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果之后,还包括:
判断所述第i个交易信息集合对应的第二共识结果是否为共识成功;
若是,则执行所述第i个交易信息集合中的交易信息。
一种可能的实现方式中,所述执行所述第i个交易信息集合中的交易信息之前,还包括:
根据所述第i个交易信息集合中的交易信息之间的关联关系,对所述第i个交易信息集合中的多个交易信息进行分组,得到所述第i个交易信息集合对应的M个交易信息组,其中,具有关联关系的交易信息位于同一个交易信息组中,所述M为大于1的自然数;
所述执行所述第i个交易信息集合中的交易信息,包括:
并行地执行所述第i个交易信息集合对应的M个交易信息组中的交易信息。
一种可能的实现方式中,所述交易信息包括:交易标识和前置交易标识;根据所述第i个交易信息集合中的交易信息之间的关联关系,对所述第i个交易信息集合中的多个交易信息进行分组,得到所述第i个交易信息集合对应的M个交易信息组,包括:
判断已创建的交易信息组中是否存在第一交易信息组,所述第一交易信息组中包括所述第i个交易信息集合中第j个交易信息的交易标识对应的前置交易标识;
若是,则将所述第j个交易信息添加至所述第一交易信息组;
若否,将所述第j个交易信息添加至第二交易信息组,所述第二交易信息组为已创建的任意一个交易信息组或者新创建的交易信息组;所述j依次取1、2、……、K,所述K为所述第i个交易信息集合中包括的交易信息的个数,所述第i个交易信息集合中的交易信息按照交易时刻从小到大的顺序排列。
一种可能的实现方式中,将所述第j个交易信息添加至第二交易信息组,包括:
判断已创建的交易信息组的数量是否大于第一阈值;
若是,则在已创建的交易信息组中确定第二交易信息组,并将所述第j个交易信息添加至所述第二交易信息组;
若否,则创建新的交易信息组,并将所述第j个交易信息添加至所述新的交易信息组,所述新的交易信息组为所述第二交易信息组。
一种可能的实现方式中,在已创建的交易信息组中确定第二交易信息组,包括:
获取已创建的各交易信息组中存在的交易信息的数量;
根据已创建的各交易信息组中存在的交易信息的数量,在所述已创建的交易信息组中确定所述第二交易信息组,所述第二交易信息组中存在的交易信息的数量小于第二阈值。
第二方面,本申请提供一种区块链的共识装置,包括:
划分模块,用于将交易池中的交易信息划分为N个交易信息集合,所述N为大于1的自然数;
处理模块,用于并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果;
所述处理模块,还用于根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。
一种可能的实现方式中,所述处理模块具体用于:
判断所述第i个交易信息集合对应的第一共识结果是否为共识成功;
若是,在所述i等于1时,确定所述第i个交易信息集合对应的第二共识结果为共识成功;在所述i大于1时,将所述第i-1个交易信息集合对应的第二共识结果确定为所述第i个交易信息集合对应的第二共识结果;
若否,确定所述第i个交易信息集合对应的第二共识结果为共识失败。
一种可能的实现方式中,所述处理模块还用于:
判断所述第i个交易信息集合对应的第二共识结果是否为共识成功;
若是,则执行所述第i个交易信息集合中的交易信息。
一种可能的实现方式中,所述处理模块还用于:根据所述第i个交易信息集合中的交易信息之间的关联关系,对所述第i个交易信息集合中的多个交易信息进行分组,得到所述第i个交易信息集合对应的M个交易信息组,其中,具有关联关系的交易信息位于同一个交易信息组中,所述M为大于1的自然数;
并行地执行所述第i个交易信息集合对应的M个交易信息组中的交易信息。
一种可能的实现方式中,所述交易信息包括:交易标识和前置交易标识;所述处理模块具体用于:
判断已创建的交易信息组中是否存在第一交易信息组,所述第一交易信息组中包括所述第i个交易信息集合中第j个交易信息的交易标识对应的前置交易标识;
若是,则将所述第j个交易信息添加至所述第一交易信息组;
若否,将所述第j个交易信息添加至第二交易信息组,所述第二交易信息组为已创建的任意一个交易信息组或者新创建的交易信息组;所述j依次取1、2、……、K,所述K为所述第i个交易信息集合中包括的交易信息的个数,所述第i个交易信息集合中的交易信息按照交易时刻从小到大的顺序排列。
一种可能的实现方式中,所述处理模块具体用于:
判断已创建的交易信息组的数量是否大于第一阈值;
若是,则在已创建的交易信息组中确定第二交易信息组,并将所述第j个交易信息添加至所述第二交易信息组;
若否,则创建新的交易信息组,并将所述第j个交易信息添加至所述新的交易信息组,所述新的交易信息组为所述第二交易信息组。
一种可能的实现方式中,所述处理模块具体用于:
获取已创建的各交易信息组中存在的交易信息的数量;
根据已创建的各交易信息组中存在的交易信息的数量,在所述已创建的交易信息组中确定所述第二交易信息组,所述第二交易信息组中存在的交易信息的数量小于第二阈值。
第三方面,本申请提供一种共识设备,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行如第一方面任一项所述的方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
本申请提供的区块链的共识方法、装置及设备,该方法包括:共识节点将交易池中的交易信息划分为N个交易信息集合,并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果,根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。由于在确定第i个交易信息集合对应的第二共识结果时,是根据前i个交易信息集合对应的第一共识结果确定的,因此能够保证共识结果的准确性。并且,在保证共识结果准确性的前提下,实现了对交易池中的N个交易信息集合并行地进行共识,提高了共识效率,进而能够提升区块链网络的整体性能。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在区块链技术中,共识机制是区块链网络中实现不同节点之间建立信任的重要方法。不同的区块链网络采用的共识机制可能不同,共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、授权股权证明(Delegated Proofof Stake,DPOS)、实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)、重要性证明(Proof of Importance,POI)、参与度证明(Proof of Participation,POP)等。但是,各共识机制的共识过程是类似的,都是基于串行化的共识方式。
图1为现有技术中的共识过程的示意图。如图1所示,共识节点从其他节点或者用户终端接收到交易信息,并将交易信息放入到交易池中。参见图1,交易池中可能存在大量的交易信息(例如:交易1、交易2、…、交易N),交易池中的交易信息是按序存放的,例如,按照交易的时间顺序进行存放。
由于交易池中的交易信息之间存在时间顺序,例如,交易1是在交易2之前进行的,交易2与交易1之间可能存在依赖关系。共识节点在对交易共识时,需要对交易按序进行共识。假设共识节点在一轮中共识的交易数量为k个,则共识节点从交易池中获取的第1批交易为交易1、交易2、…、交易k。共识节点针对第1批交易进行第1轮共识,得到第1轮共识的共识结果。在第1轮共识完成后,共识节点从交易池中获取第2批交易,例如:交易k+1、交易k+2、…、交易2k。共识节点针对第2批交易进行第2轮共识,得到第2轮共识的共识结果。在第2轮共识完成后,共识节点从交易池中获取第3批交易,例如:交易2k+1、交易2k+2、…、交易3k。共识节点针对第3批交易进行第3轮共识,得到第3轮共识的共识结果。然后继续执行后续的共识过程,可以理解的,后续的共识过程与上述过程类似,此处不再赘述。
需要说明的是,不同的共识机制对应的共识过程可能会略有不同,例如:可以约定每轮共识的交易数量,或者约定每轮共识间隔的时间。图1中是以每轮共识k个交易为例进行示例的。
由图1可知,现有的共识过程中,共识节点在对交易共识时,是基于串行化的共识方式。也就是说,必须等待上一轮的共识完成,才开始下一轮的共识。串行化的共识方式使得共识过程变的简单,只需要按照交易的顺序进行共识。但是,串行化的共识方式使得共识效率较低,进而使得区块链网络的整体性能下降。
为了解决上述问题,本申请提供一种区块链的共识方法,共识节点在对交易进行共识的过程中,采用并行化的共识方式,在不影响共识结果的准确性的前提下,提高共识的效率,从而使得区块链网络的整体性能得到提升。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请一个实施例提供的区块链的共识方法的流程示意图。本实施例的方法可以由区块链中的共识节点执行。区块链系统中可以包括多个共识节点。本实施例中共识方法可以由其中的任意一个共识节点执行。
其中,共识节点是指区块链中用于对交易进行共识的设备。示例性的,共识节点可以为个人计算机、计算机集群、手机、平板电脑、智能穿戴设备、车载设备等。
如图2所示,本实施例的方法,包括:
S201:将交易池中的交易信息划分为N个交易信息集合,所述N为大于1的自然数。
S202:并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果。
S203:根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。
本实施例中,交易池是指用于缓存交易信息的缓冲池。交易提交节点向共识节点发送的交易信息,被放入交易池中进行缓存。交易池中的各交易是按照交易的时间顺序进行存放的。其中,交易提交节点是指生成交易信息的节点,例如:可以为用户终端,还可以为区块链系统中的除共识节点之外的其他节点。
S201中,共识节点将交易池中的交易信息划分为N个交易信息集合,可以有多种实施方式。一种可能的实施方式中,按照预设的数量进行划分,例如,可以按照交易池中的交易信息的顺序,每k个交易信息划分为一个集合,按照这种划分方式,各个集合中的交易信息的数量均为k个。另一种可能的实施方式中,可以按照交易信息所处的时间范围进行划分。例如,将处于时间段1内的交易信息作为集合1,将处于时间段2内的交易信息作为集合2中,按照这种划分方式,不同的集合中的交易信息的数量可能不同。
可以理解的,针对不同的共识机制,对交易池中的交易信息进行划分的方式可以不同。可选的,可以根据交易机制指定的每轮共识的交易信息的最大数量进行划分。针对不同的划分方式,N的取值也可能不同,本实施例对于N的取值不作限定,可以根据实际应用场景进行选取。
图3为本申请一个实施例提供的共识过程的示意图。如图3所示,假设每轮共识的交易信息的最大数量为100个,交易池中共有200个交易信息,则可以将交易池中的交易信息划分为2个集合。第一集合中包括交易1-100,第二集合中包括交易101-200。当然,还可以采用其他的划分方式,本实施例对此不作限定。
S202中,将交易池中的交易信息划分为N个交易信息集合后,共识节点可以针对N个交易信息集合,并行地共识。也就是说,针对每个交易信息集合,进行一轮共识,这N轮共识并行的进行。
示例性的,结合图3所示的示例,将交易池中的交易信息划分为两个集合后,针对第一集合中的交易信息执行第一轮共识,针对第二集合中的交易信息执行第二轮共识。共识节点并行地执行这两轮共识。例如:共识节点可以分别采用两个独立的模块或者线程执行这两轮共识。这样,分别得到两轮共识的第一共识结果。
其中,本实施例中第一共识结果是指针对本轮共识对应的交易信息集合中的交易信息进行共识得到的结果。也就是说,第一共识结果并未考虑本轮共识之前的交易信息的共识结果。参见图3,第一轮共识的第一共识结果指示的是对交易1-100进行共识得到的结果。第二轮共识的第一共识结果指示的是对交易101-200进行共识得到的结果。
需要说明的是,本实施例对于每轮共识的执行过程不作具体限定,可以根据现有的共识算法针对集合中的交易信息进行共识。不同的共识算法对应的共识执行过程也可能不同。可以理解的,每轮共识的第一共识结果是通过采用共识算法确定的。
实际应用中,第二轮共识的交易101-200可能会依赖于第一轮共识的交易1-100,这样,第二轮共识的最终共识结果其实是依赖于第一轮共识的共识结果的。因此,本实施例中,采用S203,在并行地对N个交易信息集合进行共识,得到N个交易信息集合的第一共识结果之后,根据这N个交易信息集合的第一共识结果,考虑N个交易信息集合之间的依赖关系,得到这N个交易信息集合的第二共识结果。其中,第二共识结果是指考虑交易之间的依赖关系之后的共识结果。也就是说,第二共识结果指示的是对交易池中的交易信息进行整体共识之后得到的最终的共识结果。
可以理解的,第i个交易信息集合的第二共识结果是与前i个交易信息集合的第一共识结果相关的。也就是说,可以根据前i个交易信息集合对应的第一共识结果确定第i个交易信息集合对应的第二共识结果。其中,i为小于或等于N的自然数。
下面以第i个交易信息集合为例,描述第i个交易信息集合对应的第二共识结果的确定过程。首先判断第i个交易信息集合对应的第一共识结果是否为共识成功;若是,在所述i等于1时,确定所述第i个交易信息集合对应的第二共识结果为共识成功;在所述i大于1时,将所述第i-1个交易信息集合对应的第二共识结果确定为所述第i个交易信息集合对应的第二共识结果;若否,确定所述第i个交易信息集合对应的第二共识结果为共识失败。
换句话说,当i=1(即针对第1个交易信息集合)时,直接将第1个交易信息集合的第一共识结果作为第1个交易信息集合的第二共识结果。例如,第1个交易信息集合的第一共识结果为成功,则确定第1个交易信息集合的第二共识结果为成功,第1个交易信息集合的第一共识结果为失败,则确定第1个交易信息集合的第二共识结果为失败。当i>1时,若第i个交易信息集合的第一共识结果为失败,则确定第i个交易信息集合的第二共识结果为失败。若第i个交易信息集合的第一共识结果为成功,则将第i-1个交易信息集合的第二共识结果作为第i个交易信息集合的第二共识结果(即如果第i-1个交易信息集合的第二共识结果为成功,则确定第i个交易信息集合的第二共识结果为成功,如果第i-1个交易信息集合的第二共识结果为失败,则确定第i个交易信息集合的第二共识结果为失败)。
结合图3所示,共识节点执行第1轮共识得到第1轮共识的第一共识结果,由于是第1轮共识,直接将该轮的第一共识结果作为本轮的第二共识结果,并将第二共识结果发送给第2轮共识。共识节点执行第2轮共识得到本轮的第一共识结果后,根据本轮的第一共识结果以及接收到的第1轮共识的第二共识结果确定出第2轮的第二共识结果。若第2轮共识的第一共识结果为失败,则确定第2轮的第二共识结果为失败,若第2轮共识的第一共识结果为成功,则将第1轮共识的第二共识结果作为第2轮共识的第二共识结果(也就是说,若第1轮共识的第二共识结果为成功,则第2轮共识的第二共识结果也为成功,若第1轮共识的第二共识结果为失败,则第2轮共识的第二共识结果也为失败)。
一种可能的实施方式中,如图3所示,在某一轮共识的共识结果为失败的情况下,需要将共识过程中产生的缓存信息清除,以避免对后续的共识过程产生影响。
一种可能的实施方式中,针对所述N轮共识中的每轮共识,例如第i轮共识,若第i轮共识的第二共识结果为成功,则执行第i轮共识对应的交易信息集合中的交易信息。如图3所示,在第1轮共识的第二共识结果为成功的情况下,共识节点执行第一集合中的交易信息。在第2轮共识的第二共识结果为成功(即第2轮中的交易信息的第一共识结果为成功,且第1轮共识的第二共识结果为成功)的情况下,共识节点执行第二集合中的交易信息。
本实施例提供的区块链的共识方法,包括:将交易池中的交易信息划分为N个交易信息集合,并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果,根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。由于在确定第i个交易信息集合的第二共识结果时,是根据前i个交易信息集合的第一共识结果确定的,因此能够保证共识结果的准确性。并且,在保证共识结果准确性的前提下,实现了对N个交易信息集合进行并行的共识,提高了共识效率,进而能够提升区块链网络的整体性能。
在上述实施例的基础上,针对每个交易信息集合,若该交易信息集合的第二共识结果为共识成功时,需要执行该交易信息集合中的交易信息,以将该交易信息集合中的交易信息写入区块中。需要说明的是,实际应用中,每个交易信息集合中的交易信息可以写入到一个区块中,还可以写入到多个区块中,本实施例对此不作限定。本实施例中,为了进一步提高交易信息的执行效率,还可以将每个交易信息集合中的交易信息进一步划分为多个交易信息组。这样,在执行该交易信息集合中的交易信息时,可以对多个交易信息组进行并行地执行,从而提高执行效率。下面结合图4所示的实施例进行详细描述。
图4为本申请一个实施例提供的区块链的共识方法的流程示意图。如图4所示,本实施例的方法包括:
S401:将交易池中的交易信息划分为N个交易信息集合,所述N为大于1的自然数。
本实施例中S401的具体实施方式可以参见S201的详细描述,此处不再赘述。
S402:针对每个交易信息集合,根据所述交易信息集合中的交易信息之间的关联关系,对所述交易信息集合中的多个交易信息进行分组,得到所述交易信息集合对应的M个交易信息组,其中,具有关联关系的交易信息位于同一个交易信息组中。
其中,关联关系可以是指交易信息之间的依赖关系。例如:交易1为A向B转账100元,交易2为B向C转账100元。则交易2必须在交易1执行之后再执行,即交易1为交易2的前置交易,该情况下认为交易1和交易2之间为依赖关系。当然,关联关系还可以是指交易信息之间的其他关系,本实施例不作具体限定。后续举例中,是以交易信息之间的依赖关系为例进行描述。
本实施例中,在根据交易信息之间的关联关系对交易信息集合中的多个交易信息进行分组时,是将具有关联关系的交易信息划分到一个组中,不具有关联关系的交易信息可以划分到不同的组中。
本实施例中,对于每个交易信息集合划分的交易信息组的数量M不作具体限定。不同的交易信息集合划分的交易信息组的数量可以相同也可以不同。
S403:并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果。
本实施例中S403的具体实施方式与图2所示实施例中S202类似,此处不再赘述。
S404:针对所述N个交易信息集合中的第i个交易信息集合,根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果;若第i个交易信息集合对应的第二共识结果为共识成功,则并行地执行第i个交易信息集合对应的M个交易信息组中的交易信息。所述i依次取1、2、……、N-1、N。
本实施例中,确定第i个交易信息集合的第二共识结果的过程与图2所示实施例类似,此处不再赘述。当确定第i个交易信息集合的第二共识结果为共识成功时,则对第i个交易信息集合中的M个交易信息组进行并行的执行交易。示例性的,
可以理解的,本实施例中,对每个交易信息集合进行划分得到M个交易信息组,经过上述分组之后,由于具有关联关系的交易信息位于同一交易信息组中,不同的交易信息组之间的交易信息是不具有关联关系的,因此,针对多个交易信息组并行地执行交易,能够保证执行结果的准确性。示例性的,共识节点可以采用多个独立的模块或者线程,并行地对M个交易信息组进行交易执行,从而将M个交易信息组中的交易信息写入区块中。其中,M个交易信息组中的交易信息可以被写入同一区块中,还可以被写入不同的区块中,具体可以根据不同区块链网络的结块规则确定。
需要说明的是,对于每个交易信息组中的交易信息的执行过程与现有技术是类似的,即,针对每个交易信息组,可以采用串行的方式按序执行其中的交易信息,以保证交易执行结果的准确性。
本实施例中,不仅在共识阶段实现了对N个交易信息集合的并行共识,提高了共识效率,还在执行交易阶段实现了针对每个交易信息集合中的M个交易信息组的并行执行,提高了交易执行效率,从而进一步提升了区块链网络的整体性能。
下面结合一个具体的实施例,对S402中的每个交易信息集合中的多个交易信息进行分组的过程进行详细描述。
图5为本申请一个实施例提供的交易信息的分组过程的流程示意图。本实施例描述的是对交易信息集合中的第j个交易信息进行分组的过程,可以理解的,遍历该交易信息集合中的每个交易信息执行本实施例的方法,即可实现对该交易信息集合的分组过程。其中,j依次取1、2、…、至K,其中,K为该交易信息集合中的交易信息的数量。
如图5所示,本实施例的方法,包括:
S501:获取交易信息集合中的第j个交易信息的交易标识和所述交易标识对应的前置交易标识。
其中,每个交易信息包括:交易标识和所述交易标识对应的前置交易标识。其中,前置交易是指必须在该交易之前进行的交易。前置交易也可以称为依赖交易。
本实施例中的交易的标识是指能够唯一指示该交易的任意标识。例如,可以采用未花费的交易输出(Unspent Transaction Output,UTXO)模型的输出作为交易标识,还可以采用其他指定规则的key作为交易标识。
S502:判断已创建的交易信息组中是否存在第一交易信息组,所述第一交易信息组中包括第j个交易信息的交易标识对应的前置交易标识。若是,则执行S503,若否,则执行S504。
S503:将所述第j个交易信息添加至所述第一交易信息组。
S504:将所述第j个交易信息添加至第二交易信息组,所述第二交易信息组为已创建的任意一个交易信息组或者新创建的交易信息组。
本实施例中,在分组之前,可以首先创建一个空的交易信息组。然后遍历交易信息集合中的每个交易信息执行上述的S501至S504。获取该交易信息的交易标识对应的前置交易标识。遍历已创建的交易信息组,判断各个已创建的交易信息组中是否存在所述前置交易标识。若所有已创建的交易信息组中均不存在所述前置交易标识,则将该交易信息添加到已创建的任意一个交易信息组中,或者,创建新的交易信息组,并将该交易信息添加至所述新的交易信息组中。若其中一个交易信息组中存在所述前置交易标识,则将该交易信息添加到所述前置交易标识所在的交易信息组中。
实际应用中,对于大部分业务场景,对于结块(将交易打包为区块)的行为(例如,多少个交易打包为一个区块,或者多少时间内的交易打包为一个区块)没有严格要求。因此,本实施例对于上述的交易分组过程中,多少个交易分为一组,以及共分为多少个组,并不作具体限定。实际应用中,可以根据实际情况,适当增加组的数量,减少每组中的交易的数量,这样提高每轮共识的并行度,提高共识效率。
一种可能的实施方式中,共识节点可以采用配置策略,事先配置第一阈值和第二阈值。其中,第一阈值用于指示交易信息组的最大数量,第二阈值用于指示每个交易信息组中的交易信息的最大数量。可以理解的,第一阈值和第二阈值的具体取值可以根据实际应用场景进行灵活调整。
一种可能的实施方式中,若所有已创建的交易信息组中均不存在当前交易信息的交易标识对应的前置交易标识时,在S504中,可以先判断已创建的交易信息组的数量是否大于或等于第一阈值,若否,则说明交易信息组的数量未达到最大组数,为了提高并行度,可以创建新的交易信息组,并将该交易信息添加至新的交易信息组中。若是,则说明交易信息组的数量已达到最大组数,因此不再创建新的交易信息组,而是在已创建的交易信息组中确定第二交易信息组,并将该交易信息添加到第二交易信息组中。可以理解的,由于该交易信息不存在前置交易,即该交易信息与其他交易信息均不存在关联关系,因此,将该交易信息添加至任意交易信息组中均不会影响交易执行结果。
进一步的,在已创建的交易信息组中,确定第二交易信息组时,还可以根据各个交易信息组中的交易信息的数量确定出第二交易信息组。示例性的,获取已创建的各交易信息组中存在的交易信息的数量,找出存在的交易信息的数量小于第二阈值的候选交易信息组,在候选交易信息组中选择一个作为第二交易信息组。这样,可以保证各个交易信息组中的交易信息的数量不超过最大阈值,还可以使得各个交易信息组中的交易信息的数量尽可能的平衡。
按照上述的方法,遍历完成交易信息集合中的所有交易信息之后,便将所有交易信息划分到不同的交易信息组中。示例性的,图6为本申请一个实施例提供的交易信息分组的示意图。如图6所示,假设有6个交易信息,各交易信息的交易标识分别为Key1、Key2、Key3、Key4、Key5、Key6。其中,交易Key2的前置交易为Key1,Key3的前置交易为Key2,Key5的前置交易为Key4。按照上述的分组过程之后,得到3个交易信息组,参见图6,交易信息组1中包括交易Key1、Key2和Key3,交易信息组2中包括交易Key4和Key5,交易信息组3中包括交易Key6。结合图6,经过上述分组之后,保证了每个交易信息组中的交易信息是按照交易之间的关联关系进行存放的。也就是说,具有关联关系的交易信息位于一个交易信息组中,不具有依赖关系的交易信息可以位于不同的交易信息组中。
图7为本申请一个实施例提供的区块链的共识过程的示意图。如图7所示,将交易池中交易划分为N个交易信息集合,每个交易信息集合对应一轮共识。这N轮共识可以并行进行,具体可以参见如图2所示的实施例。进一步的,针对每一个交易信息集合,可以将该集合中的交易信息划分为M个交易信息组。具体分组过程可以参见图5所示的实施例。在交易执行阶段,M个交易信息组之间可以并行地执行交易,具体可以参见如图4所示的实施例。
需要说明的是,本实施例中,各个交易信息集合划分的交易信息组的数量可以相同或者不同。图7中示例的是每个交易信息集合均划分为M个交易信息组的情况,实际应用中,各个交易信息集合划分的交易信息组的数量可以不同。
本实施例提供的区块链的共识方法中,在可能的范围内不对某些单一的交易进行共识处理,而是尽可能的将交易进行分组批量进行共识。当一批交易满足共识条件时,对这些交易进行分组,将具有依赖关系的交易分到一个组中,这样形成了多个分组。由于组与组之间没有依赖关系,共识节点可以对多个分组进行并行的共识,提高了共识效率。
本实施例提供的区块链的共识方法,不仅实现了不同交易信息集合之间的并行共识处理,针对每一个交易信息集合还通过分组实现了并行地交易执行处理,进一步提升了区块链网络的整体性能。
图8为本申请一个实施例提供的区块链的共识装置的结构示意图。本实施例的区块链的共识装置可以为软件和/或硬件的形式,该装置可以设置在区块链网络中作为共识节点的设备中。如图8所示,本实施例提供的区块链的共识装置800,包括:划分模块801和处理模块802。
其中,划分模块801,用于将交易池中的交易信息划分为N个交易信息集合,所述N为大于1的自然数;
处理模块802,用于并行地对所述N个交易信息集合进行共识,得到每个交易信息集合对应的第一共识结果;
所述处理模块802,还用于根据前i个交易信息集合对应的第一共识结果,确定第i个交易信息集合对应的第二共识结果,所述i依次取1、2、……、N-1、N。
一种可能的实现方式中,所述处理模块802具体用于:
判断所述第i个交易信息集合对应的第一共识结果是否为共识成功;
若是,在所述i等于1时,确定所述第i个交易信息集合对应的第二共识结果为共识成功;在所述i大于1时,将所述第i-1个交易信息集合对应的第二共识结果确定为所述第i个交易信息集合对应的第二共识结果;
若否,确定所述第i个交易信息集合对应的第二共识结果为共识失败。
一种可能的实现方式中,所述处理模块802还用于:
判断所述第i个交易信息集合对应的第二共识结果是否为共识成功;
若是,则执行所述第i个交易信息集合中的交易信息。
一种可能的实现方式中,所述处理模块802还用于:根据所述第i个交易信息集合中的交易信息之间的关联关系,对所述第i个交易信息集合中的多个交易信息进行分组,得到所述第i个交易信息集合对应的M个交易信息组,其中,具有关联关系的交易信息位于同一个交易信息组中,所述M为大于1的自然数;
并行地执行所述第i个交易信息集合对应的M个交易信息组中的交易信息。
一种可能的实现方式中,所述交易信息包括:交易标识和前置交易标识;所述处理模块802具体用于:
判断已创建的交易信息组中是否存在第一交易信息组,所述第一交易信息组中包括所述第i个交易信息集合中第j个交易信息的交易标识对应的前置交易标识;
若是,则将所述第j个交易信息添加至所述第一交易信息组;
若否,将所述第j个交易信息添加至第二交易信息组,所述第二交易信息组为已创建的任意一个交易信息组或者新创建的交易信息组;所述j依次取1、2、……、K,所述K为所述第i个交易信息集合中包括的交易信息的个数,所述第i个交易信息集合中的交易信息按照交易时刻从小到大的顺序排列。
一种可能的实现方式中,所述处理模块802具体用于:
判断已创建的交易信息组的数量是否大于第一阈值;
若是,则在已创建的交易信息组中确定第二交易信息组,并将所述第j个交易信息添加至所述第二交易信息组;
若否,则创建新的交易信息组,并将所述第j个交易信息添加至所述新的交易信息组,所述新的交易信息组为所述第二交易信息组。
一种可能的实现方式中,所述处理模块802具体用于:
获取已创建的各交易信息组中存在的交易信息的数量;
根据已创建的各交易信息组中存在的交易信息的数量,在所述已创建的交易信息组中确定所述第二交易信息组,所述第二交易信息组中存在的交易信息的数量小于第二阈值。
本实施例提供的区块链的共识装置,可用于执行上述任一方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本申请一个实施例提供的共识设备的结构示意图。本实施例的共识设备可以作为区块链网络中的共识节点。如图9所示,本实施例的共识设备900,包括:处理器901以及存储器902;其中,存储器902,用于存储计算机程序;处理器901,用于执行存储器存储的计算机程序,以实现上述实施例中的区块链的共识方法。具体可以参见前述方法实施例中的相关描述。
可选地,存储器902既可以是独立的,也可以跟处理器901集成在一起。
当所述存储器902是独立于处理器901之外的器件时,所述共识设备900还可以包括:总线903,用于连接所述存储器902和处理器901。
本实施例提供的共识设备,可用于执行上述任一方法实施例中的区块链的共识方法,其实现原理和技术效果类似,本实施例此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序用于实现如上任一方法实施例中的技术方案。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。