本文深入探讨了以太坊的权益证明(PoS)机制,特别是Gasper算法,包括其检查点、惩罚机制(slashing)、GHOST算法以及分叉处理。文章揭示了PoS的五个关键原则,并将其与工作量证明(PoW)的相应特性进行了对比,强调了PoS在激励结构、权限控制、规则灵活性、主观信任和权力分配上的根本差异,最后作者表达了对PoW的偏好。
2022年8月29日
通常,比特币人不太关心在山寨币领域发生的事情,但现在以太坊已经合并到权益证明 (PoS),比特币推特上引发了不少讨论。当然,比特币网络本身不会受到影响,但我认为这种“升级”仍然值得关注。既然以太坊已经清除了与工作量证明(PoW)相关的“肮脏”和“浪费”的外部性,我们可以预期在叙事之战中不再有所保留,我认为比特币人应该准备好反击。
学习 PoS 的工作原理是真正理解 PoW 和 PoS 之间差异和权衡的好方法。即使我之前已经看过所有反对 PoS 的高级论点——PoS 更具许可性、中心化和寡头性——我承认,如果不深入研究细节,这一切都感觉有点含糊其辞。通过实际深入研究 PoS 算法,我们可以开始看到所有这些属性是如何从第一性原理中自然产生的。因此,如果你对 PoS 算法的工作原理以及为什么它会导致这些属性感到好奇,请继续阅读!
解决双重支付问题
让我们从快速回顾一下我们试图解决的问题开始。假设我们有一个加密货币网络中的庞大参与者群体,试图维护一个去中心化的账本。问题是:如何将新的交易添加到每个人的账本中,以便每个人都同意哪些新交易是“正确的”? PoW 非常巧妙地解决了这个问题:交易被分组到区块中,而每个区块都需要大量的计算工作才能生成这个区块。所需的工作量可以上下浮动,以确保平均每十分钟生成一个区块,从而使每个新区块都有足够的时间在下一个区块创建之前在整个网络中传播。任何歧义都通过选择工作量最大的链来解决,并且由于需要至少 51% 的全局哈希算力才能赶上双重支付区块,因此可以防止双重支付。
但假设现在我们想要抛弃中本聪的关键见解,而正是这个见解使得这一切成为可能。毕竟,那些讨厌的 ASIC 既吵闹又烦人,而且它们消耗的能量比乔治·索罗斯、比尔·盖茨和希拉里·克林顿的私人飞机加起来还要多。有没有办法我们可以明确地同意哪些交易是真实的,仅仅通过交谈就可以做到?
以太坊的权益证明使用两个关键要素来解决这个问题。首先是每隔一段时间创建特殊的“检查点块”,其目的是向网络中的每个人保证系统在不同时间点的“真相”。创建检查点需要 2/3 的权益多数投票,因此可以某种程度保证大多数验证者同意当时什么是真相。第二个要素是惩罚用户向网络添加歧义,这个过程称为“罚没”。例如,如果一个验证者创建了一个分叉,或者投票给一个较旧的侧链(类似于 51% 攻击),那么他们的权益将被罚没。验证者也可能因不活跃而被罚没,但程度较轻。
这引出了我们 PoS 背后的第一个原则,即 PoS 基于负面(基于惩罚)的激励系统。这与比特币和工作证明形成鲜明对比,后者是一种积极(基于奖励)的激励系统。在比特币中,矿工可以尝试违反规则——格式错误的区块、无效的交易等等——但这些区块只会被忽略。最坏的情况是浪费了一些能源。矿工也可以自由地在旧区块上构建,但如果没有 51% 的哈希算力,这些链永远无法赶上,同样只是浪费能源。任何参与这些行为的矿工,无论是故意的还是无意的,都不必担心失去他们积累的比特币或矿机。比特币矿工不必生活在恐惧中,而是可以冒险采取行动。
对于生活在以太坊的验证者来说,世界是一个非常不同的地方。验证者不做实际的工作,而是必须小心他们的节点永远不会出现问题,否则他们会眼睁睁地看着他们的储蓄化为灰烬。如果要对网络进行任何拟议的更改,验证者的第一反应将是遵守其他所有人都在做的事情,否则就有被罚没的风险。作为一名验证者,就是每天如履薄冰。
顺便说一句,根据 Vitalik 的 FAQ,生活在负面激励系统下是权益证明的“好处”之一:
那么罚没在技术层面上是如何运作的呢?我们难道不需要首先创建一个所有验证者的列表,以便首先有一些东西可以罚没吗?答案是肯定的。要成为以太坊中的验证者,必须首先将 ETH 转移到特殊的“质押”地址。这个列表不仅是罚没所需要的,而且也是投票所需要的,因为检查点区块需要 2/3 的多数票。
始终维护所有验证者的列表有一些有趣的含义。加入有多难?离开有多难?验证者是否可以投票决定其他验证者的状态?这引出了我们 PoS 背后的第二个原则,即 PoS 是一个许可系统。
成为验证者的第一步是将一些 ETH 存入特殊的质押地址。需要多少 ETH?最低要求是 32 ETH,或撰写本文时约为 50,000 美元。作为参考,一台像样的比特币矿机通常运行在几千美元的范围内,而家庭矿工可以从几百美元的单个 S9 开始。为了公平起见,ETH 的高入场费有一个 技术上的理由,因为更高的权益意味着更少的验证者,从而降低了带宽。
因此,押金很高,但至少任何拥有 32 ETH 的人都可以随时自由加入或离开,对吗?不完全是。如果大量的验证者联盟同时进入或退出,就会存在安全风险。例如,如果网络中的大多数人一次性全部离开,那么他们可以通过重放一个他们从未离开的分叉来双重支付一个最终确定的区块,而不会在任何一条链上被罚没。为了减轻这种风险,上下坡道都有一个内置的吞吐量限制。目前,此限制设置为每个 epoch(每 6.4 分钟)max(4,|V|/65536)
个验证者,并且进出都相同。这大约转换为每十个月完整的一组验证者。顺便说一句,即使目前验证者可以发布“退出”交易并停止验证,但实际提取资金的代码甚至还没有编写出来。听起来有点像加州旅馆……
关于批准新验证者背后的动机的最后一点。假设你是一家大型稳定公司中的股东,该公司每个季度都会定期支付股息。免费赠送新股有意义吗?当然没有,因为这样做会稀释所有现有股东的股息。PoS 中存在类似的激励结构,因为每个新验证者都会稀释所有现有验证者的收入。从理论上讲,验证者可以简单地审查每一笔添加新验证者的交易,但在实践中,我认为这种生硬的方法不太可能。这将非常明显,并在一夜之间摧毁以太坊的“去中心化”形象,从而可能导致价格暴跌。我认为会使用一种更微妙的方法。例如,随着时间的推移,规则可能会慢慢改变,使得成为验证者变得更加困难,并提供诸如“安全”或“效率”之类的借口。任何以牺牲新验证者为代价来丰富现有验证者的政策都将具有财务推动作用,无论是否大声说出来。我们可以开始明白为什么 PoS 会倾向于寡头统治。
Casper 算法概述
现在我们知道了 PoS 背后的高层战略,那么算法实际上是如何运作的呢?检查点和罚没背后的主要思想是在一个名为 Casper 的算法中提出的,所以我们将从那里开始。 Casper 本身实际上并没有规定如何生成区块,而是提供了一个框架,用于如何在一些已经存在的区块链树之上叠加一个检查点/罚没策略。
首先,选择一个任意常数 C 作为“检查点间距”数,它决定了检查点之间有多少个区块。例如,如果 C=100,那么检查点将出现在区块 0、100、200 等等处。然后,节点都投票决定哪个检查点区块应该是下一个“合理化”的检查点。验证者实际上不是单独投票选出单个区块,而是投票选出 (s,t) 检查点对,这些checkpoint对将一些先前已论证的检查点源“s”链接到一些新的目标检查点“t”。一旦一个检查点链接 (s,t) 获得 2/3 的权益多数投票,t 就会成为一个新的已论证的检查点。下图显示了一个检查点树的示例。
在此图中,h(b) 函数是指“检查点高度”,例如区块的 100 的倍数。你可能已经注意到,并非每个第 100 个区块都必须是已论证的,如果在某个高度投票失败,就会发生这种情况。例如,假设在高度 200 处,两个单独的检查点各获得了 50% 的选票。由于投票两次是可被罚没的违规行为,因此除非一些验证者愿意罚没自己的权益以获得 2/3 的选票,否则系统将“卡住”。解决方案是让每个人“跳过”检查点 200,并在区块 300 处“再次尝试”。
仅仅因为一个检查点被论证,并不意味着它被最终确定。为了使一个检查点被视为已最终确定,它必须紧随其后的是下一个可能高度的另一个已论证的检查点。例如,如果检查点 0、200、400、500 和 700 都被论证并链接在一起,那么只有检查点 400 会被视为“最终确定”,因为它是唯一一个紧随其后的是另一个已论证的检查点。
因为术语非常精确,让我们回顾一下我们的三个类别。“检查点”是任何发生在高度 C*n 的区块,因此如果 C=100,则高度为 0、100、200、300 等的所有区块都将是检查点。即使在高度 200 处创建了多个区块,它们都将是“检查点”。如果 2/3 的验证者投票创建一个链接,连接一些先前已论证的检查点和当前的检查点,则一个检查点将被“论证”,或者它是高度 0 的根区块。如果一个被论证的检查点,链接到了下一个可能高度的已论证检查点,则这个检查点被“最终确定”。不是每个检查点都一定会变得已论证,也不是每个已论证的检查点都一定会变得最终确定,即使在最终链中也是如此。
Casper 罚没规则
Casper 中的罚没规则的设计使得除非至少 1/3 的验证者违反了罚没规则,否则不可能在两个单独的分叉中存在两个已最终确定的检查点。换句话说,只有已最终确定的检查点才应被视为明确的“真相”区块。甚至有可能在分叉的两侧都出现两个已论证的检查点,只是不能有两个已最终确定的检查点。也不能保证下一个已最终确定的检查点何时何地出现,只是说如果发生链分裂,你应该坐下来等待,直到某个地方出现一个已最终确定的区块,一旦出现,你就知道那是“正确”的链。
Casper 中有两条强制执行此属性的罚没规则:
第一条规则禁止任何人对具有相同目标高度的检查点进行重复投票,因此如果一个验证者对两个不同的检查点区块进行了投票,而目标高度为 200,那将是一种可被罚没的冒犯行为。此规则的目的是防止链分裂成两个具有相同高度的不同已证明的检查点,因为这将需要 2/3 + 2/3 = 4/3 的验证者总票数,这意味着至少 1/3 的验证者违反了罚没规则。但是,正如我们之前看到的,已论证的检查点有可能“跳过”某些区块高度。是什么阻止链分裂成不同的目标高度?例如,检查点 200 能否在没有任何人被罚没的情况下分叉成高度为 300 和 400 的已证明的检查点?
这就是第二条规则的用武之地,它基本上阻止了验证者在其他投票中“夹击”投票。例如,如果一个验证者同时投票给 300→500 和 200→700,那将是一种可被罚没的冒犯行为。在发生链分裂的情况下,一旦一个分支看到一个已最终确定的检查点,除非至少 1/3 的验证者违反了规则 #2,否则另一个分支不可能在之后看到一个已论证的检查点。要理解为什么,假设区块链分叉成已论证的检查点 500→800 和 500→900,然后在某个时刻,第一条链看到一个已最终确定的检查点,其链接为 1700→1800。由于 1700 和 1800 只能在分叉 #1 上被验证(假设没有人违反第一条罚没规则),因此分叉 #2 在 1800 之后看到一个已论证的检查点的唯一方法是存在一些投票加入的链接,连接高度 H<1700 和 H>1800。但是由于此投票将“夹击”1700→1800 链接并需要 2/3 的投票,而 1700→1800 已经以 2/3 的投票通过,因此至少 1/3 的验证者需要违反规则 #2。 Casper 论文有一个很好的图表,演示了此属性:
就是这样,只需遵循 Casper 规则,你就没事了!
看起来很简单,对吧?我相信 PoS 只会将罚没作为维护共识的绝对最后手段,而不是作为一种勒索机制来迫使验证者以某种方式行事……对吗?
这引出了我们 PoS 背后的第三个原则:没有规则。“规则”是其他人说的任何内容。
有一天,你的节点可能在技术上遵循了每一条 Casper 戒律,而第二天,你的储蓄可能会被罚没,因为你在做一些其他人不喜欢的事情。曾经批准过一个 TEAM-RED 交易?明天 TEAM-BLUE 多数派就可能罚没你。或者也许你做了相反的事情,省略了太多 TEAM-RED 交易?明天 TEAM-RED 多数派可能会因审查而罚没你。罚没的能力远远超出了 OFAC 审查的有限范围。 PoS 就像一场不停歇的墨西哥僵局,随时都存在罚没的隐性威胁。
我不会感到惊讶,如果在有争议的硬分叉中,双方都对另一个分叉的验证规则进行了硬编码,以防他们想要惩罚任何加入“错误”一方的人。当然,这将是一个核选项,就像核弹一样,双方可能只会选择进行报复性打击。我猜大多数个人验证者都是“中立”的,因为他们会优先考虑财务上的自我保护,而不是政治上的自我牺牲,但如果他们感觉到这是避免被罚没的正确举动,他们可能会公开“站队”。
现在几点了?
现在我们了解了检查点和罚没的基础知识,我们可以继续讨论以太坊中使用的实际算法,称为 Gasper。这是 Casper(我们已经介绍过)和 GHOST 的合成词,GHOST 是一种用于在检查点之间选择“最佳”区块链的策略。
要了解 Gasper,首先要了解的是时间本身是主要的自变量。现实世界的时间被划分为称为“槽位”的 12 秒单位,每个槽位最多包含一个区块。然后,这些槽位形成更大的组,称为“epoch”,其中每个epoch都指向一个检查点。每个epoch包含 32 个槽位,使其长度为 6.4 分钟。值得注意的是,与 PoW 相比,这种范式颠倒了时间和区块生产之间的因果关系。在 PoW 中,区块之所以产生是因为找到了有效的哈希值,而不是因为过去了足够的时间。但在 Gasper 中,区块之所以产生是因为已经过去了足够的现实世界时间才能到达下一个槽位。我只能想象这样的系统可能会遇到哪些棘手的时序错误,尤其是当它不仅仅是一个程序在一台计算机上运行,而是数万台计算机试图在世界各地同步运行时。希望以太坊开发人员熟悉程序员对时间的误解。
现在假设你正在启动一个验证者节点,并且你是第一次同步区块链。仅仅因为你观察到某些区块引用了某些时间戳,你如何才能确定这些区块确实是在那些时间创建的?由于区块生产不需要任何工作,因此一群恶意的验证者难道不能从一开始就模拟出一个完全虚假的区块链吗?如果你看到两个竞争的区块链,你如何知道哪个是正确的?
这引出了我们 PoS 背后的第四个原则,即 PoS 依赖于主观真相。根本没有客观的方法来选择两个竞争的区块链,并且任何新的节点都必须最终信任一些现有的真理来源来解决任何歧义。这与比特币形成鲜明对比,比特币中“真实”的链始终是工作量最大的链。如果一千个节点都在告诉你链 X,如果单个节点广播链 Y 并且它包含更多的工作量,那又有什么关系呢,那么 Y 是正确的区块链。一个区块的头部可以证明自身的价值,完全消除了对信任的需求。
通过依赖主观真相,PoS 重新引入了对信任的需求。现在我承认,我可能有点偏见,所以如果你想阅读另一面,Vitalik 写了一篇文章,其中包含了他在此处的观点here。我承认,在实践中,鉴于 Casper 规则,链分裂似乎并不太可能,但是无论如何,我知道比特币中甚至没有这种可能性,这让我感到安心。
区块生产和投票
现在我们熟悉了槽位和epoch,那么如何生产和投票单个区块呢?在每个epoch开始时,完整的验证者集被“随机”划分为 32 个组,每个槽位一个。在每个槽位期间,一个验证者被“随机”选择为区块生产者,而其他人被选择为投票者(或“证明者”)。我将“随机”放在引号中,因为这个过程必须是确定性的,因为每个人都必须明确地同意相同的验证者集。但是,此过程也必须是不可利用的,因为区块生产者是一个高度特权的职位,因为它可以从矿工可提取价值中获得额外的奖励,或者正如它被重命名为“最大可提取价值”一样。一篇关于此的出色文章是 以太坊是一个黑暗森林。
一旦生成一个区块,其他验证者如何投票或“证明”它?区块提议应该发生在槽位的前半部分(六秒),证明应该发生在后半部分,因此理论上证明者应该有足够的时间投票选出他们槽位的区块。但是如果区块提议者离线、无法通信或在坏区块上构建会发生什么?证明者的工作不一定是投票选出该槽位的区块,而是投票选出从他们当时的视角来看“看起来最好”的区块。在正常情况下,这通常是该槽位的区块,但如果出现问题,也可能是较旧的区块。但是“看起来最好”在技术上是什么意思呢?这就是 GHOST 算法的用武之地。
GHOST 代表“贪婪最重观察子树”,是一种贪婪的递归算法,用于查找具有最多“最近活动”的区块。基本上,此算法查看所有最近的区块,以树的形式,并通过贪婪地选择在该整个子分支上具有最多累积证明的分支来向下遍历树。只有每个验证者的最新证明才计入此总和,并且最终此过程会在某个叶子区块上结束。
证明不仅是对当前最佳区块的投票,也是对导致该区块的最近检查点的投票。值得注意的是,在 Gasper 中,检查点是基于epoch而不是区块高度。每个epoch都精确地指向一个检查点区块,该区块是该epoch的第一个槽位中的区块,或者如果该槽位被跳过,则是该槽位之前的最新区块。如果一个epoch以某种方式跳过了每个槽位,那么同一个区块理论上可以成为两个不同epoch中的检查点,因此检查点使用(epoch,区块)对来表示。在下图中,EBB 代表“Epoch边界区块”,代表特定epoch的检查点,而“LEBB”代表“上一个Epoch边界区块”,代表整体上最近的检查点。
与 Casper 类似,一旦证明总数超过 2/3 的阈值,检查点就会变得合理化,如果在下一个epoch中立即跟随另一个合理化的检查点,则检查点就变得最终确定。下面显示了此投票如何工作的一个示例。
Gasper 中有两个罚没条件,类似于 Casper 中的罚没规则:
1) 不在同一个epoch中投票两次。
2) 没有投票可以包含“夹击”另一个投票的epoch检查点的epoch检查点。
尽管基于epoch而不是区块高度,Casper 规则仍然确保除非 1/3 的验证者可以被罚没,否则不会在不同的链上出现两个最终确定的检查点。
还值得注意的是,证明包含在区块本身中。与 PoW 中区块使用其哈希证明自身合理性类似,PoS 中的最终确定检查点使用其过去的所有证明证明自身合理性。当有人违反罚没规则时,这些不好的证明包含在一个区块中,该区块证明了违规行为。区块生产者因包含违规行为也会获得少量奖励,以便提供惩罚违规者的激励。
分叉
思考一下在发生分叉时会发生什么很有趣。为了快速回顾一下,分叉是指共识规则的更改,它们有两种类型:硬分叉和软分叉。在硬分叉中,新规则不向后兼容,如果不是每个人都切换过来,则可能导致两条竞争的区块链。在软分叉中,新规则比旧规则更严格,同时保持向后兼容。一旦超过 50% 的矿工或验证者开始强制执行新规则,共识机制就会切换过来,而不会拆分链。软分叉通常与升级和新的交易类型相关联,但它们在技术上还包括由 51% 的多数群体强制执行的任何类型的审查。 PoS 还有第三种 PoW 中不存在的“分叉”类型:在不更改任何规则的情况下拆分链。但是由于我们已经介绍了这一点,我们将重点关注硬分叉和软分叉。
让我们从最简单的情况开始:一个独立的存在争议的硬分叉。有争议的是,我指的是一种在政治上分裂用户的规则变更。错误修复或次要技术更改可能不会引起争议,但更改验证奖励之类的内容可能会引起争议。如果一个硬分叉具有足够的争议性,它可能导致链分裂,并由用户出售一条链并购买另一条链来以经济方式解决。这类似于 2017 年的 Bitcoin Cash 分裂, 似乎已经有一个明确的赢家:
现在假设验证者有一天坐在那里,并决定他们获得的报酬不足,因此决定将他们的奖励从 5%/年提高到 10%/年。这将是以牺牲非验证者为代价,以支持验证者的明显权衡,非验证者现在将被更多地稀释。如果发生链分裂,哪条链会赢?
这引出了我们 PoS 的第五个原则,即 金钱就是权力。在现有的 1.2 亿 ETH 中,超过 10% 的 ETH 目前正在被质押,如下图所示。
鉴于验证者和非验证者之间存在争议的硬分叉,假设所有非验证者都在市场上出售新链,而所有验证者都在市场上出售旧链,那么从理论上讲,旧链将获胜,因为大多数 ETH 仍将由非验证者持有(90% 对 10%)。但是还有一些事情需要考虑。首先,在任何链分裂之后,验证者仍然“控制”两条区块链。如果验证者能够影响另一条链,他们可能会被激励使其失败。其次,还有前面讨论的核选项,即新链可能会罚没仍在验证旧链的任何人,以此来迫使他们加入。最后,验证者可能会对网络中的每个人产生重大的社会和政治影响。如果 Vitalik、以太坊基金会和交易所一致决定他们要提高质押奖励,我很难相信普通的以太坊用户和验证者可以让旧分叉继续运行,同时还可以通过购买压力使其更有价值。
继续讨论软分叉,在有争议的软分叉中会发生什么,例如 OFAC 审查?如下图所示,验证者相当集中。
与 PoW 中矿工只需按下一个按钮即可切换矿池不同,以太坊中的验证者会被锁定到一个质押地址中,直到他们处理退出交易为止。如果 Lido 和顶级交易所被要求审查某些交易,他们可以轻松地通过决定检查点所需的 2/3 多数。之前我们已经看到 Vitalik 和其他 ETH 验证者如何尝试通过他们自己的反审查硬分叉来对抗审查软分叉,同时在此过程中罚没审查者。即使他们成功地创建了一个分叉,大量的价值也会在此过程中被破坏,无论是来自罚没还是来自信任的丧失。
结束语
在本文中,我们研究了 PoS 如何使用 Gasper 解决双重支付问题,Gasper 是一个检查点/罚没规则的组合,称为 Casper,以及一个“最佳区块”投票规则,称为 GHOST。总结一下,Gasper 将时间划分为称为槽位的单位,每个槽位最多可以有一个区块,并且这些槽位被分组为epoch,其中每个epoch都指向一个检查点。如果 2/3 多数投票选出一个检查点,它就会变得合理化,如果两个被合理化的检查点连续出现,则这两个检查点中的第一个检查点就会变得最终确定。一旦一个检查点变得最终确定,除非 1/3 的验证者可能被罚没,否则平行链就不能被最终确定。
在此过程中,我们发现了 PoS 的五个原则:
1) PoS 使用负面(基于惩罚)的激励结构。
2) PoS 是一个许可系统。
3) PoS 没有规则。
4) PoS 依赖于主观真相。
5) 在 PoS 中,金钱就是权力。
这些原则中的每一个在 PoW 中都具有相反的行为:
1) PoW 使用积极(基于奖励)的激励结构。
2) PoW 是一个无需许可的系统(任何人都可以随时开始或停止挖矿)。
3) 在 PoW 中,更改规则的分叉会被忽略。
4) PoW 依赖于客观真相。
5) 在 PoW 中,矿工为用户服务,自身几乎没有权力。
我相信每个人都应该努力创造他们想要生活的那种世界。如果像我一样,你想生活在一个无需许可的世界中,在那里你可以控制自己的资金,辛勤工作会得到回报,而被动所有权是一种负担,并且你的资金可以在遥远的未来存储其价值,而不会一时兴起地改变,那么你可能需要仔细考虑 PoW 和 PoS 之间的权衡,并为支持你想要生活的原则而战。
- 原文链接: scottmsul.substack.com/p...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!