一种用于实现相同权重随机出块的共识算法
技术领域
本发明涉及区块链技术领域,具体涉及一种用于实现相同权重随机出块的共识算法。
背景技术
在一个分布式网络中,保证分布式一致性(所有节点对同一份提案或者数据达成共识)是最核心最重要的问题。由于分布式网络中拥有众多节点,网络中不可避免的通信延迟,节点可能出现宕机、故障、失效等等复杂情况;而对于区块链网络来说,即要考虑这些因素,还要做到可以抵御一定数量作恶节点的攻击,同时要做到最大程度的去中心化。
在比特币系统中,采用了工作量证明机制(Proof of Work),整个系统中每个节点通过算力竞争机制,让率先完成计算问题的节点进行记账工作。到目前为止,POW算法是唯一经过大量用户长时间使用考验的共识算法。
POW算法的原意是希望每个比特币节点都能够参与整个系统的决策机制。然而随着GPU挖矿、到FPGA、再到ASIC挖矿,集中算力的矿池已经完全背离最大限度的民主和去中心化,很多矿工完全不了解比特币的生态,却掌控着比特币的发展方向。另外,工作量证明耗费了大量的电力,这些电力事实上完全浪费了,没有产生任何社会产品。
发明内容
本发明的目的是提供一种用于实现相同权重随机出块的共识算法,用于解决目前的共识算法中存在的算力集中的问题。
本发明的一个实施例提供了一种用于实现相同权重随机出块的共识算法,包括如下步骤:
1)节点用户获得区块链上的唯一有效的主地址钥匙对,并注册成为区块链上的有效矿工;
2)区块链上所有节点用户通过链上身份的签名产生前向相关的伪随机数,挑选出矿工进行出块。
本发明提供的用于实现相同权重随机出块的共识算法,具有如下优点:
1.可以减低矿池的算力集中程度,降低电力资源浪费;
2.提升整个区块链系统的出块速度。
附图说明
图1所示为本发明的用于实现相同权重随机出块的共识算法的一个实施例的流程图。
图2所示为本发明的节点用户获得区块链上的唯一有效的主地址钥匙对的过程的一个实施例的流程图。
图3所示为本发明的节点用户注册成为区块链上的有效矿工的过程的一个实施例的流程图。
图4所示为本发明的区块链上所有节点用户挑选矿工进行出块的过程的一个实施例的流程图。
图5所示为本发明的伪随机数产生过程的一个实施例的示意图。
图6所示为本发明的处理一般分叉情况的一个实施例的示意图。
图7所示为本发明的矿工列表调整的一个实施例的示意图。
图8所示为本发明的矿工列表调整的一个实施例的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。
在本发明的描述中,认证中心(CA─Certificate Authority)作为权威的、可信赖的、公正的第三方机构,专门负责发放并管理所有参与链上交易的实体所需的数字证书。它作为一个权威机构,对密钥进行有效地管理,颁发证书证明密钥的有效性,并将公开密钥同某一个实体(消费者、商户、银行)联系在一起。它负责产生、分配并管理所有参与网上信息交换各方所需的数字证书,因此是安全电子信息交换的核心。
参考图1,在本发明的一个实施例中,用于实现相同权重随机出块的共识算法包括如下步骤:
100:节点用户获得区块链上的唯一有效的主地址钥匙对,并注册成为区块链上的有效矿工。
参考图2,在本发明的一个实施例中,节点用户获得区块链上的唯一有效的主地址钥匙对的过程为进一步包括步骤101~108:
101:节点用户从CA机构获取真实身份验证证书,身份验证证书包含节点用户个人信息和身份验证证书的证书公钥和证书私钥信息;
102:节点用户随机产生用户公钥和用户私钥,并以用户公钥为发送地址向整个区块链第一次广播,广播数据包包含如下信息:身份验证证书,证书私钥对广播数据包的签名;
103:区块链委员会接收节点用户第一次广播数据包,并验证证书私钥对数据包的签名是否由身份验证证书和用户私钥产生,以及身份验证证书是否由CA颁发;如果验证结果为真,则进行步骤104的操作,如果验证结果为假,则不进行操作;
104:区块链委员会向整个区块链第一次广播,委员会第一次广播数据包包含如下信息:节点用户的一次性地址公匙和委员会公匙;
105:节点用户随机产生临时公匙和临时私匙,并用临时公钥、用户公钥和委员会公匙生成主地址公匙,用临时私钥、用户私钥和委员会公匙生成主地址私匙;
106:节点用户用主地址公匙为发送地址向整个区块链第二次广播,节点用户第二次广播数据包包含如下信息:节点用户的临时公钥、节点用户的一次性地址公钥、一个或多个链上其他用户的一次性地址公钥,以及一次性地址公钥集合对数据包的环签名;
107:区块链委员会接收到用户第二次广播数据包后,校验广播数据包内的环签名是否有效,校验广播数据包内的公钥集合内所有公钥是否为一次性地址公钥,校验公钥集合内是否包含主地址对应的一次性地址公钥;如果验证结果为真,则进行步骤108的操作,如果验证结果为假,则不进行操作;
108:区块链委员会验证通过后,通过多重签名的方式在身份验证合约中修改主账户为已通过验证,并用委员会地址公匙为发送地址向整个区块链第二次广播,委员会第二次广播数据包包含如下信息:经过多重签名的节点用户的主地址公匙。
参考图3,在本发明的一个实施例中,节点用户注册成为区块链上的有效矿工的过程为进一步包括步骤109~111:
109:所节点用户获得签名主地址公钥后,用签名主地址公钥为发送地址向链上矿工注册管理机构发送矿工注册信息,矿工注册信息包含如下信息:节点用户的主地址私钥的签名信息;
110:矿工注册管理机构接收到节点用户的矿工注册信息后,校验矿工注册信息的签名信息是否有效,节点用户的签名主地址公钥是否为有效的签名主地址公钥;
111:矿工注册管理机构向整个区块链广播注册成功数据包,注册成功数据包包含如下信息:节点用户为有效的矿工、节点用户序号。
参考图4,在本发明的一个实施例中,区块链上所有节点用户挑选矿工进行出块的过程进一步包括步骤201~201:
201:所有节点用户获取区块链上当前最新区块的信息,包括:当前最新区块的矿工公钥、区块高度和当前最新区块出块矿工对当前最新区块的出块签名,当前最新区块的出块签名为当前最新区块出块矿工的私钥对当前最新区块原始出块随机数的签名;
202:所有节点用户计算得到一个原始出块随机数,所有节点用户用区块链上的矿工总数进行取模,得到的余数为地址匹配随机数,区块链上矿工的序号与地址匹配随机数相同的矿工成为匹配矿工;
203:匹配矿工用其私钥对原始出块随机数进行签名,并出当前块,并向全网进行出块广播,当前块包含如下信息:当前块的出块矿工的公钥、当前块的高度和匹配矿工用其私钥对原始出块随机数的签名。
在本发明的一个实施例中,区块链上所有节点用户得到原始出块随机数的计算方法为:
对所述当前最新区块的矿工公钥、区块高度和所述当前最新区块出块矿工对所述当前最新区块的出块签名进行拼接,得到拼接字符串,然后对所述拼接字符串进行哈希运算。
在本发明的一个实施例中,当链上所有节点用户在单个块的出块周期结束后,未发现当前块的出块矿工出块,则所有节点用户重新计算出新的原始出块随机数,进行当前块的出块矿工的挑选,并在等待1个或多个出块周期后,由新出块矿工进行出块。
在本发明的一个实施例中,新的原始出块随机数的计算方法为:
对原始出块随机数、单个或多个出块周期的时间值和当前最新区块出块矿工的私钥对当前最新区块原始出块随机数的签名进行拼接,得到新的拼接字符串;然后对新的拼接字符串进行哈希运算。
参考图5,在本发明的一个实施例中,可以设置r代表区块高度,Qr为第r个区块的特殊数据,计算公式为:
Qr=Hash(Coinbaser-1||r-1||Sigr-1)
其中Coinbaser-1为r-1区块的矿工地址,Sigr-1为r-1区块矿工用自己的私钥Skr-1对Qr-1进行签名产生的签名数据。
当区块r-1被打包广播至全网时,所有的矿工计算得到当前区块的Qr值,假使所以的矿工都是在一个有序的集合中且具有连续各不相同的ID信息,总数为N。通过公式
ID_Targetr=Qr mod N
算出本轮获得出块权的矿工ID_Targetr,由此ID的矿工进行本轮的出块。考虑此ID的矿工不在线或者网络延时导致的数据延迟,在等待nλ时间后,IDnλ(考虑同谋在连续ID上收益变少,改为)的矿工可以有权利出块。其中
IDnλ=hash(ID_Targetr||nλ||Sigr-1)
同时,如果不是ID_Targetr矿工出块,而是由IDnλ的矿工出块的话,在其后续链上,会随机挑选部分矿工暂时不能加入挖矿。
如果所有的矿工节点都保持100%在线,且网络延时足够小,那么可以看到网络中并不会产生分叉。可惜,这种理想情况在现实中并不会出现,整个网络中还是出现分叉的情况。
当高度r的区块进行出块时,出块矿工应该是ID_Targetr=Qr mod N,可惜ID_Targetr矿工的由于网络延时或者恶意保留区块导致全网未能及时感知区块,在等待λ时间段之后,由
IDλ=hash(ID||λ||Sigr-1)的矿工将会出块,此时网络中便有可能面临2条分叉。
因此,参考图6~图8,在本发明的一个实施例中,解决分叉问题的一个具体方法为:
如图6所示,当每一轮出块时,等待一个出块时间片block_interval+nλ(n=1,2,3,…)后,每个节点检测自己是不是备用出块者,根据公式
IDnλ=hash(ID_Targetr||nλ||Sigr-1)
如图7所示,如果满足公式,备用节点进行出块,同时其后继区块需要调整矿工列表,IDλ矿工出块后,其后续区块中以Sigr为随机数种子随机挑选个矿工放弃一轮出块权。这样在下一轮出块时,如果ID_Target落在了矿工区域内,那就继续等待nλ时间,选择备用出块者。
另外对于备用出块者,根据n取值的不同,矿工屏蔽的比例也会作出相应的调整,允许出块的矿工数量公式为
如图8所示,可以看到在不是匹配ID_Target出块的链上,出块将会额外的浪费很多等待的时间,在相同的时间周期,匹配ID_Target出块的链将会是最长的链。
在本发明的一个实施例中,生成主地址公匙和主地址私匙的算法为:椭圆曲线Elliptic-curve Diffie–Hellman(ECDH)算法。
在本发明的一个实施例中,利用椭圆曲线Elliptic-curve Diffie–Hellman(ECDH)算法生成主地址公匙和主地址私匙的算法具体如下:
假设所述用户一次性地址的公钥为A,私钥为a,临时公私钥对为(S,s),区块链委员会地址公钥为B,主地址公钥为A1,主地址私钥a1;
则主地址公钥A1的计算公式为:
A1=[Hash([a]B)]G+S (1)
主地址私钥a1的计算公式为:
a1=Hash([a]B)+s (2)
所述公式中Hash()为公开通用的哈希算法,G为椭圆曲线上的基点。
在本发明的一个实施例中,区块链委员会对所述节点用户的一次性地址公钥和主地址公钥的对应关系进行验证,验证公式为:
A1=[Hash([a]B)]G+S=[Hash([b]A)]G+S (3)
公式(3)中Hash()为公开通用的哈希算法,G为椭圆曲线上的基点。
虽然以上述较佳的实施例对本发明做出了详细的描述,但并非用上述实施例限定本发明。本领域的技术人员应当意识到在不脱离本发明技术方案所给出的技术特征和范围的情况下,对技术特征所作的增加、以本领域一些同样内容的替换,均应属本发明的保护范围。