法定人数简介(二):法定人数共识

我们知道,大众区块链是一个开放的社区,任何人都可以作为节点加入网络,在网络中进行计算,向链提交交易等。,所以公链没有信任基础,所以公链的* * *识的第一个意义是证明交易的合法性和真实性,防止恶意成员捣乱,效率不是第一个意义。

与公链环境不同的是,所有有准入门槛的企业链或联盟链的成员,在加入时实际上都获得了一定的认可和许可,所以企业链/联盟链的成员有一定的信任基础。在企业链中,我们不需要使用POW或者POS,这是一种计算能力的浪费或者是低效的交易知识。

Quorum提供了多种* * *知识供用户采用:

在说Raft之前,有必要提一下Paxos算法,这是Leslie Lamport在1990中提出的一种基于消息的一致性算法。但由于算法难以理解,一开始并没有得到太多关注。之后作者在八年后的ACM上发表,也就是1998。但算法因为难以理解,没有受到重视。作者后来以一种更容易被接受的方式重新发表了一篇论文《Paxos Made Simple》。

可见Paxos算法很难理解。即使现在投入到很多高校,很多学生和教授依然反馈Paxos算法难以理解。同时,Paxos算法在实际应用中也很难实现。这也是后来提出Raft算法的原因。

Raft是一种实现分布式知识的算法,主要用于管理日志复制的一致性。它与Paxos具有相同的功能,但与Paxos相比,Raft算法更容易理解并应用于实际系统。Raft算法也是联盟链使用的* * *知识算法。

Raft I * * *有三种角色状态:

每个节点都有一个选举超时,时间随机在150ms到300ms之间。有几种情况会重置超时:

在分布式系统中,“时间同步”是个大问题,因为每台机器都可能因地理位置、机器环境等因素造成不同程度的时钟不一致,但为了识别“过期信息”,时间信息必不可少。

Raft算法利用Term ($ Term)的概念将时间划分为$ Term(同时每个节点也会在本地维护currentTerm),可以认为是逻辑时间,如下图所示。

每个任期的开始是领导人选举,一个或多个候选人将试图成为领导人。如果一个人赢得了选举,他将在余下的任期内成为领袖($ TERM)。在某些情况下,选票可能会被计分,领导人可能不会当选(如t3),那么另一个任期将开始,并立即开始下一次选举。Raft算法确保在给定的条件下至少有一个领导者。

特殊情况的处理

在以太坊中,节点本身没有作用,所以在使用Raft***知识时,我们称leader节点为挖掘节点:

Raft***知识机制本身保证了同一时刻最多只有一个领袖,所以在以太坊模型中使用时只会有一个封锁者,避免了同时封锁或者浪费计算能力的情况。

在单个交易层面,Quorum仍然遵循以太坊的p2p传输机制,只有在block层面才会使用Raft传输机制。

需要注意的是,在以太坊中,一个节点在收到一个块后会立即保留一个账户,而在Quorum模型中,一个块的记录必须符合Raft协议。每个节点收到领导发来的块后,都要向领导汇报确认收到,然后领导通知所有节点提交数据(记录)。

在Quorum模型中,新块的信息很可能与现有块的头信息不一致,最有可能发生的是投票者的替换(挖掘节点的替换),描述如下:

假设有两个节点,node1和node2,node1是现有的leader,现有链的最新块是0xbeda,其父块是0xacaa。

块“扩展”或“无操作”的标记是在更高级别上完成的,并且不是由raft本身的日志记录机制实现的。因为在raft内部,信息没有有效和无效之分,只有在区块链的层面才会有有效块和无效块的意义。

需要注意的是,Quorum的这种记账机制与以太坊本身的LVC(最长链机制)完全不同。

默认情况下,仲裁块频率为50毫秒,可以通过- raftblocktime参数进行设置。

投机阻塞不是以太坊严格理解Raft所必需的核心机制之一,但却是提高阻塞效率的有效途径。

一个区块从产生到实际记录,经历整个raft过程,实际上是需要一些时间的。如果我们在分类账中记录了最后一个块之后开始生成下一个块,那么成功记录一笔交易将需要更多的时间。

在推测性剥离中,我们允许在记录其父块之前生成新块。以此类推,在一段时间内,实际上会产生一个“投机链”。在祖先块被记录在帐簿中之前,一个新块已经按照顺序形成了临时链片段,等待被记录。

对于已记录在投机块中的交易,我们将在交易池中将其标记为“建议交易”。

我们之前说过,两个挖矿节点有可能在raft机制下争夺区块和记账,所以很有可能一个投机链中间的区块不会被记入账本。在这种情况下,我们还将修改交易池中的交易状态。(InvalidRaftOrdering事件)

目前,Quorum并没有限制投机链的长度,但在其未来的规划中提到,将作为性能优化项添加到开发流程中。最后,一个挖掘节点即使没有连接到raft***知识层,也总能屏蔽掉下线,产生自己的投机链。

投机链由以下部分组成:

在块传输中,我们使用etcd Raft默认的http传输。当然也可以使用以太坊的p2p传输,但是Quorum团队发现ETH p2p在高负载下的性能不如raft p2p。

Quorum使用端口50400作为Raft传输层的默认侦听端口,也可以通过- raftport参数自行设置。

一个集群中的默认最大节点数是25,可以通过- maxpeers N设置,其中N是您的最大节点数。

Quorum的IBFT实际上是PBFT,但摩根大通称自己的PBFT为IBFT,所以IBFT的基本原则与PBFT相同。不同的是,IBFT结合了* * *知识的三个阶段。

伊斯坦布尔BFT由PBFT算法改进而来,包括三个阶段:预准备、准备和提交。在一个有N个节点的网络中,该算法最多可以容忍f个故障节点,其中N=3F+1。

伊斯坦布尔BFT算法中的块是确定性的,这意味着链不是分叉的,并且合法的块必须在链中。为了防止恶意节点生成不同的链,在将块插入链中之前,每个验证器必须将2F+1提交签名放入块报头的外部数据字段中。因此,该块可以自我验证(因为它是签名的)并受轻型客户端支持。

但是,动态extraData也会造成块的哈希计算问题。因为一个块可以被不同的验证器验证,所以它会有不同的签名,所以同一个块会有不同的散列。解决方案是在计算块哈希时排除提交签名。因此,我们仍然可以在保证块哈希一致性的同时验证* * *知识。

由于以太坊POA***的知识在网上已经介绍了很多,所以笔者在这里就不详细介绍了,只对POA的重要特性和工作流程进行了梳理和介绍。