一种避免区块链共识中无代价攻击的算法的制作方法

文档序号:17923918发布日期:2019-06-15 00:17阅读:279来源:国知局
一种避免区块链共识中无代价攻击的算法的制作方法

本发明涉及区块链技术领域,具体涉及一种避免区块链共识中无代价攻击的算法。



背景技术:

在一个分布式网络中,由于网络中拥有众多节点,网络中不可避免的通信延迟,节点可能出现宕机、故障、失效等等复杂情况,比如,如下情况:

当高度r的区块进行出块时,出块矿工应该是id_targetr=qrmodn,可惜id_targetr矿工的由于网络延时或者恶意保留区块导致全网未能及时感知区块,在等待λ时间段之后,由

idλ=hash(id||λ||sigr-1)

的矿工将会出块,此时网络中便有可能面临2条分叉。

导致整个网络中出现分叉的情况;同时,网络中还存在着一定数量作恶节点的攻击,在任意一条分叉上都有矿工可以没有成本的进行出块,同时还会面临着遭受几种常见长程攻击的可能性。

分叉导致每个节点用户保存的数据不一致,造成整个网络上的信息不统一、混乱。



技术实现要素:

本发明的目的是提供一种避免区块链共识中无代价攻击的算法,能够有效的避免区块链上出现分叉。

本发明的一个实施例提供了一种避免区块链共识中无代价攻击的算法,包括以下步骤:

1)区块链上节点用户检测当前的出块主链,出块主链为包含有最大值的区块序号的区块的分叉;

2)当前出块矿工在出块主链上出当前块;

3)所有非当前出块矿工等待一个出块周期,等待当前出块矿工在出块主链上出当前块;

4)当区块链上节点用户在单个出块周期结束后,未发现当前出块矿工在出块主链上出当前块,则所有节点用户重新挑选备用块的出块矿工,并在等待1个或多个出块周期后,由新出块矿工在出块主链上出备用块;

5)备用块的下一个区块出块之前,备用块的下一个区块的出块矿工检测当前的出块主链,出块主链为包含有最大值的区块序号的区块的分叉;

6)如果备用块所在的分叉为出块主链,则在备用块所在的分叉出块;如果备用块所在的分叉不是出块主链,则在出块主链上继续出块。

与现有技术相比,本发明提供的避免区块链共识中无代价攻击的算法具有如下优点:

1.可以迅速解决分叉的产生;

2.在保证网络去中心化的前提下,提高了区块链网络交易处理性能;

3.移动检查点机制加强了交易的确定性,使得交易彻底无法被篡改,而非其他算法中交易只能概率性的被确认。

附图说明

图1所示为本发明的避免区块链共识中无代价攻击的算法的一个实施例的流程示意图。

图2所示为本发明的验证者节点的一个实施例的示意图。

图3所示为本发明的矿工投票流程的一个实施例的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。

在本发明的描述中,认证中心(ca─certificateauthority)作为权威的、可信赖的、公正的第三方机构,专门负责发放并管理所有参与链上交易的实体所需的数字证书。它作为一个权威机构,对密钥进行有效地管理,颁发证书证明密钥的有效性,并将公开密钥同某一个实体(消费者、商户、银行)联系在一起。它负责产生、分配并管理所有参与网上信息交换各方所需的数字证书,因此是安全电子信息交换的核心。

请参阅图1,在本发明的一个实施例中,避免区块链共识中无代价攻击的算法可以包括以下步骤:

100:区块链上节点用户检测当前的出块主链,出块主链为包含有最大值的区块序号的区块的分叉;

在本发明的一个实施例中,分叉选择策略采用最长链原则,同时接收到相同高度的链时,暂时保留,等待长链的出现;接收不同高度的分叉链时,选择长链作为主链。

在本发明的一个实施例中,区块链上设置如下机制:

每隔固定数量的区块,所有矿工判断哪一个分叉是当前的出块主链,并向全网广播投票信息,投票信息包括:所投分叉最后一个区块的哈希值,矿工公钥对哈希值的签名;当前出块矿工接收广播,当接收到投给某一条分叉的投票数超过总矿工数的一半时,当前出块矿工将收到的所有广播信息打包生成一个检查点区块,所有节点用户认可超过一半投票数的分叉为出块主链。

进一步的,在本发明的一个实施例中,可以设置当前出块矿工接收到投给任何一条分叉的投票数都不超过总矿工数的一半时,所有矿工等待一定的时间后重新进行投票。

进一步的,参考图2,在本发明的一个实施例中,可以设置一个区块周期,范围可以为10~100块,每经过一个周期就需要矿工对目前的主链进行一次投票确认,超过2/3票数的分叉链被确认为主链,确认点之前的区块不可被篡改。验证者节点引入,避免了攻击者在确认点之前进行长程攻击,同时任何矿工也不会在分叉点之前的分叉上继续出块。

进一步的,在本发明的一个实施例中,矿工的投票规则如下:

1)拥有第一匹配位矿工数量较多的分叉,获得投票;

2)若拥有相同的第一匹配位矿工,检查点前连续的第一匹配位矿工越多,获得投票;

3)若还是相等,检查点前一个区块的哈希最大的链,获得投票。

一般限制矿工每次只能对一个分叉进行投票。

参考图3,为本发明的矿工投票流程的一个实施例的示意图。

200:当前出块矿工在出块主链上出当前块;

300:所有非当前出块矿工等待一个出块周期,等待当前出块矿工在出块主链上出当前块;

400:当区块链上节点用户在单个出块周期结束后,未发现当前出块矿工在出块主链上出当前块,则所有节点用户重新挑选备用块的出块矿工,并在等待1个或多个出块周期后,由新出块矿工在出块主链上出备用块;

500:备用块的下一个区块出块之前,备用块的下一个区块的出块矿工检测当前的出块主链,出块主链为包含有最大值的区块序号的区块的分叉;

600:如果备用块所在的分叉为出块主链,则在备用块所在的分叉出块;如果备用块所在的分叉不是出块主链,则在出块主链上继续出块。

在本发明的一个实施例中,避免区块链共识中无代价攻击的算法还可以包括如下步骤:如果备用块所在的分叉不是出块主链,则在产生新块时,备用块所在的分叉延迟一个或多个出块周期出块。

在本发明的一个实施例中,避免区块链共识中无代价攻击的算法还可以包括如下步骤:如果备用块所在的分叉为出块主链,则在备用块所在的分叉出块时延迟一个或多个出块周期出块。

在本发明的一个实施例中,避免区块链共识中无代价攻击的算法还可以包括如下步骤:区块链上所有矿工对自己的公钥做哈希计算,如果得到的哈希计算值小于设定的阈值,则该矿工无法参与备用块的下一个区块的出块。

在本发明的一个实施例中,避免区块链共识中无代价攻击的算法还可以包括如下步骤:如果备用块的下一个区块的出块延迟为一个出块周期,则区块链上所有矿工恢复正常出块。

在本发明的一个实施例中,避免区块链共识中无代价攻击的算法还可以包括如下步骤:如果备用块所在的分叉中某一个区块的出块延迟为一个出块周期,则区块链上所有矿工恢复正常出块。

虽然以上述较佳的实施例对本发明做出了详细的描述,但并非用上述实施例限定本发明。本领域的技术人员应当意识到在不脱离本发明技术方案所给出的技术特征和范围的情况下,对技术特征所作的增加、以本领域一些同样内容的替换,均应属本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1