# 各类主流PoS共识机制与Ethereum 2.0对比 （2）

By [Crypto Ryan](https://paragraph.com/@crypto-ryan) · 2022-07-28

---

这是本系列的第二篇，在上一篇中介绍了其他公链的PoS机制，本片中让我们从Beacon chain信标链上Validator的数量参数开始，来看一看Ethereum 2.0 的PoS机制。

![信标链上目前有410825个活跃Validator](https://storage.googleapis.com/papyrus_images/16d33311279da7ff141d634a156a1696e08252e893a2488a272db6728b3fa812.png)

信标链上目前有410825个活跃Validator

一个Validator是指在信标链上的虚拟实体，可参与以太坊的共识机制，它对应一个质押余额，一个公钥和一些其他信息。每个Validator需要质押32个ETH来激活，这32 ETH也是每个节点的初始和最大投票权。而且，质押更多的大于32个ETH到同一个公钥中，并不会增加收益，所以人们也没有动机那样做，这样以太坊的质押量就是以32的整倍数增加的。

每个Validator质押量相等，即权利相当，防止某个节点权力过于集中，配合上每单位时间内Validator减少数量受限（即退出质押的ETH数量受限）的机制， 可使总体质押分布更加稳定，预防某些攻击。

下面介绍一些概念：一个Slot指一个区块可上链（信标链或Shards分片）的时间区间，长约12秒，一个Epoch由32个Slot组成，长约6.4分钟

![](https://storage.googleapis.com/papyrus_images/df736f39b7d158bfdf40626587c2edeec2b53c61bf5c0ed8c734fcd9ce08d9b0.png)

Validator可以担当两种不同的角色：

（1）      Proposer: 区块的提出者，由伪随机算法选出，它负责组装并提出一个区块

（2）      Attesters: 区块的见证者，负责给信标链区块（或分片区块）投票，这些投票被记录在链上，来决定共识的上链区块头

![](https://storage.googleapis.com/papyrus_images/3322ea00240552ae246c3a02ba059920154cc41c691c4e5e3558c8697cb1ab70.png)

见证消息（attestation）是Validator对 ETH 2.0 区块链当前状态的投票，权重由质押量决定（最多32 ETH），见证消息也需要被在网络中广播并记录在区块中。Validator也会互相监督，因为提出其他人的矛盾投票、重复出块的证据会被奖励

**委员会 （Committee）**

一个委员会由一组Validator构成，在一个Slot的范围内做见证工作，为了足够安全，要至少包含128个Validator。在每个Epoch中，RANDAO伪随机算法都会为每个slot选出一个proposers 和一个委员会。并且所有当前活跃的Validator都会被平均分到32个Slot中的一个。

![](https://storage.googleapis.com/papyrus_images/ec67e4153afef8122d20d2b53348db70630942724e24cb28fed2abc2b8f10994.png)

**FLP 不可能原理**

在网络可靠、但允许节点失效（即便只有一个）的最小化异步模型系统中，不存在一个可以解决一致性问题的确定性共识算法。安全性、活性、异步，这三点不能共存。

安全指决定不能被撤销，活性指必须做出新的决定，异步系统中一条消息的传递时间可能没有上限。

![](https://storage.googleapis.com/papyrus_images/03041fa8ff9ff96d55ed5456a4f1ece28868404c17abab6dc65fc28da406aaad.png)

在以太坊2.0中，采用了一种新方法来确定最新有效区块，并分辨出哪些块在主链，哪些属于分支。这个决定主链分支算法是GHOST，它会选择最多投票的那个分支做为最新有效区块（在每个分叉的区块位置，该算法计算该区块及其子块的投票数）

换一种说法，每当有分叉发生时，GHOST算法都会选择最多当前消息所支持的那个分支，如此继续，直到链的末端

和最长链算法相比，GHOST算法可以减少在高网络延迟状态下的潜在攻击的效率，也可以减少链重构时需要涉及的深度，因为尽管攻击者可以在他所支持的链上持续出块，使其变得很长，但GHOST算法还是会选择那些投票最多的分支，而不是最长的，所以攻击无效。

**Ethereum 2.0 共识机制**

在我们深入这一机制之前，有两个术语需要解释一下，是两种不同的投票场景：

（1）      LMD GHOST vote : 针对最有效区块的投票称为 LMD GHOST 投票 （Latest Message Driven），是对于每个Slot投票

（2）      FFG vote: 针对当前Epoch的checkpoint的投票，这个checkpoint也被称为Target，在针对后一个checkpoint的投票中，前一个checkpoint的内容也被包括，它被称为Source，FFG投票是针对每个Epoch的

**LMD GHOST 投票**

![](https://storage.googleapis.com/papyrus_images/673b0905d816bc31e656d2506b9274a3b801a198f5b0731f040418d3de2479e5.png)

这张图片展示了三个连续Slot里发生的情形，在Slot 1，Alice提出了新块，但只有两个见证者做了见证，另外一个没有响应，在 Slot 2，Bob提出了新块，但一位Committee成员没有收到此新块，所以他仍然投票给Slot 1的块做为最新有效区块，在Slot 3，所有committee成员根据LMD GHOST分叉规则，选择了1-2-3作为主链，而不是1-3，因为Slot 2的块被投票的最多。

在每个Epoch中，所有Validator被平均分到32个slot，然后再被进一步分到每个committee中，被分到这个Slot的Validator才能对这个Slot做LMD GHOST投票。举个例子, 有16384 个Validator，512个会被分到Slot 1, 他们对Slot 1 提出的区块进行见证，这个投票类似地区政府选举（局部性），而不是全国选举

**FFG 投票**

Checkpoint是指每个Epoch的第一个slot内的区块，如果这个slot没有产生新块，那么checkpoint就是它的上一个区块。一个Epoch只能有一个checkpoint，但一个块可能是多个Epoch的checkpoint。Checkpoint也可以称为Epoch边界区块 （EBB）

![](https://storage.googleapis.com/papyrus_images/7ede11d782592c5e6b3e90394bb8968eb9261ab37b52c0b5e9ea7c48dfadce39.png)

如上图，Slot 54 和 Slot 128 是空的，本来Epoch 2的checkpoint应该是在Slot 128的区块，但因为它不存在，所以顺延到上一个Slot，也就是Slot 64。

Validator给当前Epoch的checkpoint进行投票 （该checkpoint称为target），这种投票叫做Casper FFG 投票，在投票内容里，还需要包含前一个checkpoint（称为source），在上图中，Epoch 1 的source是创世区块，target是Slot 64区块。 所有Validator都可以对所有checkpoint进行FFG投票，2/3以上支持的投票会被通过。

**确定性**

当一个Epoch结束时，如果它的checkpoint获得2/3以上支持（绝大多数），这个checkpoint即是“合理化” （justified）的，如果它紧接着之后的checkpoint也合理化了，那这个checkpoint即是“确定的” （finalized），通常一个checkpoint需要12.8分钟来确定

平均来说，一个交易处于某个区块中部，此交易的确定等效于它的下一个checkpoint被确定，即2.5个Epoch的时间，16分钟。乐观的讲，在Slot 22的时候就可以达到2/3的见证数，所以一个交易的确定时间是 14分钟 (16+32+22 Slots)

![](https://storage.googleapis.com/papyrus_images/164348be71089c24dad174edd352da3baf583a8d98b52026c0b85166196a5016.png)

**见证**

一个见证包含一个LMD GHOST 投票和一个FFG 投票，理想情况下，每个validator每个Epoch提交一个见证，每个见证有32次机会被包含在链上，这就是说也可能同一个validator提交了两个见证都被包含在链上。当validator在他被分配到的那个Slot提交见证时，收益是最高的，如果之后见证才上链，收益会递减。为了给validator足够的准备时间，见证者委员会的分配会在一个Epoch之前知晓，但区块提出者的分配只会在当前Epoch开始的时候知晓。

在同一个委员会中，如果各个validator的LMD GHOST还有FFG投票内容都相同，那他们的签名可以合并在一个聚合签名里上链。

**惩罚和过错**

在3种情况下，validator会被惩罚：

      (1)	双重出块：一个区块提出者，提出了多个新块
    
      (2)	FFG 投票矛盾：FFG投票时，结果和自己之前的FFG投票产生矛盾，举例说明： 如果在Epoch 5，投了source Slot 32, target Slot 128；
    

*   在Epoch 6，再投了source Slot 64，target Slot 96
    
*   在 Epoch 6，再投了 source Slot 0, target Slot 160 这两种都会产生矛盾
    
    (3) FFG双重投票：在同一个Epoch内投票两次，通常在分叉的时候发生，如下图，蓝色箭头表示两次FFG投票。
    

![](https://storage.googleapis.com/papyrus_images/110c2eb527e79503d1f87bbd3a1f02919fb90a9ae107d8159d0a8f910ea61640.png)

或者两次投票source相同但target不同：

![](https://storage.googleapis.com/papyrus_images/1c9202a686aae9203a49d4f29802a9359ce25616d041bafa5e295d31a8043861.png)

---

*Originally published on [Crypto Ryan](https://paragraph.com/@crypto-ryan/pos-ethereum-2-0-2)*
