当前,(信标链) 以太坊区块需要 64-95 个 slot (约 15 分钟) 来实现最终敲定。在去中心化/敲定时间/开销权衡曲线上,选择这样一个中等时长、在任意维度都不差的权衡是合理的:15 分钟不算太长,与当前的交易所的确认时间相当,且这允许用户在常规计算机上运行节点,即使有大量质押了 32 ETH (而不是早期要求的 1500 ETH) 的验证者也能如此。然而,有很多关于将敲定时间减少到单个 slot 的很好论据。本文是一个处于研究状态的帖子,评估了一些用于实现此目的可能策略。
撰文:Vitallik Buterin
编辑:南风
特别感谢 Justin Drake、Dankrad Feist、Alex Obadia、Hasu 和其他人对这篇文章不同版本的反馈和评论。
当前,(信标链) 以太坊区块需要 64-95 个 slot (约 15 分钟) 来实现最终敲定。在去中心化/敲定时间/开销权衡曲线上,选择这样一个中等时长、在任意维度都不差的权衡是合理的:15 分钟不算太长,与当前的交易所的确认时间相当,且这允许用户在常规计算机上运行节点,即使有大量质押了 32 ETH (而不是早期要求的 1500 ETH) 的验证者也能如此。然而,有很多关于将敲定时间减少到单个 slot 的很好论据。本文是一个处于研究状态的帖子,评估了一些用于实现此目的可能策略。
当前,大约有 285,000 个验证者,这些账户已经存入了 32 ETH,因此可以参与以太坊 staking (质押)。验证者数量并不与实际参与质押的用户 (质押者) 数量完全对应:一些富有的质押者可能控制着数百个验证者。32 ETH 的最低质押要求限制了可能的验证者账户数量,确保了以太坊链仍然拥有计算能力来处理这些账户。
每个 slot (12 秒) 会有一个新区块被添加到链中。在每个 slot 中,还有数千个 (由验证者提交的) 证明 (attestations),用于对 (信标链) 链头进行投票。有一个称为 LMD GHOST 的分叉选择规则,该规则会将这些证明作为输入,来确定链的头部。这种由数千个证明进行的并行投票,使得以太坊要比传统的最长链系统更加强健:除非发生一次主动攻击 (active attack) 或者一个重大的网络故障,不然即便是单个 slot 也几乎永远不会被逆转 (恢复)。
这些证明还有第二个目的:它们在一个称为 Casper FFG 的大规模共识算法中扮演着选票 (votes) 的角色。每个 epoch (每 32 slots 称为一个 epoch,约 6.4 分钟),所有活跃的验证者都有机会进行一次证明。两轮之后,如果一切顺利,前一个 epoch (以及其中的所有区块) 将被敲定 (finalized)。一旦某个区块被敲定了,逆转该区块将至少需要所有验证者中的 1/3 验证者数量销毁它们的存款 (质押金):攻击成本超过了 300 万 ETH。
持续地审查验证者或交易同样成本高昂,尽管抵抗审查攻击需要额外的协议干预。如果 51% 的验证者开始审查 (验证者或交易),受害者和用户可以协调发起一个少数软分叉 (minority soft fork),他们在彼此的区块上构建,并忽略该攻击者。在这个少数软分叉上,该攻击者的存款将因为其受到了怠工惩罚 (inactivity leak) 而损失数百万 ETH,几周后,这条链将恢复敲定。
尝试改变现状并将敲定时间缩短在单个 Slot 完成,这里面有几个关键原因:
不是所有验证者都参与每一轮 Casper FFG 共识,而是只有一个由几千名验证者组成的中型超级委员会 (a medium-sized super-committee) 参与,从而允许每一轮共识都在单个 Slot 中发生。相关的技术思想首先在这篇 etheresear.ch 帖子中进行了介绍:
https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259
该帖子对这个想法进行了更加详细的介绍,但其核心原则如下:
上图:如果某个委员会未能执行确认职责,那么区块链将使用分叉选择规则来决定哪个区块是链头,并对该委员会的验证者进行怠工惩罚,直到这些验证者的余额被削减到某一个程度,即剩余的验证者中有超过 2/3 的验证者余额处于在线,且该委员会再次执行确认。
从全局验证者转向超级委员会还有一些刺激效益:
就验证者数量而言,超级委员会的规模应该“大到足以成为一个安全的委员会”。但委员会也必须在其 ETH 总量 (即委员会中所有验证者的总质押量) 方面足够大。被罚没和被怠工惩罚的 ETH 数量需要大于从攻击中实际可以获得的收益,而且它需要足够大,以阻止或使强大的攻击者破产,因为攻击者有巨大的外部动机来破坏这条链。
这个需要多少 ETH 的问题不可避免是一个直觉问题。你可以问下面这些问题来引导你的直觉:
上图:针对“你认为攻击以太坊的最低成本是多少?”的以太坊研究人员内部调查结果。
如果我们只关注不依赖延迟的 51% 攻击,那么 100 万 ETH 的攻击成本将意味着一个「超级委员会」的规模是 200 万 ETH (大约 65,536 名验证者),如果我们还将涉及到复杂的恶意验证者和网络操控结合起来的 34% 攻击,那么超级委员会的规模应是 300 万 ETH (大约 97,152 名验证者)。但如果我们想要以太坊链的负载保持在今天的水平 (每个 slot 约 9000 名验证者,也即大约 288,000 ETH),这对应的攻击成本为 96,000 到 144,000 ETH。这两个数字之间仍有很大的差距。
因此,除非以太坊社区能够相信攻击以太坊的成本更低是可以接受的 (记住:攻击者仍然需要控制 50% 以上的所有被质押的 ETH,这只是他们将失去的数量),否则仅依靠这条路径似乎很难。
假设我们确实想要一条在每个 slot 都有大量验证者参与的区块链 (比如,每个 slot 有 131,072 名验证者,也即相当于保守的是 400 万 ETH)。那么这个基础上的性能数字将是怎样的呢?
事实证明,拥有大量验证者来证明每个 Slot 的链上成本并没有看上去那么高:
仍然存在的最大问题是签名聚合。单个 Slot 中生成和发送签名的验证者有 131,072 名,这些签名需要快速地组合成一个大型聚合签名。
今天,签名聚合是在 p2p 子网中完成的。每个包含了 256 名验证者的委员会都有其自身子网络的签名聚合。有 16 个随机选择的特权聚合器,它们可以进行签名聚合并将它们提交到主子网 (main subnet)。然后,区块提议者然后从每个委员会中取最佳的签名聚合,并将它们加在一起,形成一个大的签名聚合。如下图所示:
这给每个小组委员会带来了负载,其中验证者需要单独验证签名,特别是在发生攻击,使得网络充斥着无效签名的情况下,且在全局子网中,如果有n
个委员会,提议者必须验证16 * n
个签名。
聚合很可能是未来两年内显著优化的目标。目前,实际应用中最大的瓶颈是每个子网的负载,特别是对于需要在多个子网中的节点而言。
通过两种有前景的简单方法可以获得显著的改进:
支持更多验证者的一种可能的更激进的策略是,将签名聚合转变为一个更专门化的角色 (类似于 PBS (提议者/构建者分离) 方案中的区块构建者),在这个角色中,我们希望专业的参与者能够持久地存在于每个子网 (甚至所有子网) 中,并能够很好地收集签名。这些参与者可以是有偿的,也可以是自愿的角色 (因为对于已经质押了许多验证者的用户来说,这个额外成本非常低)。
针对这种情况的一个简单的协议是允许验证者签名一条 ProposedAggregate
消息,其中包含 (i)一个聚合签名,(ii) 参与者的位字段 (假设有 131,072 名验证者,那么只有 16 kB),以及 (iii) 聚合器对这两个对象的签名。
提议者将侦听 ProposedAggregate
消息息,并验证那条有着最高参与人数的签名。如果该签名有效,则提议者将打包该签名;如果无效,则提议者将因为验证该签名而损失大约 130 秒,然后继续验证下一个有着第二高参与人数的聚合 (如果需要,还可能会继续验证参与人数第三高的聚合,等等),所有无效 ProposedAggregate
消息的聚合器将可能受到罚没 (slashing) 惩罚。
转向单个 Slot 确认是一个需要多年时间的路线图;即使很快就会开始大量的开发工作,它也将是以太坊在完成 PoS、分片和 Verkle 树的推出之后,这将是以太坊之后的重大变化之一。总的来说,实现的路径大致如下:
在单个 slot 实现敲定的最终好处将是非常显著的,技术可以随着时间的推移而改进,以实现本文没有描述的其他好处 (比如,使用增加的最大验证者计数来减少最小 ETH 质押量)。因此,这篇文章中所描述的技术挑战值得我们尽快开始更深入、更专注的研究和开发。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!