NEO的dBFT 2.0 - 单块结束,可用性提高

13 天前 · 原创文章

概观

NEO的创新之处在于其针对数字智能经济的愿景。这些功能主要是快速单块结束,并支持易于编程的合同。为了实现单块结束,NEO采用了一种协议,它描述为dBFT(委托拜占庭容错),pBFT(实际拜占庭容错)的适应。可以说,成功实施BFT共识协议的最具挑战性的方面涉及处理由于网络延迟和节点重启而可能发生的边缘情况故障。

对于旨在促进适合日常商业用途(智能经济)的金融交易的区块链,网络可用性至关重要。在本文中,我将描述dBFT 1.0遇到的操作问题,并讨论如何通过最近部署到NEO MainNet的dBFT 2.0共识协议中的改进来消除这些问题。

背景

为了能够理解dBFT 2.0的优点,有必要了解有关共识协议操作的一些细节。诸如Neo的dBFT之类的BFT算法需要大约2/3的验证器节点的签名才能达成共识。对于dBFT,其中F是允许的故障节点的数量,以下等式给出了所需验证器节点的数量和所需签名的数量。

  • F =允许的失败节点数
  • 验证器节点= 3F+1
  • 需要签名= 2F+1

NEO 1.0共识对于快乐的道路有以下几个阶段:

  1. PrepareRequest:验证器节点轮流作为主节点来提出应包含在当前块中的事务。块号的简单模数用于确定块的第一个验证器。
  2. PrepareResponse:接收的验证节点PrepareRequest确保它所有的交易是有效的,并与他们的签名响应PrepareResponse消息。
  3. 一旦2F+1PrepareResponses已收到新的块与签名创建。

如果在当前超时内未获得所需数量的签名,则节点将发送ChangeView消息以选择先前块的主要验证器作为主要验证器。超时最初是块时间的2倍,并且在生成块之前发生的每个超时都会加倍。一旦2F + 1变化视图的消息被接收时,处理将从步骤1再重复。

问题

在罕见的网络延迟情况下,NEO的dBFT 1.0算法容易受到单个分组的影响。这个问题已经有一段时间了解并且已经记录(例如在本文中)。可能会发生分叉块,因为在发送PrepareResponse消息后允许节点超时。由于CN节点时钟永远不会(并且永远不会)100%同步,因此节点会超时并在稍微不同的时间移动到下一个验证器。如果除了一个验证器之外的所有验证器都没有超时,并且验证器已经收到2F PrepareResponse消息,它将生成一个有效的签名块,而其他人将切换到下一个主要,他们可以达成共识并在同一高度签署另一个块。此时,共识节点将仅建立在其中一个分支上; 所以这个问题有时被称为块塞。虽然这种情况可能会在没有达成共识的情况下发生,但许多Neo完整网络节点可能会接受分叉模块并停止运行,从而导致最终用户最终依赖的网络节点的操作问题。

dBFT 2.0通过添加类似于pBFT(Practical Byzantine Fault Tolerance)文档中描述的承诺阶段来解决此问题。为了防止网络停顿,dBFT 2.0还在共识协议中添加了恢复消息实现。恢复机制具有在共识节点的各种操作问题的情况下改善块时间的附加益处。在以下情况下,性能得到改善:

  • 网络连接不良,例如由于网络中断或针对共识节点的网络攻击。
  • 由于硬件故障,停电或其他系统问题导致共识节点进程重启或系统重启。

dBFT 2.0实现提供了审计共识节点的任何不当行为的可见性。CN(共识节点)跟踪已发生的所有承诺,并且不允许任何其他CN能够承诺在给定高度上签署多个潜在块。CN共识日志使CN节点运营商以及任何能够实现共识监视模式的完整节点都可以轻松获取此信息。

测试和质量保证

为了确保dBFT 2.0实现的质量,代码更改经历了多个测试阶段。NEO核心开发人员使用NEO的P2P插件在私有网络中进行了大量测试,模拟网络故障。在NGD管理的私人网络中也进行了类似的自动和手动测试。最后,代码在NEO公共TestNet上进行了测试。

结论

现在Neo 2.10.2自6月3日开始在MainNet共识节点上运行,今天在实践中可以看到dBFT 2.0的改进,减少了块时间,如下图1和图2所示。此外,通过此升级,Neo共识节点现在还运行可提高内存池性能的代码,从而进一步降低网络上的操作负担,并确保在网络上更高的事务量期间,块时间可以保持最小化。


图1.每分钟在NEO网络上遇到的平均阻塞时间
图2.每分钟在NEO网络上遇到的最差阻塞时间

在销售点采用和使用

NEO dBFT 2.0是作为NEO 3.0计划的改进之一而开发的,该计划已在NEO 2.x上提前提供。现在,在MainNet上生产dBFT 2.0,企业在生产中采用NEO时遇到的绝大多数运营问题都不再是问题。随着这个阻碍者的采用,NEO网络对销售点交易的使用将会蓬勃发展。

为了在销售点最有效地使用加密货币,必须同时具有高可用性和短时间的最终性。即使使用诸如支付渠道之类的第二层解决方案可以实现近乎即时的销售点交易,但是在尚未建立的情况下能够在短时间内打开频道是很重要的。随着dBFT 2.0共识的改进,NEO现在应具备更多企业开始使用NEO区块链作为销售点解决方案所需的可靠性。

NEO

一种智能经济分布式网络