发明内容
申请人在研究的过程中发现,目前使用的共识算法,完全依赖区块链内部的参数,一旦区块链的安全防护被攻破,共识算法很有可能成为被操控的对象。
本申请提供了一种区块链的共识方法、装置、设备及存储介质,目的在于解决如何提高共识算法的安全性的问题。
为了实现上述目的,本申请提供了以下技术方案:
一种区块链的共识方法,包括:
获取竞选节点的竞选请求,所述竞选请求包括外部随机变量的值,所述外部随机变量为区块链外部产生的随机变量,所述外部随机变量的值由所述竞选节点确定;
至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点。
可选的,所述获取竞选节点的竞选请求,包括:
获取所述竞选节点在当前竞选周期中的第N-(N/M)*P个区块产生之前,发出的竞选请求,其中,N为任意一个竞选周期中需竞选的区块的数量,M为任意一个竞选周期中选出的出块节点的个数,P为[2,M)范围内的整数。
可选的,所述至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点,包括:
至少依据所述外部随机变量的值和所述外部随机变量的真实值,确定所述竞选节点的排序;
基于所述排序,从所述竞选节点中选择所述出块节点。
可选的,所述竞选请求还包括:
质押的数字货币的数量和发送所述竞选请求的时间戳中的至少一项;
所述至少依据所述外部随机变量的值和所述外部随机变量的真实值,确定所述竞选节点的排序,包括:
按照所述竞选请求中的所述外部随机变量的值与所述真实值之间的差距,对所述竞选节点进行排序;
按照第一排序依据,确定所述差距相同的竞选节点的排序;
按照第二排序依据,确定所述差距和所述数字货币的数量均相同的竞选节点的排序,其中,所述第一排序依据为所述数字货币的数量或者所述时间戳,所述第二排序依据为所述时间戳或者所述数字货币的数量。
可选的,所述真实值的获取方法包括:
在所述当前竞选周期中的第N-(N/M)*Q个区块产生时,获取所述真实值,其中,N为所述任意一个竞选周期中需竞选的区块的数量,M为任意一个竞选周期中选出的出块节点的个数,Q为[1,P)范围内的整数,P为[2,M)范围内的整数。
可选的,还包括:
如果没有获取到所述真实值,则禁止所述竞选节点出块。
可选的,所述外部随机变量的确定过程包括:
将所述区块链中的节点投票产生的所述外部随机变量,作为至少一个竞选周期的所述外部随机变量。
可选的,所述外部随机变量满足预设条件,所述预设条件包括以下至少一项:
在所述确定出块节点之前,不可获知真实值;
不可操控;
变化的频率高于出块的频率。
一种区块链的共识装置,包括:
请求获取单元,用于获取竞选节点的竞选请求,所述竞选请求包括外部随机变量的值,所述外部随机变量为区块链外部产生的随机变量,所述外部随机变量的值由所述竞选节点确定;
出块节点选择单元,用于至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点。
一种区块链的共识设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现上述的区块链的共识方法的各个步骤。
一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述的区块链的共识方法的各个步骤。
本申请所述的区块链的共识方法、装置、设备及存储介质,获取竞选节点的竞选请求,竞选请求包括外部随机变量的值,至少依据外部随机变量的值和外部变量的真实值,从竞选节点中选择出块节点。因为外部随机变量为随机产生的变量,所以,能够满足共识算法的公平性需求。因为外部随机变量为区块链外部产生的随机变量,不受区块链内部变化的控制,因此,引入外部随机变量的共识算法,具有更高的安全性。
具体实施方式
区块链共识算法的目的至少在于,在区块链中的节点竞争出块的过程中,从竞选节点中选择出块节点。
通常,区块链中的节点均可以竞争成为出块节点,并且,由区块链中的至少半数以上的节点参与共识,以选择出块节点。因此,在以下实施例中,流程的执行主体均为区块链中的任意一个节点,至少半数以上节点执行以下共识流程后,就出块节点的选择达成共识。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例公开的一种区块链的共识方法,包括以下步骤:
S101:获取竞选节点的竞选请求。
其中,竞选请求包括外部随机变量的值。外部随机变量为区块链外部产生的随机变量,其不受区块链内部变化的影响。
可选的,本实施例中,外部随机变量为满足以下条件的随机变量:
1、不可提前获知真实值。即随机变量的值为与随机事件的发生相关的数值,在随机事件发生之前,不可能提前获知真实值。结合图1所示的流程,即在确定出块节点之前,不可获知真实值。
2、不可操作。不可操作是指理论上无法操作,或者操控成本远大于出块的获利。
3、变化的频率高于出块的频率。
以上条件能够使得外部随机变量具有客观性和公平性,从而保证共识算法的公平性。
基于以上条件,外部随机变量的一个示例为某机场在当前时刻之前的,最后一架航班落地的时间。外部随机变量的另一个示例为,股指收盘数或特定时间(每小时、每半小时、每十分钟等)的股指数。
可选的,因为单一随机变量的健壮性通常弱于多随机变量的健壮性,所以,为了增加外部随机变量的不可预测性,从而进一步提高共识算法的公平性,可以使用多个外部随机变量。
具体的,可以将一组不相关的外部随机变量进行组合,通常来说,若能保证n个随机变量的不相关性,那么一个由n个元素构成的随机变量组的健壮性以及攻击难度,是单一随机变量的n倍。
例如,将一架航班的落地时间,扩展为n架不相关的航班的落地时间,又例如,将一架航班的落地时间,扩展为一架航班的落地时间和当日股指收盘数。又例如,外部随机变量为「某航班降落时间,某某股票收盘价,某地3点温度…」。
需要说明的是,区块链中任意一个欲参与出块竞选的节点,均可以发送竞选请求,也可以接收其它竞选节点发送的竞选请求。任意一个竞选节点发出的竞选请求中的外部随机变量的值,为该竞选节点预测的值,即该竞选节点可以使用预设的算法,预测出外部随机变量的值。也可以,是从其它设备获取的值,或者,从其它设备获取的值中选择的一个值。总而言之,任意一个竞选节点发出的竞选请求中的外部随机变量的值,为该竞选节点确定的值。
S102:至少依据外部随机变量的值和外部变量的真实值,从竞选节点中选择出块节点。
可选的,任意一个竞选请求中的外部随机变量的值与真实值越接近,该竞选节点成为出块节点的可能性越高。或者,任意一个竞选请求中的外部随机变量的值与真实值的差异越大,该竞选节点成为出块节点的可能性越高。或者,也可以通过使用以外部随机变量的值与真实值为依据的其它规则(例如两者的比值),选择出块节点,本实施例不做限定。
可选的,真实值可以由第三方提供。
从图1所示的流程可以看出,在出块节点的竞选过程中,引入外部随机变量,首先外部随机变量的随机性,能够满足共识算法的公平性需求,更为重要的是,因为外部随机变量不受区块链内部变化的影响,所以即使区块链的安全防护被攻破,完全操控本实施例所述的共识方法的难度也高于现有的共识算法,从而使得共识机制具有更高的安全性。
除了外部随机变量之外,选择出块节点的依据还可以包括其它参数。图2为本申请实施例公开的又一种区块链的共识方法,包括以下步骤:
S201:获取竞选节点的竞选请求,竞选请求包括外部随机变量的值、质押的数字货币的数量、以及竞选请求的时间戳。
为了保证被选中的出块节点再后续真正提供区块,本实施例中,要求参与竞选出块的节点,即竞选节点质押数字货币,且质押的数字货币不再返还。
可选的,除了以上参数外,竞选请求还可以包括其它参数。具体的,如表1所示:
表1
表1中,Round代表参与的竞选的轮次,将在图3所示的流程中详细对轮次进行说明。Topic表示外部随机变量的名称,value表示外部随机变量的值。
表2为使用多个不相关的外部随机变量的竞选请求的示例:
表2
S202:按照竞选请求中的外部随机变量的值与真实值之间的差距从小到大的顺序,对竞选节点进行排序。
本步骤中,对于差距相同的竞选节点,暂定排序并列。
可选的,对于多个外部随机变量的情况,可以按照以下规则,计算外部变量的值与真实值之间的差距:
将n个外部随机变量的值与对应的真实值之间的差距中的最小值,作为外部变量的值与真实值之间的差距。例如,对于表2所示的情况,外部变量的值与真实值之间的差距=min(sum(real_flighti_time)-sum(guess_flighti_time)),i=1、2、……n。n为航班的数量。其中,real_flighti_time为第i个外部随机变量的真实值,guess_flighti_time为第i个外部随机变量的值。
S203:在差距相同的情况下,数字货币的数量越多,排序越靠前。
在本步骤中,对于差距和数字货币的数量相同的竞选节点,暂定排序并列。
S204:在差距和数字货币的数量均相同的情况下,时间戳越早,排序越靠前。
可选的,在出块节点出块成功后,可以按照数字货币的数量,分配酬金。
S205:将排序中的前预设数量的竞选节点,作为出块节点。
从图2所示的流程可以看出,可以使用外部随机变量与其它参数一同确定出块节点,有利于进一步提高共识算法的公平性和安全性。并且,竞选请求的数字货币质押,解决了恶意攻击者穷举攻击的问题。
需要说明的是,图2中,以差距从小到大、数字货币的数量从小到大、以及时间戳从先到后的规则进行排序,除此之外,还可以使用规则进行排序,例如,按照差距、数字货币的数量中的至少一项从大到小排序,和/或时间戳从后到先进行排序,又例如,在按照差距排序之后,先按照时间戳排序,再按照数字货币的数量排序。即本实施例中,不对排序规则进行限定。
图3为本申请实施例公开的又一种区块链的共识方法,在本实施例中,规定了共识步骤的时序性,假设将N个区块的出块节点的竞选和出块作为一个轮次(即竞选周期),即在一个竞选周期内,需要完成选择N个块的出块节点以及由出块节点提供N个块的过程。
图3中包括任意一个竞选周期(以下简称为当前竞选周期)中的步骤:
S301:获取竞选节点在当前竞选周期中的第N-(N/M)*P个块产生之前,发出的竞选请求。
其中,N为一个预设的竞选周期中需竞选的区块的数量,M为一个竞选周期中选出的出块节点的个数,P为[2,M)范围内的整数。因此,在当前以及下一个竞选周期中需竞选的区块的数量均为N,在当前以及下一个竞选周期中选出的出块节点的个数均为M。
该步骤的目的在于,确保在当前竞选周期中,各个出块节点出块结束后,即开始下一竞选周期的出块过程。也就是说,相邻的前后两个竞选周期有重叠,在前一个竞选周期的出块过程中的某个时刻点之前,要完成下一个竞选周期的出块节点的竞选请求的收集过程,从而保证当前竞选周期的出块结束后,下一个竞选周期已经完成出块节点的选择,并开始出块,以保证出块的连续性,提高出块的效率。
因此,申请人在研究的过程中,依据保证出块的连续性需求,通过实验得出在当前竞选周期中的第N-(N/M)*P个块产生之前,收集完毕下一个竞选周期的竞选请求,才能确保当前竞选周期出块结束后,即开始下一个竞选周期的出块,从而保证出块的连续性。其中,P的具体取值,可以依据竞选节点提供一个区块的实际时长确定。
S302:在竞选请求中的轮次为下一个竞选周期的情况下,确定竞选请求有效,执行S303,否则,确定竞选请求无效,可以发出无效提示。前述表1以表2中的Round参与的竞选的轮次,因为当前竞选周期收集的是参与下一个竞选周期的竞选的请求,所以参与下一轮竞选的请求才为有效竞选请求,有可能,竞选节点的网络故障导致竞选请求传输延时,在其它节点接收到竞选请求后,竞选请求中指示的轮次已过或者竞选请求中指示的轮次收集请求的时间区间已过,在此情况下,确定竞选请求无效。
S303:在当前竞选周期中的第N-(N/M)*Q个块产生时,获取外部随机变量的真实值,并依据有效竞选请求中的外部随机变量的值与真实值的差距、数字货币的数量和竞选请求的时间戳,确定竞选节点的排序,将排序中的前M个竞选节点,作为出块节点。
其中,Q为[1,P)范围内的整数。N-(N/M)*Q的设置的目的也为保证出块的连续性。申请人在研究的过程中发现,只有在该时间点获取到真实值,才能保证后续的排序等用于选择出块节点的过程,才能在当前竞选周期出块完成之前完成,从而保证当前竞选周期出块结束后,下一个竞选周期即开始出块。
需要说明的是,如果没有获取到真实值,则禁止下一个竞选周期的所有竞选节点出块,以保证区块链的安全。可选的,为了提高安全性,也可以禁止当前竞选周期的所有竞选节点出块。
S304:在当前竞选周期的下一个竞选周期,出块节点按照排序出块。
可选的,如果当前竞选周期选出的出块节点,没有在下一个竞选周期内出块,则禁止出块节点参与预设时间段内的出块节点的竞选。预设时间段可以为一个或多个竞选周期。
从图3所示的流程可以看出,通过竞选请求的收集时机和出块节点的选择时机的设定,可以保证出块的连续性。并且,竞选请求的收集阶段和竞选阶段分离,保证了竞选请求是在外部随机变量产生前提交。
可选的,以上流程中使用的外部随机变量,可以在流程开始之前,由区块链中的各个节点投票确定。具体的,由创世块等区块提供外部随机变量集合,集合中包括各个外部随机变量的名称,各个节点进行投票,选取出在共识流程中使用的外部随机变量。
可选的,可以每一轮都通过投票产生外部随机变量,也可以一次投票产生的外部随机变量在多轮竞选周期中使用,这里不做限定。
图4为本申请实施例公开的一种区块链的共识装置,包括:
请求获取单元401,用于获取竞选节点的竞选请求,所述竞选请求包括外部随机变量的值,所述外部随机变量为区块链外部产生的随机变量,所述外部随机变量的值由所述竞选节点确定;
出块节点确定单元402,用于至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点。
可选地,请求获取单元401获取竞选节点的竞选请求的具体实现方式为:获取所述竞选节点在当前竞选周期中的第N-(N/M)*P个区块产生之前,发出的竞选请求,其中,N为任意一个竞选周期中需竞选的区块的数量,M为任意一个竞选周期中选出的出块节点的个数,P为[2,M)范围内的整数。
出块节点确定单元402至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点的具体实现方式为:至少依据所述外部随机变量的值和所述外部随机变量的真实值,确定所述竞选节点的排序;基于所述排序,从所述竞选节点中选择所述出块节点。
进一步的,竞选请求还包括:质押的数字货币的数量和发送所述竞选请求的时间戳中的至少一项。在此情况下,出块节点确定单元402至少依据所述外部随机变量的值和所述外部变量的真实值,从所述竞选节点中选择出块节点的具体实现方式为:按照所述竞选请求中的所述外部随机变量的值与所述真实值之间的差距,对所述竞选节点进行排序;按照第一排序依据,确定所述差距相同的竞选节点的排序;按照第二排序依据,确定所述差距和所述数字货币的数量均相同的竞选节点的排序,其中,所述第一排序依据为所述数字货币的数量或者所述时间戳,所述第二排序依据为所述时间戳或者所述数字货币的数量。
进一步的,所述装置还包括:真实值的获取模块,用于在所述当前竞选周期中的第N-(N/M)*Q个区块产生时,获取所述真实值,其中,N为所述任意一个竞选周期中需竞选的区块的数量,M为任意一个竞选周期中选出的出块节点的个数,Q为[1,P)范围内的整数,P为[2,M)范围内的整数。如果没有获取到所述真实值,则禁止所述竞选节点出块。
进一步的,所述装置还包括:外部随机变量确定模块,用于将所述区块链中的节点投票产生的所述外部随机变量,作为至少一个竞选周期的所述外部随机变量。
需要说明的是,所述区块链的共识装置可以设置为可插拔的形式。在初始插入区块链的情况下,可能需要个节点配合升级,并在半数以上的节点升级成功后,即可启用该共识装置。
本申请实施例还公开了一种区块链的共识设备,请参阅图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,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。