【区块链科普】以太坊2.0系列 2 —— 区块的产出和确认
在上一篇文章中,我们大致介绍了以太坊2.0是什么以及其主要改进。在本篇中,我们将着重为大家介绍以太坊2.0的运行机制。
slot 和 epoch
以太坊2.0中有两个重要的时间概念:时隙 slot 和 时段 epoch。
图片来源:ethos.dev
一个 slot 为 12 秒,在每个 slot 中,信标链和分片都可能新增一个区块,即当系统在理想情况下运转时,每 12 秒就有一个信标(链)区块和 64 个分片区块产生。
为了便于理解,我们可以把 slot 看作以太坊2.0的出块时间,不同的是 slots 内可以没有区块,而最理想的情况则会产生65个区块。
每个 epoch 由 32 个 slots 组成,共384秒,也就是 6.4 分钟。
验证者 和 委员会
作为采用PoS机制的区块链,以太坊2.0信标链的运行依赖于验证者和委员会。
一个委员会由一组验证者组成。一名验证者在一个 epoch 中只能参与一个委员会。在每个 epoch 中,验证者们被均匀地分配到各个 slot 中。
混洗 (shuffling) 算法会适时调整每个 slot 中委员会的数量,以保证每个 slot (在信标链和每个分片里)的委员会至少由 128 位验证者组成。攻击者只有万亿分之一不到的几率,能控制一个委员会中 2/3 的验证者。
图片来源:ethos.dev
如图,下方蓝色这一排代表成千上万个验证者,RANDAO算法在验证人中选择每个slot的出块人(proposer),并把验证者们分配到各个 slot 中组成委员会(committee)。
验证者相当于以太坊 2.0 的虚拟矿工,一名验证者的生命周期大致可以分为三个阶段:
1)激活:当用户在以太坊主网的存款合约 (deposit contract) 里质押 32 个 ETH,就会激活一位验证者。
2)失效:当验证者的有效余额低于 16 ETH时,信标链就会停止这些验证者的工作。此外,验证者作恶并遭遇罚没(slash)也有可能导致停止运行。
3)退出:在工作 2048 个 epoch(接近9天)后,验证者可以自愿选择退出。退出时,质押者需要等待 4 个 epoch 才能撤出其质押金。在这 4 个 epoch 之内,验证者仍然有可能面临举报和罚没。
验证者的职责包括出块、LMD GHOST投票和Casper FFG投票。
信标链在通过一个伪随机算法 RANDAO 执行共识。该算法将根据验证者有效余额的权重,选择出区块提议者,其余验证者负责投票。
所有验证者都要在自己所在的 slot 中投票选出信标链头,这个过程被称为LMD GHOST投票。
而在发起一次LMD GHOST投票同时,验证者也要为最近一个 epoch 的检查点(目标检查点 target)和前一个 epoch 检查点(来源检查点 source)投票。该投票叫做Casper FFG 投票。
为了方便理解,我们可以粗略地将LMD GHOST投票类比为地方性选举,将Casper FFG投票视为全国性选举。
LMD GHOST 和 Casper FFG
LMD GHOST全称是 Last Message Driven Greediest Heaviest Observed SubTree,由最新消息驱动的 GHOST ,是以太坊2.0使用的分叉选择规则。
我们都知道,比特币等PoW机制的区块链在遭遇分叉时会遵循最长链规则,即哪一个方案得到的算力支持最高,出块速度最快,会被认为是权威链。而以太坊2.0的最终性由最新消息驱动,拥有最多投票的分叉链会被视为权威链。
图片来源:status
以上图为例,笑脸表示验证者证明,尽管最上面一条链才是最长链,但由于绿色这条链获得了最多的验证者证明,所以绿色这条链才是权威链。
Casper FFG 全称为Casper the Friendly Finality Gadget (Casper 友好的最终性工具) ,是V神提出的一个 PoW/PoS 混合算法,目的是使以太坊平滑地从PoW过渡到PoS。
有效余额
众所周知,权益证明(PoS)类似于现实中的股权体系,持有代币数量越多的节点拥有越高的权利享受更多的网络奖励,这种机制存在一个问题就是“富者愈富,贫者愈贫”,为此以太坊2.0引入了有效余额概念。
有效余额是根据每个验证者的当前余额和上一个有效余额计算得出的,它决定了每个验证者的投票权重和所能获得的奖惩金额。
有效余额遵守三个规则:
1. 有效余额不可能超过32 ETH。
2. 有效余额只能是1 ETH的倍数,小数点后面忽略不计。
3. 只有当实际余额比有效余额高1.5 ETH的时候,有效余额才会增加。
图片来源:Attestant
以上图为例,蓝色线是实际余额,绿色线是有效余额。
a. 在Time 3,验证者的余额跌至32 ETH以下。根据第二条规则,有效余额从32 ETH跌至31 ETH。奖惩金额是由有效金额决定的,因此奖惩力度变小。
b. 在Time 5,验证者的余额跌至31 ETH以下。根据第二条规则,其有效余额从31 ETH 跌至 30 ETH,奖惩力度进一步变小。
c. 在Time 9,验证者的余额提高到了31 ETH,但是没有达到第三条规则中提到的标准,因此有效余额不会上升,奖惩力度也保持不变。
d. 在Time 17,验证者的余额提高到了31.5 ETH。根据第三条规则,有效余额从30 ETH上升到31 ETH,奖惩力度变大。
检查点
以太坊2.0里的检查点 (checkpoints) 是位于 epoch 第一个 slot 里的区块,每个 epoch 都会有一个检查点区块。如果某个应为检查点的 slot 没有产生区块,那检查点就是往前的最近一个区块,因此一个区块可能同时是多个 epoch 的检查点。
图片来源:ethos.dev
以上图为例,slot 64 处的区块是 epoch 1的检查点,epoch 2 的检查点本来应该是位于 slot 128 处产生的区块,但由于从 slot 65 到 slot 128 之间都没有区块,所以 epoch 2 的检查点是从 slot 128 往前的第一个区块,即 slot 64 处的区块。epoch 3 同理,slot 192 处没有产生区块,因此 epoch 3 的检查点为 slot 180 处产生的区块。
证明 和 确认
前面讲的都是以太坊2.0的出块机制,那么区块又是怎么确认的呢?
首先明确介绍三个定义:
1)绝对多数:绝对多数(supermajority)是指某个投票获得了所有活跃验证者总有效余额 2/3 的支持。
2)证明:当一个 epoch 结束之后,如果其检查点得到了 2/3 余额票数,也就是形成了绝对多数,那么该检查点就被证明 (justified) 了。
3)最终确定:如果检查点A已经被证明,且其下一个 epoch 的检查点B也被证明了,那么 检查点A就被最终确定了 (finalized)。
图片来源:ethos.dev
我们可以通过一个例子更直观地理解区块确认,如上图所示:
1. slot 96处产生一个新的区块,标志着epoch 2结束。该区块内存储了关于epoch 2检查点(即slot 64处区块)的投票;
2. 信标链检查epoch 2检查点(即slot 64处区块)是否获得验证人超过2/3的证明;如果超过,则epoch 2检查点(即slot 64处区块)及epoch 1中的所有区块都被证明(justified);
3. 如果epoch 2检查点(即slot 64处区块)被证明,那么epoch 1检查点(即slot 32处区块)及之前被证明的所有区块都最终确定(finalized)。
参考文章
https://ethos.dev/beacon-chain/
https://www.attestant.io/posts/understanding-validator-effective-balance/
https://our.status.im/two-point-oh-justification-and-finalization/