1 - 术语
权益证明机制 PoS - 一种使用网络共识来处理容错的算法
工作量证明机制 PoW- 一种使用计算力来处理容错的算法
拜占庭错误 BF - 节点可用,但由于其行为不可靠造成的失败
改进的拜占庭容错机制 DBFT - 在 NEO 区块链内部实现的保证容错的共识算法
视图 v - NEO DBFT 共识行为中使用的数据集
2 - 角色
在 NEO 共识算法中,共识节点由 NEO 持有者选出并对交易合法性进行投票,同时它们也被称作“账本”。但在下文中,它们将被统称为共识节点。
共识节点 - 参与共识行为的节点。在共识行为中,共识节点轮流扮演以下两个角色:
发言人(一个)- 发言人负责向系统发送区块提案。
议员(多个) - 议员负责达成交易共识。
3 - 简介
区块链之间的一个根本差异就是如何在有缺陷和不诚实行为的网络中保证容错。
使用 PoW 这种传统的实现方法可以保证容错,只要网络中的大部分计算力都是诚实的。然而,因为这种方案对于计算的依赖,使得其效率非常低(计算力耗费能源并且对硬件有一定要求)。这使得 PoW 网络受到很多限制,最主要的就是扩展成本。
DBFT 在 NEO 中的实现利用了一些类似 PoS 的特点(NEO 持有者投票产生共识节点),这能保护网络不受拜占庭错误干扰并将消耗的资源最小化,同时也能去其糟粕(指 PoS 实现中的问题,译者注)。这个方案在没有对容错机制造成显著影响的情况下,妥善处理了当下区块链实现中性能与扩展之间的问题。
4 - 理论
拜占庭将军问题是分布式计算中的一个经典问题。这个问题中定义多个议员必须在发言人的命令下达成共识,在整个系统中,发言人或某些议员可能会是叛徒,因此我们要小心行事。最糟糕的情况下,非诚实节点可能会向每个接收者发送不同的信息。该问题的解决办法要求议员们组团鉴定发言人是否诚实并且鉴别出真实的命令。
为了说明 DBFT 的工作机制,我们将在本部分着重论述为何要在第五部分用 66.6% 的共识率。要记住,非诚实节点并不总是会做出恶意行为,它也可能只是简单地失效了而已。
为了便于讨论,我们设想一些场景,在这些简单的例子中,我们假定每个节点都按照发言人的信息发送响应。这种机制也被用在 DBFT 中,并在系统中严格执行。我们只描述正常系统与失效系统之间的区别,若想获取更多内容,请查看参考文献。
诚实的发言人
图 1: 一个 n = 3 的例子,其中包含一个不诚实的议员.
在图 1中,我们只有一个诚实的议员(50%),每个议员都会从诚实的发言人那里获取到相同的信息。然而,因为其中一个议员是不诚实的,诚实的议员只能判断出存在一个不诚实的节点,但是并不能鉴别该不诚实节点是区块核心(即发言人)还是议员。因此,议员必须放弃投票,放弃改变视图。