合并后的第一天:快速回顾 PoS 以太坊设计

来源:@stonecoldpat0

作者:Patrick McCorry

能源消耗

合并后的能源消耗会减少 99.8%。这是可以公开验证的,而排除一切合理的质疑后,可以说使用/运行以太坊不会对环境造成影响。没有,没有,一点都没有。这就少了一个问题,可以说服新手尝试、采用和使用加密货币。

可扩展性

PoS 的转变不会影响可扩展性。PoW 和 PoS 是抗女巫攻击的共识机制。它的目标在于:限制可以参与区块生成过程的人。它只会找到共担风险且因此理性行动的参与者。

引用推文:https://twitter.com/el33th4xor/status/1006931658338177024

slot、epoch 和委员会

一个 epoch 有 32 个 slot。在一个 epoch 里,整个验证者集将被平均至每一个 slot,这样委员会的规模就等于所有验证者除以 32。在一个 slot 里,一个委员会成员提议了区块,剩余的成员则对此进行投票。(BLS 产生随机信标)

同步和投票

slot 是指 12 秒的时隙:

  • 0 - 4 秒:提议区块

  • 4 - 12 秒:投票和计票

最好的情况下,会正常进行区块提议和投票。有时候,提议者可能会离线,那就不会有区块被提议出来。

处理被跳过的区块

如果区块提议者离线了,那么:

  • 委员会成员(slot 96)会投票给上一个区块

  • 下一个委员会继续正常运作

就像所有的区块链一样,这能促使一条权威链的形成,因为区块链生产者/验证者必须扩展一个父块。

最新区块和分叉处理

在链的顶端进行分叉是可以的:

  • 区块提议者已经提议了两个或以上的区块(罚没情况,但区块仍然存在)

  • 发生延迟而区块到达了下一个 slot。

这时候,该 slot 的委员会成员需要选择一个区块。

分叉选择规则的重要性

委员会成员应该基于同一套规则选择“最重的链”(heaviest chain):

  • 选择最多投票的分叉

  • 票数平局情况下选择最低哈希的区块

  • Proposer boost: 如果区块在这个 slot 被提议了,选择有 70% 额外票数的区块

引用推文:https://twitter.com/hasufl/status/1570316069306503170

区块变坏

如果绝大多数的委员会成员都把票投给同一个区块,那么:

  • 未来的委员会将会延续胜出的区块

  • 竞争的分叉区块则会变“坏”或者“被丢弃”

分叉选择规则:跟随票数积累最多的链。

弱主观性

由于“投票”和“长程攻击”的性质,所以我们不可能接收来自不受信任来源的区块链副本并验证它是不是“一条真正”的链,而是必须依靠于社会共识和众所周知的检查点:【博客链接】

引用文章:Proof of Stake: How I Learned to Love Weak Subjectivity | Ethereum Foundation Blog

最终确定性

我们可以理解下面这句保证:“一旦区块敲定,它将永不可逆转”。

两个阶段:

  • 验证:在 1 个 epoch 后,下一个候选区块就会被敲定。

  • 最终确定:在 2 个 epoch 后,绝对多数已经给它投票了(两次)。

两个区块树

PoS 以太坊的魅力在于,它有两个组成:

  • 通过 LMD Ghost 机制实现活性(跟随最重的区块分支(heaviest branch))

  • 通过 Casper 的 FFG 实现安全性(选择一个区块并敲定它)。

epoch 的链给予我们信心,而 slot 链的顶端则是“待处理的世界状态”

攻击者:占质押存款的 1/3 以上

攻击者无法控制交易的排序,但是他们可以攻击最终确定性。只会在 2/3 以上的验证者投票给一个区块时,它才能进行敲定。如果它只获得了少于 2/3 的票数,那么它就无法验证或敲定。

不作为惩罚

诚实的验证者会继续在 slot 中生产区块,并慢慢排除那些不遵守分叉选择规则的验证者。最终,不投票者会失去足够的质押存款,这样诚实的验证者就能占比 2/3 以上的质押。

两条平行的链

如果说不作为惩罚发生了,那是因为:

  • 一个验证者集想要审查一笔交易

  • 另一个验证者集想要打包交易

每一个验证者集将会对另一个验证者集进行“不作为惩罚”。这导致了两条链的诞生。这是平和的分叉。

攻击者:占质押存款的 1/2 以上

他们控制了“分叉选择规则”并决定忽略那些打包了审查交易的区块。就比如在 PoW 机制中,他们无法改变共识规则,只能控制交易的排序。但据我所知,在这种情况下“不作为惩罚 (inactivity leak)”将不会被启动。

以太坊的守卫者

在面对审查的时候,我们能够做什么?答案是一次用户激活的软分叉!总的来说,我们可以强制退出(并潜在地)通过分叉代码来罚没攻击者。这是一种有针对性的攻击,不会损害诚实验证者的利益。

引用推文:https://twitter.com/stonecoldpat0/status/1560040361447260163

多客户端主题

目标:避免会让区块/无效交易被永远敲定的零日攻击。但这需要多少个客户端?嗯,另一个出现的问题是因为不作为惩罚。如果两个占比 50% 的客户端出现分歧,那么他们最终会变成两个平行的世界。

任何单个客户端无法激活漏洞

当运行一个客户端组合的验证者所占的质押存款占比大于33%时,不作为的惩罚才会变得有意义。通过运行少数人使用的客户端,你可以最小化所有因为软件漏洞而造成的损害。阅读更多请看这里:https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html

惩罚不等于罚没

区别:

  • 惩罚:只是很小的问题,不会对网络造成损害

  • 罚没:验证者作出了公开可检测且恶意的行为

如果验证者触发了罚没条件,他们就会被强制移出网络。阅读更多:

引用文章:https://eth2book.info/altair/part2/incentives/slashing/

两种罚没情况

1. 在同一个 slot 里投票/提议两个或以上的区块(强制每个 slot 一张票规则的执行)

2. 提议“包含”了一个你已经投过票的分叉的分叉(抵抗长程攻击)

我做了一个基于图上公式的视觉图帮助大家理解。

无论如何,我希望你们喜欢这条推文。以太坊已经变更了它的共识协议,从工作量证明机制转向权益证明机制,这份成绩非常了不起。这也是为什么以太坊、它的路线图/技术以及社区都非常好的。

以太坊是实验的天堂。