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

一个Validator是指在信标链上的虚拟实体,可参与以太坊的共识机制,它对应一个质押余额,一个公钥和一些其他信息。每个Validator需要质押32个ETH来激活,这32 ETH也是每个节点的初始和最大投票权。而且,质押更多的大于32个ETH到同一个公钥中,并不会增加收益,所以人们也没有动机那样做,这样以太坊的质押量就是以32的整倍数增加的。
每个Validator质押量相等,即权利相当,防止某个节点权力过于集中,配合上每单位时间内Validator减少数量受限(即退出质押的ETH数量受限)的机制, 可使总体质押分布更加稳定,预防某些攻击。
下面介绍一些概念:一个Slot指一个区块可上链(信标链或Shards分片)的时间区间,长约12秒,一个Epoch由32个Slot组成,长约6.4分钟

Validator可以担当两种不同的角色:
(1) Proposer: 区块的提出者,由伪随机算法选出,它负责组装并提出一个区块
(2) Attesters: 区块的见证者,负责给信标链区块(或分片区块)投票,这些投票被记录在链上,来决定共识的上链区块头

见证消息(attestation)是Validator对 ETH 2.0 区块链当前状态的投票,权重由质押量决定(最多32 ETH),见证消息也需要被在网络中广播并记录在区块中。Validator也会互相监督,因为提出其他人的矛盾投票、重复出块的证据会被奖励
委员会 (Committee)
一个委员会由一组Validator构成,在一个Slot的范围内做见证工作,为了足够安全,要至少包含128个Validator。在每个Epoch中,RANDAO伪随机算法都会为每个slot选出一个proposers 和一个委员会。并且所有当前活跃的Validator都会被平均分到32个Slot中的一个。

FLP 不可能原理
在网络可靠、但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。安全性、活性、异步,这三点不能共存。
安全指决定不能被撤销,活性指必须做出新的决定,异步系统中一条消息的传递时间可能没有上限。

在以太坊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 投票

这张图片展示了三个连续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)

如上图,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)

见证
一个见证包含一个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投票。

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


