区块链的共识方法、共识节点、电子设备、存储介质
技术领域
本公开涉及区块链技术领域,尤其涉及一种区块链的共识方法、共识节点、电子设备、存储介质。
背景技术
区块链是一种底层开源技术,包括的计算机技术为分布式数据存储、点对点传输、共识机制、加密算法等新型应用模式的集合,具有去中心化、规则应用去信任、安全保护去垄断等特点,而共识是区块链中的重要技术之一。
在现有技术中,区块链共识包括拜占庭容错算法(Practical Byzantine FaultTolerance,PBFT)等,且主要通过提议节点广播交易请求,每个共识节点(包括提议节点)均执行交易请求中携带的交易任务,将执行交易任务的结果打包成新区块进行上链处理。
然而发明人在实现本公开的过程中,发现至少存在如下问题:在不同共识节点执行交易任务的过程中,尽管交易任务相同,但由于选取的参数不同等原因造成执行交易任务的结果可能不同,导致区块上链后的分布式账本不一致。
发明内容
本公开提供一种区块链的共识方法、共识节点、电子设备、存储介质,用以解决现有技术中的分布式账本不一致的问题。
一方面,本公开实施例提供一种区块链的共识方法,所述方法包括:
接收对象发送的交易请求,所述交易请求中携带至少一个交易任务;
计算共识节点执行所述至少一个交易任务的第一哈希值;
根据所述第一哈希值和所述至少一个交易任务确定第二哈希值;
接收其他共识节点广播的第三哈希值,其中,所述第三哈希值是所述其他共识节点根据其执行所述至少一个交易任务的结果和所述至少一个交易任务确定的;
响应于所述第二哈希值与至少半数的所述第三哈希值相同,生成并上链包含所述第一哈希值的区块。
在一些实施例中,在所述接收其他共识节点广播的第三哈希值之后,所述方法还包括:
响应于少于半数的所述第三哈希值与所述第二哈希值相同,生成并向所述对象反馈共识失败的反馈信息。
在一些实施例中,在所述接收其他共识节点广播的第三哈希值之后,所述方法还包括:
响应于少于半数的所述第三哈希值与所述第二哈希值相同,对所述至少一个交易任务进行回滚。
在一些实施例中,在所述接收其他共识节点广播的第三哈希值之后,所述方法还包括:
获取所述第三哈希值的总数,并获取与所述第二哈希值相同的所述第三哈希值的相同数量;
判断所述总数是否大于或等于所述相同数量的两倍;
若是,则执行所述生成并上链包含所述第一哈希值的区块。
另一方面,本公开实施例提供一种共识节点,所述共识节点包括:
第一接收模块,用于接收对象发送的交易请求,所述交易请求中携带至少一个交易任务;
计算模块,用于计算共识节点执行所述至少一个交易任务的第一哈希值;
确定模块,用于根据所述第一哈希值和所述至少一个交易任务确定第二哈希值;
第二接收模块,用于接收其他共识节点广播的第三哈希值,其中,所述第三哈希值是所述其他共识节点根据其执行所述至少一个交易任务的结果和所述至少一个交易任务确定的;
第一生成模块,用于响应于所述第二哈希值与至少半数的所述第三哈希值相同,生成包含所述第一哈希值的区块;
上链模块,用于对包含所述第一哈希值的区块进行上链。
在一些实施例中,所述共识节点还包括:
第二生成模块,用于响应于少于半数的所述第三哈希值与所述第二哈希值相同,生成共识失败的反馈信息;
反馈模块,用于向所述对象反馈所述反馈信息。
在一些实施例中,所述共识节点还包括:
回滚模块,用于响应于少于半数的所述第三哈希值与所述第二哈希值相同,对所述至少一个交易任务进行回滚。
在一些实施例中,所述共识节点还包括:
获取模块,用于获取所述第三哈希值的总数,并获取与所述第二哈希值相同的所述第三哈希值的相同数量;
判断模块,用于判断所述总数是否大于或等于所述相同数量的两倍;
所述第一生成模块用于,若所述总数大于或等于所述相同数量的两倍,则执行所述生成包含所述第一哈希值的区块。
另一方面,本公开实施例还提供了一种电子设备,包括:存储器,处理器;
所述存储器用于存储所述处理器可执行指令的存储器;
其中,当执行所述存储器中的指令时,所述处理器被配置为实现如上任一实施例所述的方法。
另一个方面,本公开实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上任一实施例所述的方法。
本公开提供了一种区块链的共识方法、共识节点、电子设备、存储介质,包括:接收对象发送的交易请求,交易请求中携带至少一个交易任务,计算共识节点执行至少一个交易任务的第一哈希值,根据第一哈希值和至少一个交易任务确定第二哈希值,接收其他共识节点广播的第三哈希值,其中,第三哈希值是其他共识节点根据其执行至少一个交易任务的结果和交易任务确定的,响应于第二哈希值与至少半数的第三哈希值相同,生成并上链包含第一哈希值的区块,通过在共识过程中增加“预计算”的步骤,即计算得到第二哈希值的步骤,且当第二哈希值与至少半数的第三哈希值相同时,生成第一哈希值的区块,避免了现有技术中由于不同的共识节点选取的参数不同等原因,造成执行交易任务的结果不同,而直接根据执行交易任务的结果生成区块并上链时,导致分布式账本不一致的问题,从而实现了分布式账本一致的技术效果。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本公开实施例的区块链的共识方法的应用场景的示意图;
图2为本公开实施例的区块链的共识方法的流程示意图;
图3为本公开实施例的区块链的共识方法的交互的示意图;
图4为本公开另一实施例的区块链的共识方法的流程示意图;
图5为本公开另一实施例的区块链的共识方法的流程示意图;
图6为本公开实施例的共识节点的示意图;
图7为本公开另一实施例的共识节点的示意图;
图8为本公开另一实施例的共识节点的示意图;
图9为本公开另一实施例的共识节点的示意图;
图10为本公开实施例的电子设备的结构示意图;
附图标记:10、服务器,20、用户,30、终端设备,1、第一接收模块,2、计算模块,3、确定模块,4、第二接收模块,5、第一生成模块,6、上链模块,7、第二生成模块,8、反馈模块,9、回滚模块,10、获取模块,11、判断模块。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开实施例提供的区块链的共识方法,可以适用于如图1所示的应用场景。
在如图1所示的应用场景中,本公开实施例的区块链的共识方法运行于服务器10中,用户20可通过终端设备30(在图1中,终端设备为计算机)发起交易请求。
当然,在一些实施例中,用户20也可通过手机或iPad等用户终端向服务器10触发区块链中的客户节点,以便由客户节点发起交易请求。
当然,在另一些实施例中,本公开实施例的区块链的共识方法还可运行于计算机中。当本公开实施例的区块链的共识方法运行于计算机中时,则用户可直接对计算机进行操作以便触发交易请求,或者用户通过手机或iPad等用户终端向计算机触发区块链中的客户节点,以便由客户节点发起交易请求。
下面以具体地实施例对本公开的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
一个方面,本公开实施例提供了一种适用于上述应用场景的区块链的共识方法。
请参阅图2,图2为本公开实施例的区块链的共识方法的流程示意图。
如图2所示,该方法包括:
S101:接收对象发送的交易请求,交易请求中携带至少一个交易任务。
其中,交易请求中携带的交易任务可以为一个,也可以为多个。
图3为本公开实施例的区块链的共识方法的交互的示意图。
结合图2和图3可知,在一些实施例中,由客户节点向共识节点发起交易请求,交易请求中携带一个或多个交易任务。且,客户节点具体为向共识节点中的提议节点发起交易请求,以便由提议节点将至少一个交易任务进行广播,使得其他共识节点获悉至少一个交易。
其中,提议节点属于共识节点,且提议节点由共识节点共同选举产生,且任一共识节点均有可能成为提议节点。
也就是说,在该步骤中,具体为提议节点接收客户节点(如客户终端)发送的交易请求,并对交易请求中携带的至少一个交易任务进行广播。
在一些实施例中,当交易请求中包含多个交易任务时,则多个交易任务组成交易序列。
S102:计算共识节点执行至少一个交易任务的第一哈希值。
S103:根据第一哈希值和至少一个交易任务确定第二哈希值。
结合图3可知,在一些实施例中,共包括四个共识节点,分别为提议节点A、共识节点B、共识节点C和共识节点D。
在现有技术中,是由提议节点对交易请求进行广播,并由四个共识节点(包括提议节点在内的四个共识节点)分别执行交易请求中的交易任务,并将执行结果打包成区块且进行上链。
但是,在本公开实施例中,增加了“预计算”的步骤,即通过四个共识节点分别计算执行至少一个交易任务的第一哈希值进行计算,并根据第一哈希值和至少一个交易任务计算得到第二哈希值。
采用现有技术的方案,由四个共识节点分别执行交易请求中的交易任务,直接对执行交易任务的结果进行打包上链,对可能存在由于不同的共识节点选取的参数不同等原因,造成执行交易任务的结果不同,导致分布式账本不一致。
而在本公开实施例中,通过上述“预计算”的步骤,对第二哈希值进行计算,并当第二哈希值满足需求(后续将进行详细阐述)时,生成包含第一哈希值的区块,以避免上述由于现有技术中哈希值不一致的问题,从而实现分布式账本一致的技术效果。
S104:接收其他共识节点广播的第三哈希值,其中,第三哈希值是其他共识节点根据其执行至少一个交易任务的结果和至少一个交易任务确定的。
在本公开实施例中,四个共识节点中的每个共识节点均会根据执行至少一个交易任务的结果和至少一个交易任务生成哈希值,为了对不同节点生成的哈希值进行区分,将哈希值标记为第二哈希值和第三哈希值。
现以第二哈希值对应的共识节点为提议节点A,第三哈希值对应的共识节点为共识节点B、共识节点C和共识节点D为例进行如下阐述:
提议节点A接收客户节点发送的交易请求,并将交易请求进行广播。
提议节点A生成第二哈希值,共识节点B、共识节点C和共识节点D分别生成第三哈希值(具体生成方法可参见上述示例,此处不再赘述)。
提议节点A将第二哈希值进行广播。
共识节点B、共识节点C和共识节点D分别对第三哈希值进行广播。
提议节点A接收共识节点B、共识节点C和共识节点D分别广播的第三哈希值。
S105:响应于第二哈希值与至少半数的第三哈希值相同,生成并上链包含第一哈希值的区块。
基于上述示例,如果提议节点A的第二哈希值与其他两个共识节点广播(可能是共识节点B和共识节点C,也可能是共识节点B和共识节点D,也可能是共识节点C和共识节点D)的两个第三哈希值相同,则提议节点A生成包含第一哈希值的区块,并进行上链。
同理,第二哈希值对应的共识节点为共识节点B,第三哈希值对应的共识节点为提议节点A、共识节点C和共识节点D,则:
提议节点A接收客户节点发送的交易请求,并将交易请求进行广播。
共识节点B生成第二哈希值,提议节点A、共识节点C和共识节点D分别生成第三哈希值(具体生成方法可参见上述示例,此处不再赘述)。
共识节点B将第二哈希值进行广播。
提议节点A、共识节点C和共识节点D分别对第三哈希值进行广播。
共识节点B接收提议节点A、共识节点C和共识节点D分别广播的第三哈希值。
如果共识节点B的第二哈希值与其他两个共识节点广播(可能是提议节点A和共识节点C,也可能是提议节点A和共识节点D,也可能是共识节点C和共识节点D)的两个第三哈希值相同,则共识节点A生成包含第一哈希值的区块,并进行上链。
在本公开实施例中,通过接收其他共识节点广播的第三哈希值,以便将第二哈希值与每个第三哈希值进行比较,以确定第二哈希值和每个第三哈希值是否相同,若在第三哈希值中,存在一半或一半以上的第三哈希值与第二哈希值相同,则生成包含第一哈希值的区块,并将生成的区块进行上链。由于当第二哈希值与半数或者半数以上的第三哈希值相同时,生成包含第一哈希值的区块,并进行上链,因此,可以实现分布式账本的一致性。
请参阅图4,图4为本公开另一实施例的区块链的共识方法的流程示意图。
如图4所示,该方法包括:
S201:接收对象发送的交易请求,交易请求中携带至少一个交易任务。
其中,S201的描述可以参见S101,此处不再赘述。
S202:计算共识节点执行至少一个交易任务的第一哈希值。
其中,S202的描述可以参见S102,此处不再赘述。
S203:根据第一哈希值和至少一个交易任务确定第二哈希值。
其中,S203的描述可以参见S103,此处不再赘述。
S204:接收其他共识节点广播的第三哈希值,其中,第三哈希值是其他共识节点根据其执行至少一个交易任务的结果和至少一个交易任务确定的。
其中,S204的描述可以参见S104,此处不再赘述。
S205:响应于第二哈希值与至少半数的第三哈希值相同,生成并上链包含第一哈希值的区块。
其中,S205的描述可以参见S105,此处不再赘述。
S206:响应于少于半数的第三哈希值与第二哈希值相同,生成并向对象反馈共识失败的反馈信息。
基于上述示例可知,在一些实施例中,如果提议节点A的第二哈希值与其他两个共识节点广播(可能是共识节点B和共识节点C,也可能是共识节点B和共识节点D,也可能是共识节点C和共识节点D)的两个第三哈希值相同,则共识节点A生成包含第一哈希值的区块,并进行上链。
但是,有可能存在提议节点A的第二哈希值与其他两个共识节点(可能是共识节点B和共识节点C,也可能是共识节点B和共识节点D,也可能是共识节点C和共识节点D)广播的两个第三哈希值不相同,或者,提议节点A的第二哈希值与其他三个共识节点广播(共识节点B、共识节点C和共识节点D)的三个第三哈希值均不相同,则提议节点A生成共识失败的反馈信息,并将该反馈信息发送至对象,即提议节点A将反馈信息反馈至客户节点(如客户终端)。
请参阅图5,图5为本公开另一实施例的区块链的共识方法的流程示意图。
如图5所示,该方法包括:
S301:接收对象发送的交易请求,交易请求中携带至少一个交易任务。
其中,S301的描述可以参见S101,此处不再赘述。
S302:计算共识节点执行至少一个交易任务的第一哈希值。
其中,S302的描述可以参见S102,此处不再赘述。
S303:根据第一哈希值和至少一个交易任务确定第二哈希值。
其中,S303的描述可以参见S103,此处不再赘述。
S304:接收其他共识节点广播的第三哈希值,其中,第三哈希值是其他共识节点根据其执行至少一个交易任务的结果和至少一个交易任务确定的。
其中,S304的描述可以参见S104,此处不再赘述。
S305:响应于第二哈希值与至少半数的第三哈希值相同,生成并上链包含第一哈希值的区块。
其中,S305的描述可以参见S105,此处不再赘述。
S306:响应于少于半数的第三哈希值与第二哈希值相同,生成并向对象反馈共识失败的反馈信息。
其中,S306的描述可以参见S206,此处不再赘述。
S307:响应于少于半数的第三哈希值与第二哈希值相同,对至少一个交易任务进行回滚。
基于上述示例,若提议节点A的第二哈希值与其他两个共识节点(可能是共识节点B和共识节点C,也可能是共识节点B和共识节点D,也可能是共识节点C和共识节点D)广播的两个第三哈希值不相同,或者,提议节点A的第二哈希值与其他三个共识节点广播(共识节点B、共识节点C和共识节点D)的三个第三哈希值均不相同时,则提议节点A进行回滚,以便执行下个交易请求中的交易任务,并可对第二哈希值进行清除处理。
在一些实施例中,在S304之后,该方法还包括:
S3041:获取第三哈希值的总数,并获取与第二哈希值相同的第三哈希值的相同数量。
S3042:判断总数是否大于或等于相同数量的两倍,若是,则生成并上链包含第一哈希值的区块。
例如:统计与第二哈希值相同的第三哈希值的相同数量T1,并统计第三哈希值的总数T2,判断2*T1是否大于或等于T2,若是,则执行生成并上链包含第一哈希值的区块。
基于上述示例,在一些实施例中,若2*T1小于T2,则生成共识失败的反馈信息,并将该反馈信息发送至客户节点。
基于上述示例,在一些实施例中,若2*T1小于T2,则进行回滚,以便共识节点参与下一轮的共识。
根据本公开实施例的另一个方面,本公开实施例提供了一种共识节点。
请参阅图6,图6为本公开实施例的共识节点的示意图。
如图6所示,所述节点包括:
第一接收模块1,用于接收对象发送的交易请求,所述交易请求中携带至少一个交易任务;
计算模块2,用于计算共识节点执行所述至少一个交易任务的第一哈希值;
确定模块3,用于根据所述第一哈希值和所述至少一个交易任务确定第二哈希值;
第二接收模块4,用于接收其他共识节点广播的第三哈希值,其中,所述第三哈希值是所述其他共识节点根据其执行所述至少一个交易任务的结果和所述至少一个交易任务确定的;
第一生成模块5,用于响应于所述第二哈希值与至少半数的所述第三哈希值相同,生成包含所述第一哈希值的区块;
上链模块6,用于对包含所述第一哈希值的区块进行上链。
结合图7可知,在一些实施例中,所述共识节点还包括:
第二生成模块7,用于响应于少于半数的所述第三哈希值与所述第二哈希值相同,生成共识失败的反馈信息;
反馈模块8,用于向所述对象反馈所述反馈信息。
结合图8可知,在一些实施例中,所述共识节点还包括:
回滚模块9,用于响应于少于半数的所述第三哈希值与所述第二哈希值相同,对所述至少一个交易任务进行回滚。
结合图9可知,在一些实施例中,所述共识节点还包括:
获取模块10,用于获取所述第三哈希值的总数,并获取与所述第二哈希值相同的所述第三哈希值的相同数量;
判断模块11,用于判断所述总数是否大于或等于所述相同数量的两倍;
所述第一生成模块5用于,若所述总数大于或等于所述相同数量的两倍,则执行所述生成包含所述第一哈希值的区块。
根据本公开实施例的另一个方面,本公开实施例还提供了一种电子设备,包括:存储器,处理器;
存储器用于存储处理器可执行指令的存储器;
其中,当执行存储器中的指令时,处理器被配置为实现如上任一实施例所述的方法。
请参阅图10,图10为本公开实施例的电子设备的结构示意图。
如图10所示,该电子设备包括存储器和处理器,该电子设备还可以包括通信接口和总线,其中,处理器、通信接口和存储器通过总线连接;处理器用于执行存储器中存储的可执行模块,例如计算机程序。
其中,存储器可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。
其中,存储器用于存储程序,处理器在接收到执行指令后,执行程序,前述本公开实施例任一实施例揭示的方法可以应用于处理器中,或者由处理器实现。
处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。结合本公开实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
根据本公开实施例的另一个方面,本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上任一实施例所述的方法。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本公开的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本公开实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
还应理解,在本公开各实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。