黑马程序员技术交流社区

标题: 【深圳校区】共识机制 [打印本页]

作者: 柠檬leung不酸    时间: 2018-12-20 11:16
标题: 【深圳校区】共识机制
共识机制术语说明规则
在 NEO 的共识算法中,共识节点由 NEO 持有人投票选出,并对区块链中交易的有效性进行验证。过去这些节点被称作“记账人”,现在他们被称作”共识节点”。
介绍
众多区块链共识算法的根本区别是他们如何保障对系统中的故障节点、恶意节点的容错能力。
传统的 PoW 方法可以提供这种容错能力,只要网络的大多数算力是诚实的。
然而,由于这种模式依赖于大量的计算,这种机制可能会非常低效且不环保(算力消耗能源,需要硬件)。 这些依赖就是 PoW 方法的限制所在,最主要的就是扩展的成本。
NEO实现了一种委托的拜占庭容错共识算法,它借鉴了一些 PoS 的特点(NEO持有人需要对共识节点进行投票) 利用最小的资源来保障网络免受拜占庭故障的影响,同时也弥补了 PoS 的一些问题。该解决方案解决了与当前块链实现相关的性能和可扩展性问题,而不会对容错产生重大影响。
理论
拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息。 在战争的时候,拜占庭军队内所有将军和副官必需达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。
为了描述 DBFT 的工作原理,我们将本节重点放在第 5 部分中的证明 66.66% 的共识率的正确性。请记住,不诚实的节点不需要主动恶意,因为它根本不可能是按预期运作。
为了讨论,我们将描述一些情景。 在这些简单的例子中,我们假设每个节点沿着从 议长 发送过来的消息发送。 此技工也用于DBFT,对系统至关重要。 我们将仅描述功能系统与功能失效系统之间的区别。 有关更详细的说明,请参阅参考资料。
诚实的议长

图 1: 一个 n = 3 的例子中存在一个不诚实的 议员。
在图 1 中,我们有一个诚实的 议员 (50%)。两个 议员 从 议长 那里收到相同的消息,然而,由于其中一个 议员 不是诚实的,诚实的议员只能确定有不诚实的节点,但无法识别它是 议长 还是 议员。因此 议员 必须弃票,改变视图。

图 2: 一个 n =4 的例子中存在一个不诚实的 议员。
在图 2 中,我们有两个诚实的 议员 (66%)。所有的 议员 从 议长 那里收到相同的消息,然后向其它 议员 发送消息和自己的验证结果。根据两位诚实 议员 的共识,我们可以确定 议长 或者右边的 议员 在系统中是不诚实的。
不诚实的议长

图 3: 一个 n = 3 的例子中存在一个不诚实的 议长。
在图 3 中,不诚实的是 议长,这和图 1 中描述的案例有同样的结论。议员 无法确定哪个节点是不诚实的。

图 4: 一个 n = 4 的例子中存在一个不诚实的 议长。
在图 4 所示的例子中,中间的节点和右边的节点接收的区块不可验证, 由于他们占到多数(66%),导致更换视图选举新议长。在这个例子中,如果诚实的议长向三名议员中的两名发送了诚实的数据,那么它将被验证而不需要改变视图。
实际实施
DBFT 在 NEO 中的实际实现使用迭代共识方法来保证达成共识。算法的性能取决于系统中诚实节点的分数。图5描绘了作为不诚实节点的函数的期望迭代。
请注意,图5没有低于66.66%的共识节点诚信。在这个临界点和33.33%的共识节点诚信之间,有一个无人地带,那里无法达成共识。低于33.33%的共识节点诚信,不诚实的节点(假设它们达成共识)能够自己达成共识,并成为系统中新的真理点。
图5: DBFT算法的 Monto-Carlo 模拟,描绘了达成共识所需的迭代。 {100 个节点;100,000 个模拟区块随机选择诚实节点}
定义
在算法中有如下定义:
要求
在NEO中,共识容错有三项主要要求:
算法
该算法工作原理如下:
NOTE
如果 ( ) 秒后在同一视图没有达成共识:
  • ​共识节点进行广播:<ChangeView, h,k,i,k+1>
  • 一旦共识节点接收到至少 s 个表示相同视图改变的广播,就会增加视图 v, 并引发新一轮的共识。


引用

转自 NEO
原文:http://docs.neo.org/zh-cn/basic/consensus/consensus.html










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2