什么是NEO的共识机制NEO共识机制图解
共识机制
术语描述
权利证明PoS:一种利用网络共识处理容错的算法。
Workload Proof power:一种使用计算能力来处理容错的算法。
拜占庭错误BF:一个节点保持了它的功能,但是以不诚实甚至恶意的方式工作。
dBFT(一种改进的拜占庭容错算法)dBFT:新区块链中的一种共识算法,通过多个共识节点协商达成共识,具有良好的可用性和终结性。
视图V:在dBFT算法中,一个共识从开始到结束使用的数据集称为视图。
规则
在NEO的共识算法中,共识节点由NEO持有者投票决定,并验证区块链中交易的有效性。过去,这些节点被称为“簿记员”,现在则被称为“共识节点”。
共识节点:该节点参与共识行为。在共识行为中,共识节点轮流承担以下两个角色:
Speaker(一个人):Speaker负责向系统发送一个新块的提议。
议员(多名成员):议员负责对议长的提议进行投票。当三分之二或更多的议员投票时,提案获得通过。
引言
许多区块链共识算法的根本区别在于它们如何保证对系统中失效节点和恶意节点的容错能力。
传统的PoW方法可以提供这种容错,只要网络的大部分计算能力是诚实的。
然而,由于这种模型依赖于大量的计算,这种机制可能非常低效,也不环保(计算能力消耗能量,需要硬件)。这些依赖性是PoW方法的局限性,其中最重要的是扩展的成本。
NEO实现了一个委托的拜占庭容错共识算法,该算法借鉴了一些po的特性(NEO持有者需要对共识节点进行蓑衣网小编2022 投票),使用最少的资源来保护网络免受拜占庭故障的影响。同时也弥补了PoS的一些问题。该解决方案解决了与当前区块链实施相关的性能和可扩展性问题,而不会对容错能力产生重大影响。
理论
拜占庭位于今土耳其伊斯坦布尔,是东罗马帝国的首都。当时由于拜占庭和罗马帝国疆域辽阔,出于防御的目的,每支军队相隔很远,将军和大将不得不依靠信使来传播消息。战争期间,拜占庭军队中的所有将领和副官必须达成共识,决定是否有胜算,才能攻击敌方阵营。但军中可能有汉奸、敌特,将军们的决策会扰乱全军的秩序。达成共识时,结果不代表多数人的意见。此时,在已知成员叛变的情况下,剩下的忠诚将领如何在不受叛徒影响的情况下达成协议,拜占庭问题就这样形成了。
为了描述DBFT的工作原理,本节重点证明第五部分66.66%的一致率的正确性。记住,不诚实的节点不需要恶意,因为它根本无法按预期工作。
为了便于讨论,我们将描述一些场景。在这些简单的例子中,我们假设每个节点都是沿着说话者发送的消息发送的。这种机制也在DBFT使用,这对系统至关重要。我们将只描述功能系统和功能失效系统之间的区别。有关更详细的说明,请参考参考资料。
诚实的演讲者
图1:n=3的例子中有一个不诚实的MP。在图1中,我们有一个诚实的议员(50%)。两名成员从发言人那里收到了同样的消息。但由于其中一个成员不诚实,诚实的成员只能确定存在不诚实的节点,而无法识别是说话者还是成员。因此,议员必须放弃投票,改变观点。
蓑衣网小编2022图2:n=4的例子中有一个不诚实的MP。在图2中,我们有两位诚实的议员(66%)。所有成员从发言人处接收到相同的消息,然后将该消息和他们自己的验证结果发送给其他成员。 根据两个诚实成员的共识,我们可以确认系统中说话者或右边的成员是不诚实的。
不诚实的说话者
图3:n=3的例子中有一个不诚实的说话者。在图3中,不诚实的是说话者,这与图1中描述的情况有相同的结论。议员不能确定哪个节点不诚实。
图4:n=4的例子中有一个不诚实的说话者。在图4所示的示例中,中间节点和右侧节点接收的块无法验证。因为他们占大多数(66%),所以新议长是通过改变观点选举出来的。在这个例子中,如果诚实的说话者向三个成员中的两个发送了诚实的数据,那么它将在不改变视图的情况下被验证。
实际实施
DBFT在近地天体中的实际实施使用迭代共识方法来确保达成共识。该算法的性能取决于系统中诚实节点的得分。图5描绘了作为不诚实节点的函数的预期迭代。
请注意,图5中没有低于66.66%的共有节点完整性。在这个临界点和33.33%共识节点的完整性之间,有一个无法达成共识的无人区。不到33.33%的共识节点是诚实的,不诚实的节点(假设达成共识)可以自行达成共识,成为系统中新的真相点。
图5: Monto-Carlo模拟5:DBFT算法,描述了达成共识所需的迭代。{100个节点;100,000个模拟块随机选择诚实节点}定义
在算法中有如下定义:
t:分配给块生成的总时间,单位为秒。
当前时间:t=15秒
这个值可以用来粗略估计单个视图迭代的持续时间,因为共识活动和沟通事件相对于这个时间常数是快的。
n:有效共识节点的数量。
f:系统中失败的共识节点的最小阈值。
f=(n-1)/3
h:共识活动期间的当前块高度。
i:共有节点索引。
v:共识节点视图。此视图包含节点在一轮共识中收到的摘要信息。这包括所有成员发起的投票(prepareResponse或ChangeView)。
k:观点v .共识的索引可能需要几轮。当共识失败时,k值增加,新一轮共识开始。
p:当选议长的共识节点索引。该指标的计算机制在共识节点间轮流进行,防止单个节点成为系统中的指令。
p=(h-k) mod (n)
s:安全共识的门槛。低于此阈值,表示网络故障。
s=((n-1)-f)
要求
在NEO中,共识容错有三个主要要求:议员必须对某个事务达成共识,该块才能实现。不诚实的共识节点不能说服失败交易的诚实共识节点。至少sCongressmen处于相同的状态(h,k)并开始达成共识。算法该算法的工作原理如下:1。共识节点使用发送者的签名向整个网络广播事务。图6:共识节点接收事务并在系统2中广播它。共识节点将交易数据记录到本地存储器中。3。共识活动的第一个视图V被初始化。4。说话者决定。图7:说话者确定并设置视图等待t秒。5。议长广播提案图8:议长提出一个整块提案,由众议院审议。6。议员收到提案并验证:数据格式是否符合系统规则?事务已经在链上了吗?合同脚本执行正确吗?交易是否只包含一项费用(即交易是否避免了双重费用?)如果是有效的求婚广播:如果是无效的求婚广播:图9:成员审查整体提案并回复7。在收到S个“准备回应”广播后,众议院达成共识,发布了一个区块。8。成员签名块图10:达成共识,批准成员签名块并绑定到链上。9。当共识节点接收到完整的块时,清除当前视图数据,并开始新一轮共识。
k=0 注如果()秒后同一视图未达成共识:
共识节点广播:
一旦共识节点收到至少s个表示同一视图变化的广播,将增加视图V并触发新的视图。
引用
区块链的一种拜占庭容错算法
实用的拜占庭容错
蓑衣网小编2022拜占庭将军问题
原文:3358docs.neo.org/zh-cn/basic/consensus/consensus.html