发明内容
本申请提供了一种区块链的共识方法、装置、设备及存储介质,目的在于解决共识算法消耗的资源较多的问题。
为了实现上述目的,本申请提供了以下技术方案:
一种区块链的共识方法,包括:
目标竞选节点对出块周期进行投票,所述目标竞选节点投入的票数不大于当前投票周期为所述目标竞选节点分配的总票数;所述目标竞选节点为竞选节点中的任意一个节点;
所述目标竞选节点通过对比所述竞选节点在所述出块周期中投入的票数,从所述竞选节点中选择所述出块周期中的出块节点。
可选的,所述当前投票周期为所述目标竞选节点分配的总票数,依据所述目标竞选节点的在线时长和/或贡献程度确定。
可选的,所述目标竞选节点对比任意一个所述竞选节点在任意一个所述目标出块周期中投入的票数的过程,包括:
所述目标竞选节点获取第一密文和第二密文,所述第一密文为使用所述目标竞选节点在目标出块周期中投入的票数以及随机数运算、并加密得到,所述第二密文为使用第一竞选节点在所述目标出块周期中投入的票数以及所述随机数运算、并加密得到;所述第一竞选节点为任意一个所述竞选节点;所述目标出块周期为任意一个所述出块周期;
所述目标竞选节点对比第一数值和第二数值,得到对比结果,所述第一数值为所述第一密文解密得到的数值,所述第二数值为所述第二密文解密得到的数值。
可选的,所述目标竞选节点为发起节点,所述发起节点为竞选节点序列中的第一个节点,所述竞选节点序列依据所述竞选节点中加入区块链网络的时间,对所述竞选节点进行排序得到;
所述目标竞选节点对比所述竞选节点在所述出块周期中投入的票数,包括:
所述目标竞选节点通过与所述竞选节点序列中的第二个竞选节点的对比生成胜出节点,触发对比流程,在所述对比流程中,每一轮参与对比的胜出节点与所述竞选节点序列中未参与对比,且排序最靠前的竞选节点进行对比,产生下一轮参与对比的胜出节点,直至所述竞选节点全部参与对比。
可选的,所述目标竞选节点通过对比所述竞选节点在所述出块周期中投入的票数,确定所述出块周期中的出块节点,包括:
所述目标竞选节点在所述当前投票周期中的第一个出块周期,触发对比所述竞选节点在所述出块周期中投入的票数的流程,并确定各个所述出块周期的出块节点。
可选的,还包括以下至少一项:
如果所述当前投票周期中产出的块的数量小于预设数量,则所述目标竞选节点重新确定所述当前投票周期的出块节点;
如果所述目标出块周期的出块节点未在所述目标出块周期中出块,所述目标竞选节点禁止所述出块节点在预设时长内竞选所述出块节点。
可选的,还包括:
所述目标竞选节点获取创世块发布的所述投票周期的时长和所述出块周期的时长。
一种区块链的共识装置,包括:
投票单元,用于对出块周期进行投票,所述目标竞选节点投入的票数不大于当前投票周期为所述目标竞选节点分配的总票数;所述目标竞选节点为竞选节点中的任意一个节点;
出块节点确定单元,用于通过对比所述竞选节点在所述出块周期中投入的票数,从所述竞选节点中选择所述出块周期中的出块节点。
一种区块链的共识设备,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现上述的区块链的共识方法的各个步骤。
一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上所述的区块链的共识方法的各个步骤。
本申请所述的区块链的共识方法、装置、设备及存储介质,任意一个竞选节点对出块周期进行投票,并通过与其它竞选节点对比在出块周期中投入的票数,将在目标出块周期中投入的票数满足预设条件的竞选节点,作为目标出块周期的出块节点,可见,使用投票确定出块节点,因为票数仅需简单统计和比对,而无需再进行工作量证明等相比票数统计和对比较为复杂的计算,所以,能够减少对于资源的占用量,并且,因为目标竞选节点投入的票数不大于当前投票周期为所述目标竞选节点分配的总票数,所以能够满足共识算法的公平性和准确性的需求。
具体实施方式
通常,在竞选出块节点的过程中,区块链中的任意一个节点均可参与竞争,并且,区块链中的任意一个节点均可参与确定出块节点的共识过程。在以下流程中,以任意一个参与确定出块节点的共识过程的节点为执行主体,进行说明。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例公开的一种区块链的共识方法,包括以下步骤:
S101:目标竞选节点对出块周期进行投票。
其中,目标竞选节点为竞选节点中的任意一个节点。竞选节点为参与出块节点竞争的节点。
出块周期包含在投票周期中。本实施例中,按照出块流程,预先划分投票周期和出块周期,一个投票周期所包含的出块周期的数量n以及一个出块周期的时间t可按需配置。节点可以依据本地时间和NTP服务时间,校验各个出块周期。可选的,投票周期的时长和出块周期的时长,可以由创世块发布至所有节点,即目标竞选节点获取创世块发布的投票周期的时长和出块周期的时长。
可续的,可以预先为各个节点在当前投票周期分配相同数量的票。
或者,为了促进各节点对于区块链的建设,也可以依据节点的在线时长和/或贡献程度,确定在当前投票周期为各节点分配的票数。具体的,对于任意一个节点而言,在线时长越长,分配的票数越多,贡献越大,分配的票数越多。具体的分配算法,可以参见现有技术,这里不再赘述。
目标竞选节点可以为任意一个出块周期投票,且投入任意一个出块周期的票数,不大于当前投票周期为目标竞选节点分配的总票数。投入的全部出块周期的票数,不大于当前投票周期为目标竞选节点分配的总票数。
S102:目标竞选节点通过对比竞选节点在出块周期中投入的票数,从竞选节点中选择出块周期中的出块节点。
在本申请的实施例中,将一个投票周期中的任意一个出块周期称为目标出块周期为。可选的,可以将在目标出块周期中投票数量最多的竞选节点,作为目标出块周期的出块节点,或者,将在目标出块周期中投票数量排名前n位的竞选节点,作为目标出块周期的出块节点,n为大于或等于1的整数。
从图1所示的流程可以看出,本实施例所述的区块链的共识方法,使用投票的方式确定出块节点,与现有的其它共识方法(如工作量证明)相比,因为票数仅需简单统计和比对,而无需再进行复杂的计算,所以,占用的资源较少。并且,对于出块周期投票数的限定,保证了共识的准确性和公平性。
进一步的,为了保证竞选节点的隐私,可以采用安全多方计算技术实现投票数的对比,任意两个竞选节点之间的票数对比过程如图2所示,包括以下步骤:
S201:目标竞选节点获取第一密文和第二密文。
其中,第一密文为使用目标竞选节点在目标出块周期中投入的票数以及随机数运算、并加密得到。第二密文为使用第一竞选节点(即除目标竞选节点外的任意一个其它竞选节点)在目标出块周期中投入的票数以及随机数运算、并加密得到。
假设目标竞选节点在目标出块周期中投入的票数为a,第一竞选节点在目标出块周期中投入的票数为b,第一密文和第二密文生成的具体过程如下:
A1:第一竞选节点生成两个随机正整数x和y,但是并不公开。
为了保证不会通过密文破解票数,可选的,随机数可以选择原大于可能的票数的数值。
A2:目标竞选节点生成一对非对称密钥,用公钥加密目标竞选节点的投票数a,得到E(a),并将E(a)和公钥一起公布。
A3:第一竞选节点得到目标竞选节点公布的数据后,首先用目标竞选节点的公钥计算出E(bx+y),然后用Paillier算法的同态属性计算出E(ax+y)=E(a)*E(y),并将这两个结果也公布出去。
当然,上述步骤的执行主体可以互换,这里不做限定,例如,由目标竞选节点生成随机数,由第一竞选节点生成非对称密钥,并加密自身的投票数b等。
S202:目标竞选节点得到第一竞选节点公布的数据后,解密得到第一数值和第二数值。
接上例,目标竞选节点用非对称密钥中的私钥分别反解出第一数值A=ax+y和第二数值B=bx+y。
S203:目标竞选节点对比A=ax+y和B=bx+y的大小,得到对比结果。
可见,目标竞选节点虽然对x,y和b一无所知,但只要比较A和B的大小,即可得到票数的对比结果。因此,具有较高的安全性。
需要说明的是,第一竞选节点也可以获取第一密文和第二密文,并解密得到第一数值和第二数值,通过对比第一数值和第二数值,得到对比结果。
可选的,获取第一密文和第二密文的节点,可以将第一密文和第二密文均存储到区块链中,以防投票过程中作弊的行为。
图2所示的投票数的对比方法,无需公开竞选节点的投票数,从而能够避免竞选节点的隐私信息的泄露。
图3为本申请实施例公开的又一种区块链的共识方法,在本实施例中,重点说明步骤的执行时序。
图3中包括以下步骤:
S301:目标竞选节点获取竞选节点的标识。
其中,各个竞选节点的标识与竞选节点加入区块链的时间正相关,即加入的时间越早,标识越小。
本实施例中,假设目标竞选节点为标识最小的节点。标识最小的节点作为投票的发起者执行以下步骤:
S302:目标竞选节点在当前投票周期的第一个出块周期,触发对比所有竞选节点在各个出块周期中投入的票数的流程,并确定各个出块周期的出块节点。
具体的,目标竞选节点对比第一个出块周期中,目标竞选节点与第二竞选节点的投票数,得到票数较多的节点,作为参考节点。其中,第二竞选节点为节点序列中,目标节点之后的后一个节点。节点序列由所有竞选节点按照标识从小到大的顺序排序得到。
得到参考节点的步骤,可以看作对于对比所有竞选节点在各个出块周期中投入的票数的流程的触发步骤。
得到参考节点后,第二竞选节点在节点序列中的后一个节点(简称为当前节点),通过对比参考节点与当前节点在第一个出块周期中的投票数,得到票数较多的节点,作为参考节点。
以此类推,直至按照节点序列中的排序,对比完所有的竞选节点,得到第一个出块周期中的出块节点。例如,可以将投票数最多的竞选节点,作为出块节点。
以此类推,直至得到当前竞选周期中的所有出块周期中的出块节点。
从图3所示的流程可以看出,竞选节点在当前投票周期的第一个出块周期完成各个出块周期的出块节点的选举,因此能够以较小的算法代价(即无需复杂算法)保证出块的连续性。并且,竞选节点按照上述顺序和规则对比投票结果,能够提高对比的效率。
需要说明的是,图3中,以按照标识从小到大的顺序进行排序,可选的,还可以按照标识从大到小的顺序排序得到竞选节点序列,这里不做限定。无论使用哪种排序方法,本实施例中,都将竞选节点序列中的第一个节点作为发起节点。可选的,也可以,标识与加入区块链的时间反相关,本实施例也不做限定。
进一步的,在确定出出块节点后,所有出块节点在相应的出块周期出块。
目标竞选节点还可以执行如下步骤:
S303:如果投票周期中产出的块的数量小于预设数量,则目标竞选节点重新确定当前投票周期的出块节点。
S304:如果目标出块周期的出块节点未在目标出块周期中出块,目标竞选节点禁止出块节点在预设时长内竞选出块节点。
其中,预设时长可以为预设数量的投票周期。
S305:如果出块节点提供的区块不满足预设条件,目标竞选节点发出不合法提示。
其中,预设条件包括:区块的输入为其它区块的输出,并且,区块的输出作为其它区块的输入。
S303-S305,能够保证竞选节点对于区块的合法性和节点的合法性达成共识,有利于提高区块链的安全性。
图4为本申请实施例公开的一种区块链的共识装置,包括:
投票单元401,用于对出块周期进行投票,目标竞选节点投入的票数不大于当前投票周期为目标竞选节点分配的总票数;目标竞选节点为竞选节点中的任意一个节点;
出块节点确定单元402,用于通过对比所述竞选节点在所述出块周期中投入的票数,确定所述出块周期中的出块节点。
可选地,当前投票周期为所述目标竞选节点分配的总票数,依据所述目标竞选节点的在线时长和/或贡献程度确定。
可选地,出块节点确定单元用于对比任意一个其它竞选节点在所述任意一个出块周期中投入的票数,包括:所述出块节点确定单元具体用于:
获取第一密文和第二密文,所述第一密文为使用所述目标竞选节点在目标出块周期中投入的票数以及随机数运算、并加密得到,所述第二密文为使用第一竞选节点在所述目标出块周期中投入的票数以及所述随机数运算、并加密得到;所述第一竞选节点为任意一个所述竞选节点;所述目标出块周期为任意一个所述出块周期;
对比第一数值和第二数值,得到对比结果,所述第一数值为所述第一密文解密得到的数值,所述第二数值为所述第二密文解密得到的数值。
可选地,目标竞选节点为发起节点,所述发起节点为竞选节点序列中的第一个节点,所述竞选节点序列依据所述竞选节点中加入区块链网络的时间,对所述竞选节点进行排序得到;
出块节点确定单元对比所述竞选节点在所述出块周期中投入的票数,包括:通过与所述竞选节点序列中的第二个竞选节点的对比生成胜出节点,触发对比流程,在所述对比流程中,每一轮参与对比的胜出节点与所述竞选节点序列中未参与对比,且排序最靠前的竞选节点进行对比,产生下一轮参与对比的胜出节点,直至所述竞选节点全部参与对比。
可选地,出块节点确定单元用于通过对比所述竞选节点在所述出块周期中投入的票数,确定所述出块周期中的出块节点,包括:
出块节点确定单元具体用于,在所述当前投票周期中的第一个出块周期,触发对比所述竞选节点在所述出块周期中投入的票数的流程,并确定各个所述出块周期的出块节点。
可选地,本装置还包括以下至少一项:
更新单元,用于在所述当前投票周期中产出的块的数量小于预设数量时,重新确定所述当前投票周期的出块节点;
禁止单元,用于在所述目标出块周期的出块节点未在所述目标出块周期中出块时,禁止所述出块节点在预设时长内竞选出块节点。
可选地,本装置还包括:
时长获取单元,用于获取创世块发布的所述投票周期的时长和所述出块周期的时长。
所述区块链的共识装置能够减小共识对于资源的占用和消耗。
本申请实施例还公开了一种区块链的共识设备,请参阅图5,示出了该区块链的共识设备的结构示意图,该设备可以包括:至少一个处理器501,至少一个通信接口502,至少一个存储器503和至少一个通信总线504;
在本申请实施例中,处理器501、通信接口502、存储器503、通信总线504的数量为至少一个,且处理器501、通信接口502、存储器503通过通信总线504完成相互间的通信;
处理器501可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器503可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:实现上述区块链的共识方法。
本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。