文章讨论了以太坊在支持大量验证者方面面临的挑战,以及由此产生的技术复杂性和效率问题。Vitalik 提出了一个哲学上的转变,即不再期望每个区块都由大量验证者签名,转而采用更小规模的验证者集合,并探讨了三种可能的方案:完全依赖去中心化 Staking 池、双层 Staking 机制以及轮换参与的委员会模式,旨在简化协议设计、提高安全性,并为轻客户端等基础设施建设带来便利。
以太坊和大多数其他(具有最终性的)权益证明系统之间的一个主要区别是,以太坊试图支持非常大量的验证者:我们目前有 895,000 个验证者对象,并且一个简单的 Zipf 定律分析表明,这对应于数万个独立的个人/实体。这样做的目的是支持去中心化,允许即使是普通人也能参与质押,而无需每个人都放弃他们的代理权并将控制权让给少数几个质押池之一。
然而,这种方法要求以太坊链在每个 slot 处理大量的签名(目前约为 28,000 个;SSF 后为 1,790,000 个),这是一个非常高的负载。支持这种负载需要大量的技术牺牲:
签名聚合系统乍一看感觉合理,但实际上它创建了系统性复杂性,这种复杂性蔓延到了所有地方。
此外,它甚至没有实现它的目标。质押的最低要求仍然是 32 ETH,这对于许多人来说是遥不可及的。仅从逻辑分析来看,让每个人都在每个 slot 签名的系统_真正_实现普通人在长期内的质押似乎是不可行的:如果以太坊有 5 亿用户,其中 10% 的人进行质押,那么这意味着每个 slot 有 1 亿个签名。从信息理论上讲,在这种设计中处理 slashing 至少需要每个 slot 12.5 MB 的数据可用性空间,大致相当于完整 daksharding 的目标(!!!)。也许可行,但要求质押本身依赖于数据可用性抽样是一个很大的复杂性提升——即使这样也只有约 0.6% 的世界人口进行质押,并且还没有开始涉及到验证如此多签名的_计算_问题。
因此,与其依靠密码学家来创造魔法子弹(或魔法防弹证明)来实现每个 slot 越来越多的签名,我建议我们做一个哲学上的转变:从一开始就放弃这种期望。这将极大地扩展 PoS 设计空间,并允许大量的技术简化,通过允许 Helios 直接对以太坊共识进行 SNARK 证明来使其更安全,并通过使即使是像 Winternitz 这样无聊的、长期存在的签名方案也变得可行来解决抗量子问题。
许多非以太坊区块链在面临完全相同的问题时,使用基于委员会的方法来保障安全。在每个 slot 期间,它们随机选择 N 个验证者(例如,N ~= 1000),这些验证者负责最终确定该 slot。值得提醒的是,为什么这种方法是不够的:它没有提供问责制。
要了解原因,假设确实发生了 51% 攻击。这可能是最终性回滚攻击或审查攻击。为了使攻击发生,你仍然需要控制大部分权益的经济参与者_同意_参与攻击,即运行参与攻击的软件,并让所有最终被选入委员会的验证者都参与。 随机抽样的数学原理确保了这一点。然而,他们因这种攻击而受到的惩罚是微不足道的,因为大多数同意参与攻击的验证者最终没有被看到,因为他们没有被选入委员会。
目前,以太坊采取了相反的极端。如果发生 51% 攻击,_整个_攻击验证者集合中的很大一部分的存款将被削减。目前,攻击的成本约为 900 万 ETH(约 200 亿美元),并且这假设网络同步中断的方式最大程度地有利于攻击者。
我认为这是一个很高的成本,但它_太高_了,我们可以承受在这方面做出一些牺牲。即使攻击成本为 100-200 万 ETH 也应该完全足够。此外,目前以太坊存在的主要中心化风险完全存在于一个完全不同的地方:如果最低存款规模降低到接近于零,大型质押池的权力也不会_那么_小。
这就是为什么我提倡一个适度的解决方案:一种在验证者问责制方面做出一些牺牲,但仍然保持总的可削减 ETH 数量相当高的解决方案,但作为交换,我们获得了更小验证者集合的大部分好处。
假设使用传统的两轮共识协议(如 Tendermint 使用的协议,以及 SSF 不可避免会使用的协议),则每个参与验证者都需要每个 slot 两个签名。我们需要解决这个现实问题。我看到了三种主要的方法可以做到这一点。
Python 之禅包含一个非常关键的句子:
应该有一种——最好只有一种——显而易见的方法来做到这一点。
对于使质押具有平等性的问题,以太坊目前违反了这一规则,因为我们同时执行了实现此目标的_两种_不同的策略: (i)小规模的个人质押,以及 (ii)使用分布式验证器技术(DVT)的去中心化质押池。由于上述原因,(i)只能支持_一些_个人质押者;总是会有很多人觉得最低存款规模太大。然而,以太坊正在承担支持(i)的非常高的技术负担成本。
一个可能的解决方案是放弃(i)并全力以赴地发展(ii)。我们可以将最低存款规模提高到 4096 ETH,并将验证者总数限制为 4096 个(约 1670 万 ETH)。小规模质押者将被期望加入 DVT 池:要么提供资金,要么成为节点运营商。为了防止攻击者滥用,节点运营商的角色需要以某种方式受到声誉的约束,并且池将通过提供这方面的不同选项来竞争。资金提供将是无需许可的。
我们可以通过限制惩罚(例如,总提供权益的 1/8)来使此模型中的池化质押更“宽容”。这将允许减少对节点运营商的信任,但由于此处概述的问题,值得谨慎对待。
我们创建两层质押者:一层是具有 4096 ETH 要求的“重型”层,参与最终确定,另一层是_没有_最低要求的“轻型”层(也没有存款和取款延迟,也没有 slash 漏洞),可以增加第二层安全性。要使区块最终确定,_重型_层需要最终确定它,_并且_轻型层需要有 >= 50% 的在线轻型验证者证明它。
这种异构性有利于审查和攻击抵抗,因为需要同时腐败_重型_层和轻型层才能使攻击成功。如果一层被腐败而另一层没有被腐败,则链停止;如果被腐败的是重型层,则可以惩罚重型层。
这样做的好处是,轻型层可以包括同时用作应用程序内部抵押品的 ETH。主要的缺点是通过确立小规模质押者和较大规模质押者之间的鸿沟来降低质押的平等性。
我们采取一种与此处提出的超级委员会设计类似的方法:对于每个 slot,我们选择 4096 个当前活跃的验证者,并且我们在每个 slot 期间仔细调整该集合,以使其仍然具有安全性。
但是,我们做出了一些不同的参数选择,以便在此框架内获得“最大的收益”。特别是,我们允许验证者以任意高的余额参与,并且如果验证者拥有超过某个数量 M 的 ETH(这将必须是浮动的),则他们会在每个 slot 中都参与委员会。如果验证者具有 N < M ETH,则他们在任何给定 slot 中进入委员会的概率为 \frac{N}{M}。
我们在这里拥有的一个有趣的杠杆是分离用于激励目的的“权重”与用于共识目的的“权重”:每个验证者在委员会中的奖励应该相同(至少对于 \le M ETH 的验证者而言),以使平均奖励与余额成正比,但我们仍然可以使_共识_计数委员会中的验证者,并按 ETH 加权。这确保了破坏最终性需要数量等于 > \frac{1}{3} 的委员会中 ETH 总量的 ETH。
一个粗略的 Zipf 定律分析将计算出 ETH 的数量如下:
这种方法的主要缺点是在协议中需要更多的复杂性,以便以一种即使在委员会变更的情况下也能获得共识安全性的方式来随机选择验证者。
主要的优点是它以一种可识别的形式保留了个人质押,保留了一个单一类别系统,甚至允许将最低存款规模降低到非常低的水平(例如 1 ETH)。
如果我们确定在 SSF 后的协议中,我们希望坚持使用 8192 个签名,这将使技术实施者以及轻客户端等侧面基础设施的构建者更容易完成工作。对于任何人来说,运行共识客户端都变得容易得多,并且用户、质押爱好者和其他人可以立即根据该假设开展工作。以太坊协议未来的负载不再是一个未知数:可以通过硬分叉在未来提高它,但前提是开发人员确信技术已经足够改进,能够以相同的轻松程度处理每个插槽更多的签名情况。
剩下的任务是决定我们想要采用上述三种方法中的哪一种,或者也许是完全不同的东西。这将是一个我们对哪些权衡感到满意的问题,特别是我们如何处理流动性质押等相关问题,这些问题可以与现在变得更加简单的技术问题分开解决。
- 原文链接: ethresear.ch/t/sticking-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!