本文深入探讨了以太坊的共识机制,从早期的工作量证明(PoW)转变为权益证明(PoS),并详细描述了PoS的运作原理、验证者的角色和经济激励机制。文章还阐述了区块的验证过程、处理恶意行为的方法以及最终性机制,为读者提供了一把理解以太坊共识的钥匙。
这是一系列关于区块链的文章中的一部分。如果这是你看到的第一篇文章,我强烈建议你从系列的开始阅读。
在之前的两篇文章中,我们重点讨论了允许以太坊(以及与EVM兼容的链)执行我们用户创建的程序的机制。并不是任何类型的程序 — 精确来说是智能合约,这是唯一能够改变在区块链上存在的不可变的custom state 的逻辑。
但正如我们在这一点上已经知道的,这只是部分故事。
你可以使用像 Hardhat 或 Foundry(使用 Anvil)等工具启动一个_local_区块链(节点)。这些工具能够理解如何执行交易和智能合约,但它们不会是真正的区块链——在这种意义上,这样的节点与外部世界是_disconnected_的。
我们需要做的是与其他网络参与者达成共识。与其他节点一致同意所谓的state of the world。并遵守这样做所暗示的规则。
因此,终于是时候讨论以太坊的共识了。
在这网络的早期,以太坊选择的共识机制是工作量证明(PoW) — 至今比特币仍然使用的相同机制(至少在原则上是如此)。
我们已经讨论过 这个机制所存在的一些问题:吞吐量低(即网络的低交易处理速度)、能耗高,以及挖矿集中在大型矿场的事实,而不是一个真实的去中心化系统,像Bob那样可以参与到他计算机中的节点。
不过,我必须说,真正的去中心化是非常难以实现的。我们会在我们的旅程中讨论这一点,不用担心。
以太坊基金会(Ethereum Foundation)识别出了这些缺陷,并试图将方向引向不同的轨道。
从概念上讲,以太坊突破性地为区块链提供了dynamic state management。但公正地说,在提出_新共识机制_时,web3(即基于区块链的)生态系统已经繁荣发展,涌现出了大量具有不同价值提议的区块链—以及新共识机制。
我的意思是新的共识算法权益证明(PoS)并没有像智能合约的推出那样新颖和颠覆。然而,以太坊进行转换的方式,还是相当有趣的,我们将在下一篇文章中讨论这一点。现在让我们探索一下_PoS_是如何运作的。
但首先,先简单回顾一下PoW。
正如你可能记得的,几篇文章之前,_工作量证明_是一种依赖于_困难谜题_来提供公平性的共识机制。这里我们有几点需要关注:
但带来这些好处的那个谜题,也是该机制最大的设计缺陷:它是_极其低效_的。大量的时间和计算资源被花费在解决这个谜题——部分哈希前映问题——而不是直接增长区块链。
自然,我们可能会想:是否必须是这样的? 这个问题的答案是极为肯定的no。当然,这并不像简单地调整几下旋钮那么简单:我们必须完全重新思考我们对共识的理解。
我们需要两个主要成分作为任何良好共识机制的基础:
我们稍后会谈到第二点,但先让我们关注前者。我们该如何做到这一点?
在比特币中,节点在_随机时间_生成有效区块,因为网络中的某个节点随机地解决了谜题。决定区块“有效”的是某个随机数(nonce)的存在,该数在我们将所有区块内容传入哈希函数时会生成一个非常特定的哈希输出。
然而,交易本身并不一定是有效的。由于这一点,每个节点都会检查他们接收到的每个区块。如果任何交易无效,那么整个区块都会被拒绝。在这种情况下,我们可以说该区块实际上是_被网络拒绝_的。
换句话说,我们不信任任何人。这符合常见的座右铭:
不要相信,验证。
这一切都源自于生产区块的节点没有以任何方式被控制。他们只需要付出努力。找到一个有效的随机数就足够使一个区块有效,但我们仍需要检查交易。
那么,我们何不尝试让这个_西部牛仔_的世界变得有序,分配一些_角色_呢?
在权益证明中,矿工被_验证者_所取代。这里的关键思想是,验证者有一个特定的角色:_提议_和_验证_区块。这些验证者不需要解决任何密码学谜题——因此,效率低下的问题就不复存在了。简单,对吧?
可并非如此!为了让这一切运作,我们需要定义一些事项。例如:
这些问题是完全可以的 —— 坚实的答案才构成了一个可靠的共识机制!
让我们从最后一个问题开始。我们可以采取一些_交叉检查_区块的措施。当然,验证者负责这个验证过程。
确实如此!
但我们需要问自己:什么算是无效区块?
从根本上说,这就是一个包含不符合网络规则的交易的区块。由于各种原因,交易可能是无效的,例如:
关键的差异在于,这些无效区块是如何被处理的。无效区块_可以_被提议,但有一种激励措施不这样做:验证者(提议者)在游戏中有所投入。
这意味着什么?如果你提议了一个无效区块而且你的尝试被其他验证者发现,你将会被惩罚。
如何惩罚,你问?这就引出了我们刚才提出的问题:_谁_可以成为验证者?
答案在于协议本身的名称:stake。
不,不是那种牛排……尽管那看起来很好吃……
要成为以太坊的验证者,节点必须将_exactly 32 ETH_存入质押合约。这有两个目的:它赋予你提议区块的特权,同时也是一个_保安金_或债券。
我必须承认,这个32 ETH的数值乍看起来似乎有点随机。但实际上,这是一个经过仔细选择的数值,主要旨在保持验证者数量在健康的范围内。
如果验证者表现不当,或者通过提议无效区块或者在应当验证时离线,他们的一部分资产可能会被削减(拿走)。
我们得到的是一个经济惩罚机制。当然,验证者也有_正向激励_参与共识——就像在比特币中一样,他们为自己的努力获得回报。
好吧,假设你质押了32 ETH,并且你现在正在运行一个验证者节点。祝贺你!接下来会发生什么?
我们不再需要进行计算竞赛来确定谁提议一个区块——我们现在有一组_验证者_愿意将他们的权益投入来提议有效的区块。
我们需要做的就是决定如何_协调_验证——我们如何选择做什么,并在何时做。
以太坊的_PoS_协议使用伪随机选择过程(使用可验证随机函数),每个活跃验证者都有_同等机会_被选择为下一个区块提议者。但请记住——我们还需要其他节点来_验证_新的区块。因此,除提议者外,还会选出一个验证者委员会。
通常会选择128个旁证者。提议者和验证者委员会(或旁证者)每12秒轮换一次,这就是以太坊生产区块的时间。
此外,当验证者需要提议和验证区块时,他们会在短时间内被通知。这使他们得以妥善准备,以免浪费空闲时的资源。
这个系统的美妙之处在于其效率。没有计算资源浪费在解决谜题上。网络基于削减机制的经济威慑——节点的恶意活动使其的权益变得:
平静。
现在,幸福的道路是相当容易理解的。委员会中的验证者将证明提议的区块是有效的,并且当至少_2/3_的委员会确认区块有效时,该区块将被“接受”。
值得注意的是,证明具有一些结构——它们不仅仅是对新区块的投票。它们还有一些额外的信息,比如每个旁证者认为的链的头——最后一个区块。并且它们也是签名的!
我们稍后会讨论“接受”意味着什么。但首先:当某个验证者发现有可疑情况时,究竟会发生什么?
我们需要区分不同类型的恶意行为:
最后一个问题可能听起来不像“恶意活动”。但请记住:在去中心化的世界中,我们无法信任任何人。因此,我们无法区分诚实的断开连接与故意的不活动——所以两者都被视为恶意行为。
每种场景的处理方式各不相同。
在区块无效的情况下,如果旁证者诚实,该区块将简单地不会被他们确认,所需的_2/3_接受度将无法达到。区块就在岸上“死掉”,而验证者实际上会浪费其获得奖励的机会。真是不幸。
不活动 就是罚款开始的地方。因为本质上,如果足够多的验证者处于不活动状态,网络将无法生成区块。这些验证者开始通过小罚款逐渐失去一部分他们的权益,而惩罚会随着时间的推移而增加。
_双重提议_被认为是更严重的情况。这就像是故意造成系统混乱。对此有密码学证据,因为验证者所进行的所有操作都是签名过的——我们称之为_可证明的恶意_活动。在这种情况下,发生削减,被抓到的验证者的一部分权益将会被烧掉。
削减!
这一设计的巧妙之处在于,惩罚与罪行相当。诚实的错误或临时的连接问题导致罚款较小,而故意的恶意行为则受到更为严厉的惩罚。
还值得注意的是,削减并不会立即发生。存在一段时间(我们称之为提取期),被削减的验证者在这段时间内不能提取剩余资金。在此期间,协议可以对发现的新的证据(如协调攻击)施加额外的处罚。
目前,这段时间大约约为27小时。
那么,这就是_权益证明_的提炼总结。自然,这只是高层的概述,设计细节并未详尽覆盖——但这些应该足以提供该系统如何运作的良好想法。
这个机制还启用了_工作量证明_中不可能实现的事情:区块最终性。让我们在下一个部分讨论这个。
不要与致命性相混淆。
↓ → ← ← 踢
到目前为止,我们谈到了区块“接受”。
在比特币中,我们看到网络可能会出现临时分叉。这带来一个不愉快的后果:我们不能知道区块链上的最新区块是否会最终成为区块链的一部分,或是否最终会被丢弃。因此,我们必须等待区块确认——超过我们所关注的区块的区块。
显然,能够确定区块是否被包括在区块链的能力对我们用户至关重要。事实上,这一概念有其自身的名称:当我们可以确保一个区块会被永久记录在区块链上时,区块或交易被称为最终化(或final,或者具有finality)。
比特币具有概率最终性。这意味着我们永远无法_100%_确定一个区块是否在区块链上,但这种情况不发生的概率随着每个区块确认急剧降低。区块在区块链上越深入,发生此情况的概率就越低。
至少,这一点并不方便。
然而,在权益证明中,有件有趣的事情发生——在某个时刻,每个区块都会拥有_绝对_或_确定性_最终性。但这究竟是如何实现的?
我们已经谈到了以太坊中时间是如何_组织_的。_时隙_是提议和投票新区块的12秒的时间段。
还有时段。时段是_32个时隙_的组(约6分半钟)。在每个时段结束时,验证者会投票选出一对检查点——该epoch中的第一个和最后一个区块。
他们需要投票,因为这是一个分布式系统,因此他们对网络的当前状态可能有不同的看法。
以类似于区块验证的方式,当一个检查点收到了_2/3_验证者的投票时,该检查点变得已证明。当这种情况发生时,任何之前已证明的检查点(在区块链上更深处的)都将变为最终化。
在实际操作中,这意味着大约过了_2_个时段(大致为_12–15_分钟),你的交易达到了绝对最终性。到那时,你可以绝对确定你的交易将被包含在区块链上!
好吧,几乎绝对确定。事实是,如果网络愿意损失大量的ETH通过削减,那么理论上验证者可以重写网络历史的一部分(甚至区块链)。但目前有数十亿美元价值的ETH处于质押之状态——所以安全性基于没有人愿意损失那么多。
这是一个相当强大的假设。
这个绝对最终性机制称为Casper FFG(友好最终性小工具)。这是在转向_PoS_的同时实施的重要升级之一。
相当酷吧?
新的和改进的以太坊共识机制减轻了许多旧_工作量证明_系统的问题。它引入了一组不同的问题,这些问题通过强有力的经济模型和巧妙的分布式系统架构得到了解决。
当然,背后隐藏着更多复杂性。但再次强调,这个系列的目的并不是提供所有超级深度的见解,而是保持在总览的层面。我认为今天的文章在这之间的某个地方比较舒适。
权益证明有不同的变体——以太坊的方案并不是_唯一_的可能方式。其他区块链也引入了一些调整和变化,旨在实现更低的区块时间、更高的吞吐量、更快的最终性或更强的安全保证。我相信这是一个好事——因为更好的机制被发现后,我们的用户整体体验应该得到改善。
我们将很快讨论PoS的变体和其他共识机制。
到现在,我们已经涵盖了关于以太坊的诸多内容。下次,我们将结束这一区块链的章节,以便向前探求新的视野。
下次见!
- 原文链接: medium.com/@francomangon...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!