以太坊 Casper FFG 机制

Dora Dōjo Workshop
资助金额:100 USDT
分享者:北邮在读硕士 Syshems
本项目由Dora Dōjo资助,文章转载请联系
Telegram: @DoraDojo0
WeChat: @DoraDojo0

以太坊 Gasper 协议是 Casper the Friendly Finality Gadget (Casper-FFG) 和 LMD-GHOST 分叉选择算法的组合,他们共同构成了确保以太坊权益证明的共识机制。 Casper 是区块链“最终确定”的机制,以便网络中的新参与者可以确信他们同步的链是正确合法的;分叉选择算法使用「累积投票」来确保节点在区块链中出现分叉时能够轻松选择正确的分叉;本课题旨在探究 Casper FFG 投票共识过程,包括委员会选举、出块人选举、委员会投票、区块广播等部分,细致拆解 PoS 以太坊的出块流程。关于 LMD-GHOST 分叉选择算法将在下期展开。

一、最终性 FINALITY

最终性是 PoS 以太坊区块链的一个属性,Finalized 的区块中的信息可以认为是区块链确定的,新加入网络的节点可以确信该区块的信息,并可以选择从该区块开始进行同步,而不必要从创世区块开始。除非网络出现严重的共识失败,或攻击者掌握了至少 1/3 的质押以太币,否则一旦 Finalized 的区块是没有办法回滚的。

区块必须经过两个步骤才能最终确定:

  1. 质押以太币总数的三分之二必须投票赞成将该区块接入合法链,一旦满足那么该区块就被 "justified” 。Justified 的块在一般情况下不太可能被会滚,可以视为只是 “预确认” 。
  2. 当另一个 justified 的块接在一个已经 justified 的区块后时,前一个块就被 “最终确定” 了。Finalized 的区块可以视为最终确认了,除非攻击者销毁数百万以太币(数十亿美元),否则无法造成回滚。

上述投票确定最终性不会在每个 slot 中发生,而是指发生在检查点(checkpoints)处,这意味着只有 epoch 边界的区块才能被证明和最终确定。在以太坊中每个 slot 为12秒,一个 epoch 为 32 个 slots,一共是 6.4 分钟。

二、检查点 checkpoint

检查点指的是每个 epoch 中的第一个 slot 中的区块,如果当前 slot 不存在区块,则检查点是前一个最近的块。 每个 epoch 必须有检查点区块,一个区块可以是多个 epoch 的检查点。如下图所示:

三、委员会和断言

区块提议者(Proposer)是被伪随机选择来构建区块的验证器。大多数时候,验证器是对区块进行投票的断言者(Attesters)。 这些投票记录在信标链中,并确定信标链的头部。

在每个 epoch 开始前,提议者和委员会都会伪随机选出并分配到一个 slot 。由提议者打包交易生成区块,先交由委员会进行投票,之后随区块广播到其他验证器。断言(Attestation)是验证器的投票,由验证器质押的以太坊加权。正确进行断言的验证器获得奖励,验证器之间互相监督,举报其他投票冲突或提出多个区块的验证者而获得奖励。离线的提议者会错过区块提议的机会,无法获得出块奖励。

3.1 断言

检查点间距是可以根据网络状况进行调整的。我们可以选择任意常数 C 作为 “检查点间距”,该参数决定了两个检查点之间间隔多少区块。举个例子,如果 C = 100,那就表示检查点会在区块高度 0、100、200、300、400 …… 上建立。然后,所有节点也要投票下一个 “合理化(justified)” 的检查点。见证者不是一次只投票一个区块,而是投票一对检查点 (s, t) ,其中 s 代表之前已经合理化的检查点,称为 “来源(source)” ;t 代表见证者希望它合理化的检查点,称为 “目标(target)”。一旦某一对检查点 (s, t) 获得以押金计算的 2/3 多数票同意,t 就会变成一个新的合理化的检查点。下图展示了一棵作为示例的检查点树。

