本发明专利技术公开了一种基于算力证明的治未病场景下联盟链主节点选举算法。该算法通过算力证明机制和投票选举机制筛选出综合能力较强的节点,节点根据场景需求完成相应难度的计算任务,确保自身能够满足最低算力需求,然后通过请求投票成为主节点,只有获得超过半数节点投票的节点才能够被承认为主节点。该算法通过非对称加密技术和数字签名技术保证在联盟链环境下的网络安全,充分考虑恶意节点的作恶可能性,保障主节点选取的公平有效。该算法可以代替联盟链下实用拜占庭容错算法中原有的基于视图编号的顺序选取主节点方式,提高区块链网络的安全性和稳定性,更好地满足治未病场景下的数据保存需求。下的数据保存需求。下的数据保存需求。
【技术实现步骤摘要】
基于算力证明的治未病场景下联盟链主节点选举算法
[0001]本专利技术涉及区块链
,特别是涉及区块链共识算法。
技术介绍
[0002]在对此方法的研究和实践过程中,本专利技术的专利技术人发现:治未病场景下联盟链的主流共识算法实用拜占庭容错算法在主节点选取方式上存在安全性问题。主节点作为特殊的记账节点,需要承担额外的任务,包括接受客户端的消息,打包区块和广播区块等。一方面,主节点比记账节点多了计算和通信的任务,如果主节点的硬件性能和网络条件无法实现快速完成任务的要求,会带来不可避免的性能下降。另一方面,如果主节点不具备稳定地提供服务的能力,或是针对网络攻击的抗性较差,导致主节点因故障下线或是因网络攻击而失去服务能力这一现象频繁地发生。实用拜占庭容错算法基于视图编号轮流担任主节点的主节点选取方式的问题在于,一方面,随着网络的运行每个节点都会有成为主节点的机会,这意味着如果不能够保证网络内所有节点都稳定提供服务(显然这是不现实的),那么整个网络都需要承担额外的视图切换的开销。另一方面,这种主节点选取的方式严格遵循编号顺序,这意味着攻击者基于当前主节点的编号可以很容易地推算出后续将成为主节点的一组节点编号顺序,这意味着攻击者可以很精准地攻击对应节点使其失去服务能力,这样在接下连续的多个视图内区块链网络都失去了服务能力,形成瘫痪整个网络的效果。或是恶意节点在成为主节点之后,攻击编号在自己之后的多个节点,影响视图切换过程的执行,延长自己担任主节点的时间,便于实现自己的意图。
技术实现思路
[0003]为了克服上述现有技术的不足,本专利技术提供了一种基于算力证明的治未病场景下联盟链主节点选举算法。
[0004]本专利技术所采用的技术方案是:
[0005]基于算力证明的治未病场景下联盟链主节点选举算法,包括如下步骤:
[0006]第一步,读取配置文件,获得当前网络难度值和所有节点偏差值列表。
[0007]第二步,构造一种特殊的数据结构,不断改变随机数后使用SHA256算法,找到这样一个使得该数据结构的哈希值小于目标值的随机数,作为算力证明的结果。
[0008]第三步,若在完成算力证明前收到其他节点的有效投票请求,则为其投票并停止进行算力证明,否则成为候选人并为自己投票,凭借算力证明结果向其他节点发送投票请求。
[0009]第四步,收到超过一半节点投票的节点广播投票凭证宣布自身当选主节点,如果超时则重新开始选举。
[0010]与现有技术相比,本专利技术的有益效果是能够筛选出计算能力、网络情况、稳定性和抗攻击能力具备优势的主节点。算力证明机制通过完成计算任务保证了只有具备一定程度的计算能力的节点才能够作为主节点选举的候选人请求其余节点投票。而在网络内存在多
个满足算力要求条件的节点的情况下,同一时间下多个节点成为候选人,此时网络状况更为良好的节点的请求能够更早地抵达其余节点,更有可能成为主节点。而且,联盟链环境下节点易于管理,基于授权方式的节点加入规则决定了通过线下完成节点性能评估的方式是可行的。通过节点性能评估,可以通过偏差值来决定网络对于选择该节点为主节点的倾向性。所以最终选出来的节点能够满足区块链网络对于主节点应具备的性能要求。
附图说明
[0011]图1为本专利技术基于算力证明的治未病场景下联盟链主节点选举算法的流程图。
[0012]图2为本专利技术基于算力证明的治未病场景下联盟链主节点选举算法中算力机制的流程图;
具体实施方式
[0013]基于算力证明的治未病场景下联盟链主节点选举算法,包括如下步骤:
[0014]第一步,读取配置文件,获得当前网络难度值和所有节点偏差值列表。
[0015]第二步,构造一种特殊的数据结构,不断改变随机数后使用SHA256算法,找到这样一个使得该数据结构的哈希值小于目标值的随机数,作为算力证明的结果。进一步地,具体方法如下:
[0016](1)每个节点构造一个特殊的数据结构,属性如下:
[0017][0018](2)计算算力证明需要的目标值,计算公式如下:
[0019]h=1<<(256
‑
diff
‑
offset)
[0020]其中diff表示网络难度值,offset表示偏差值。
[0021](3)随机数从0开始递增,每次改变随机数之后计算数据结构的哈希值,直到找到一个使得哈希值小于目标值的随机数。
[0022]第三步,若在完成算力证明前收到其他节点的有效投票请求,则为其投票并停止进行算力证明,否则成为候选人并为自己投票,凭借算力证明结果向其他节点发送投票请求。进一步地,具体方法如下:
[0023](1)在完成算力证明之前收到其他节点有效的算力证明结果,则将票投给该节点,并停止算力证明的计算。
[0024](2)在完成算力证明时仍没有投出自己的票,则将票投给自己,并向其余节点广播算力证明结果。
[0025](3)已经投票之后收到其他节点有效的算力证明结果,不响应其投票请求。
[0026]第四步,收到超过一半节点投票的节点广播投票凭证宣布自身当选主节点,如果超时则重新开始选举。
[0027]下面结合附图及具体实施例对本专利技术作进一步详细描述。
[0028]实施例
[0029]结合图2,本专利技术基于算力证明的治未病场景下联盟链主节点选举算法,算力证明步骤如下:
[0030](1)每个节点构造一个特殊的数据结构,属性如下:
[0031][0032]前一区块哈希值为
″
00000000000000000000000000000000000000000000000 00000000000000000
″
,节点编号分别为0、1、2,节点签名为每个节点用RSA算法对前一区块哈希值的签名,网络难度值为10,偏差值均为0,,计算能力等级分别为强、中、弱,时间戳为当前机器时间。
[0033](2)计算算力证明需要的目标值,计算公式如下:
[0034]h=1<<(256
‑
diff
‑
offset)
[0035]其中diff表示网络难度值,offset表示偏差值。
[0036](3)随机数从0开始递增,每次改变随机数之后计算数据结构的哈希值,直到找到一个使得哈希值小于目标值的随机数。最后编号为0的节点耗费61ms,编号为1的节点耗费1719ms,编号为2的节点耗费4368ms。
[0037]结合图1,本专利技术基于算力证明的治未病场景下联盟链主节点选举算法,投票选举步骤如下:
[0038](1)在完成算力证明之前收到其他节点有效的算力证明结果,则将票投给该节点,并停止算力证明的计算,此处为编号为1和2的节点。
[0039](2)在完成算力证明时仍没有投出自己的票,则将票投给自己,并向其余节点广播算力证明结果,此处为编号为0的节点。
[0040](3)已经投票之后本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于算力证明的治未病场景下联盟链主节点选举算法,其特征在于,包括如下步骤:第一步,读取配置文件,获得当前网络难度值和所有节点偏差值列表。第二步,构造一种特殊的数据结构,不断改变随机数后使用SHA256算法,找到这样一个使得该数据结构的哈希值小于目标值的随机数,作为算力证明的结果。第三步,若在完成算力证明前收到其他节点的有效投票请求,则为其投票并停止进行算力证明,否则成为候选人并为自己投票,凭借算力证明结果向其他节点发送投票请求。第四步,收到超过一半节点投票的节点广播投票凭证宣布自身当选主节点,如果超时则重新开始选举。2.根据权利要求1所述的基于算力证明的治未病场景下联盟链主节点选举算法,其特征在于,第二步所述的算力证明机制,方法如下:(1)每个节点构造一个特殊的数据结构,属性如下:(2)计算算力证明需要的目标值,计算公式如下:h=1<<(256...
【专利技术属性】
技术研发人员:刘万里,杨晓辉,周昌慧,王逸文,王泽廷,徐雷,李鑫,
申请(专利权)人:南京理工大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。