以太坊试图实现去中心化,但存在技术牺牲和未实现目标的问题。本文提出了三种解决方案,以获得最大回报,最大的验证者将拥有262144个ETH,攻击成本约为900万ETH。此方法的优点是可识别的形式保留了单独的质押,未来可以通过硬分叉来提高负载。
原文标题:Sticking to 8192 signatures per slot post-SSF: how and why
原文作者:vbuterin
原文来源:ethresear
编译:Kate, 火星财经
以太坊与大多数其他(最终确定性)权益证明系统之间的主要区别在于,以太坊试图支持非常多的验证者:我们目前有895,000个验证者对象,简单的Zipf定律分析表明,这对应于成千上万个独特的个人/实体。这样做的目的是为了支持去中心化,甚至允许普通个人参与权质押,而不要求每个人都放弃自己的代理权,并将控制权交给少数权益池之一。
然而,这种方法需要以太坊链处理大量的签名(今天约28000个,SSF后为1790000,这是一个非常高的负载。支持这种负载需要大量的技术牺牲:
• 它需要一个复杂的证明传播机制,包括在多个子网之间分割证明,需要超优化BLS签名操作来验证这些签名,等等。
• 我们还没有一种明确且足够高效的直接抗量子替代方案。
• 像视图合并这样的分支选择修复变得更加复杂,因为无法提取单个签名。
• 捕捉签名很困难,因为签名太多了。Helio需要通过专门的额外签名进行操作,称为同步委员会签名。
• 它通过在一个slot中要求三个子slot而不是两个来增加安全的最小slot时间。
乍一看,签名聚合系统似乎是合理的,但实际上,它造成了系统的复杂性,并在各个地方蔓延开来。
此外,它甚至没有实现其目标。质押的最低要求仍然是32个ETH,这对许多人来说是遥不可及的。从逻辑分析来看,从长远来看,让每个人都在每个slot签名的系统真正实现普通人的质押似乎是不可行的:如果以太坊有5亿用户,其中10%的用户质押,那么这意味着每个slot有1亿个签名。从理论上讲,在这种设计中,处理削减至少需要每个数据槽12.5 MB的可用空间,大致相当于完整daksharding的目标(!!)。也许是可行的,但是要求质押本身依赖于数据可用性采样是一个很大的复杂性收益——即使这只占世界人口质押的0.6%,并且还没有开始进入验证许多签名的计算问题。
因此,与其依赖密码学家创造神奇的子弹(或神奇的防弹技术)来使每个slot的签名数量不断增加,我建议我们做出一个哲学上的转变:从一开始就不要有这样的期望。这将极大地扩展PoS设计空间,并允许大量技术简化,通过允许Helios直接在以太坊共识上进行SNARK,使其更加安全,并通过使即使是无聊的长期存在的签名方案(如Winternitz)变得可行来解决量子阻力问题。
许多非以太坊区块链,面对这个确切的问题,使用基于委员会的安全方法。在每个slot中,它们随机选择N个验证者(例如:N ~= 1000),这些验证者负责最终确定该slot。值得提醒的是,为什么这种方法是不够的:它没有提供问责制。
为了了解原因,假设51%的攻击确实发生了。这可能是一种最终还原攻击或审查攻击。为了使攻击发生,你仍然需要控制大部分质押的经济参与者同意参与攻击,在运行参与攻击的软件的意义上,所有验证者最终被选为委员会的成员。随机抽样的数学原理保证了这一点。然而,他们为这种攻击所招致的惩罚是很小的,因为大多数同意攻击的验证者最终都没有被看到,因为他们没有被选为委员会的成员。
目前,以太坊走的是相反的极端。如果发生51%的攻击,那么整个攻击验证者集合中的很大一部分将被削减存款。目前攻击的成本约为900万ETH(约200亿美元),并且假设网络同步以最大程度地有利于攻击者的方式中断。
我认为这是一个很高的代价,但它太高了,我们可以在这件事上做出一些牺牲。即使攻击成本为1- 200万ETH也应该是完全足够的。此外,今天以太坊存在的主要集中化风险是在一个完全不同的地方:如果最小存款规模减少到接近于零,大规模的质押池也不会那么强大。
这就是为什么我提倡一种适度的解决方案:一种在验证者问责制上做出一些牺牲,但仍然保持可削减ETH的总量相当高,但作为交换,我们获得了较小验证者集的大部分好处。
在SSF下,每个slot 8192个签名是什么样子的?
假设传统的两轮共识协议(就像Tendermint使用的那样,也像SSF不可避免地使用的那样),每个参与验证者的每个slot需要两个签名。我们需要解决这个现实。我认为有三种主要方法可以做到这一点。
方法一:全力投入去中心化的质押池
Python包含了一个非常关键的行:
应该有一种——最好只有一种——明显的方法来做到这一点。
对于质押平等化的问题,以太坊目前违反了这一规则,因为我们同时执行两种不同的策略来实现这一目标:(i)小规模的单独质押,以及(ii)使用分布式验证者技术(DVT)的去中心化质押池。由于上述原因,(i)只能支持部分质押者,总会有很多人的最低存款数额太大。然而,以太坊正在为支持(i)支付非常高的技术负担成本。
一种可能的解决方案是放弃(i),全力投入(ii)。我们可以将最小存款规模提高到4096个ETH,并使验证者的总上限为4096个(约1670万个ETH)。小规模的投资者预计加入DVT池:要么提供资金,要么成为节点运营商。为了防止攻击者的滥用,节点运营商角色需要以某种方式进行声誉保护,并且质押池将通过在这方面提供不同的选项来竞争。资本提供将是未经许可的。
我们可以通过限制惩罚,使这个模型中的集合质押更加“宽容”。占总质押的1/8。这将减少对节点运营商的信任,但由于这里概述的问题,值得谨慎处理此问题。
方法二:两层质押
我们创建了两层质押者:具有4096 ETH要求的“重”层参与最终确定,以及没有最低要求(也没有存取款延迟,也没有削减漏洞)的“轻”层,增加了第二层安全性。对于要最终确定的区块,重层需要最终确定它,轻层需要有>= 50%的在线轻验证者对它进行验证。
这种异构性有利于审查和抵抗攻击,因为攻击需要同时破坏重层和轻层才能成功。如果其中一层被破坏而另一层没有,链就会停止。如果损坏的是重层,则重层可以受到惩罚。
这样做的另一个好处是,轻层可以包括ETH,同时作为应用程序内部的抵押品使用。它的主要缺点是,它规定了小规模质押者和大型质押者之间的界限,从而使质押变得不那么平等。
方法三:轮流参与(即:委员会,但要负责)
我们采用了一种与这里提出的超级委员会设计类似的方法:对于每个slot,我们选择4096个当前活动的验证者,并且我们在每个slot期间仔细调整该集合,以确保我们仍然具有安全性。
然而,在这个框架中,我们做出了一些不同的参数选择,以获得“最大的回报”。特别是,我们允许验证者以任意高的余额参与,如果一个验证者拥有超过一定数量的ETH(必须是浮动的),那么他们在每个slot都参与委员会。如果一个验证者有N<M ETH,那么他们在任何给定的slot中都有N/M的概率在委员会中。
我们在这里使用的一个有趣的杠杆是将激励目的的“权重”与共识目的的“权重”解耦:委员会内每个验证者的奖励应该是相同的(至少对于拥有≤M ETH的验证者),以保持平均奖励与平衡成正比,但我们仍然可以使委员会中的验证者数量以 ETH 为权重。这确保了打破最终性需要的ETH数量 大于1/3委员会中ETH总数。
Zipf定律分析可以计算出ETH的数量如下:
• 在总余额的每个2次方级别上,将有许多验证者与该余额级别成反比,并且这些验证者的总余额将是相同的。
• 因此,委员会将有相等数量的ETH从每个余额级别参与,但高于障碍M的级别除外,因为验证者始终在委员会中。
• 因此,我们在每个log2(M) 级别上都有k个验证者,在以上的级别上有k+k/2+…=2k个验证者。所以k = 4096 / (log2(M)+2)。
• 最大的验证者将拥有一个M*k ETH。我们可以反向计算:如果最大的验证者有2的18次方ETH,即262144个ETH,这意味着(大致)M = 1024, k = 256。
• 质押的ETH总额是:
° 前512个验证者的全部质押(2359296)
° 加上随机抽取的小质押(约2的18次方)
° 我们总共获得了2621440个ETH,或者攻击成本约为900k ETH。
这种方法的主要缺点是协议内的复杂性更高,随机选择验证者的方式使得我们即使在委员会发生变化时也能获得共识安全。
其主要优点是,它以一种可识别的形式保留了单独的质押,保留了一级系统,甚至允许将最小存款规模降低到非常低的水平(例如:1 ETH)。
如果我们在后SSF协议中建立这一点,我们希望坚持使用8192签名,这使得技术实现者以及轻客户端等侧基础设施的构建者的工作更容易。对于任何人来说,运行一个共识客户端变得更加容易,用户、质押爱好者和其他人将能够立即摆脱这种假设。以太坊协议的未来负载不再是未知的:它可以在未来通过硬分叉来提高负载,但只有当开发人员确信技术已经足够改进,能够以相同的轻松程度处理更多数量的每个slot签名时。
剩下的工作将是决定上述三种方法中的哪一种,或者我们想要采用完全不同的方法。这将是一个我们愿意接受哪些权衡的问题,特别是我们如何处理与之相关的问题,比如流动性质押,这些问题可以与现在更容易的技术问题分开解决。