并不是每发生 100 个区块就必然得到一个合理化的检查点,因为投票可能无法达成多数。举个例子,假设在区块高度 200 时,两个检查点分别获得了 50% 的票数。因为在同一时段中投票两次会被罚没,所以除非某些见证者被罚没,否则系统就会 “卡” 在这里。解决方案是大家 “跳过” 区块高度 200 的这个检查点,在区块高度 300 时 “再次尝试”。

3.2 大量签名带来的问题

原则上为了保证足够的去中心化,Validator 肯定是越多越好。上海升级以后优化了 Validator 的退出政策,使得 Validator 的进出更加平衡,数量上也更加稳定。鉴于 Validator 数量有几百 K ,Casper FFG 为了保证投票有序逻辑进行,将所有的 Validator 平均分布到一个 Epoch 中,也就是说一个 Epoch 每个 Validator 只有一次投票机会。每个 Epoch 被划分成 32 个 slot,每个 slot 又再次被划分成 128 个 committee ,committee 才是统计票数的基本单位,因为Validator 的数量一直在变化,但 committee 可以固定。

设想一下,每个 slot 会产生 56万/32 = 1.8 万个签名,假如每个签名 96 个字节,那么每个 slot 需要1.68M 来缓存投票签名,等到区块被确认之前需要缓存 107M 的签名数据,况且还有其它另外两个元素的数据。这就是大量的 Validator 带来的存储问题,同样也会带来计算问题,verifier 如果对每一个 Validator 的投票都进行一次验证,每个 slot 中的每个 verifier 都要对收到的 1.75 万份签名进行验证,是相当大的工作量。上述问题通过 BLS 签名得以解决。

四、奖励和惩罚

Casper 协议同时设定了断言的奖励和断言失败的惩罚。

  • Reward (except priority fee & MEV)
    • Attestation rewards (LMD GHOST & FFG votes):
      • head vote(14/64): 每个验证者在一个 epoch 内需要完成一次投票,选出信标链头;
      • source vote(14/64): the validator has made a timely vote for the correct source checkpoint;
      • target vote(26/64): the validator has made a timely vote for the correct target checkpoint;
    • Sync Committee(2/64):验证器参与同步委员会;
    • Proposal(8/64):平均 2 个月一次,当被随机分配出块权时,需要按照要求出块。
    • Slashing reward:极少见,此处不考虑;
  • Penaltyhttps://docs.rocketpool.net/guides/node/responsibilities.html
    • 错过 target/source votes 将会被惩罚和奖励同等数量的 ETH ;
    • 错过 Head vote 没有惩罚,但也得不到奖励;
    • 错过出块提案,不会收到惩罚,但也得不到奖励;
    • 没有同步委员会会受到惩罚,如果整个同步过程都离线会惩罚 0.1 ETH;
    • 不按时投票但没有错过投票的情况,没有惩罚,只是无法得到「及时投票」的奖励

  • SlashingProof-of-stake rewards and penalties | ethereum.org
    • Three ways of slashing
      • Being a proposer and signing two different beacon blocks for the same slot
      • Being an attester and signing an attestation that “surrounds” another one
      • Being an attester and signing two different attestations having the same target
    • Slashing machanism
      • Initial penalty:
        • 1/32 of the staked ether (maximum of 1 ether) is immediately burned, then a 36 day removal period begins
      • correlation penalty:
        • penalty scales with the total staked ETH of all slashed validators in the 36 days prior to the slashing event, all ETH may be wiped out in extreme situations.
  • Inactivity leak
    • Aim: create the conditions required for the chain to recover finality
    • How to activated?
      • If the consensus layer has gone more than four epochs without finalizing
    • Mechanism:
      • The inactivity leak lets the stake belonging to the inactive validators gradually bleed away until they control less than 1/3 of the total stake, allowing the remaining active validators finalize the chain.

参考

Gasper:Gasper | ethereum.org

Casper FFG Paper:https://arxiv.org/pdf/2003.03052.pdf

Beacon Chain:The Beacon Chain Ethereum 2.0 explainer you need to read first | ethos.dev

https://web3caff.com/zh/archives/40891(推荐)

https://ethos.dev/beacon-chain(英文)