本文探讨了Casper协议中关于去中心化、最终确认时间和开销之间的权衡,介绍了经济最终确认性的定义,并通过数学模型分析了三者之间的关系。文章还提出了四种可能的解决方案,并讨论了验证者池与非确定性阈值签名的作用。
随着 Casper 不断趋向于更加稳定的形式,对将在协议中设置的各种参数的兴趣也在增加,包括利率、费用、提款周期、速度、质押所需的最低 ETH 数量等。本文将是系列文章中的第一篇,试图描述涉及的各种权衡,并将重点关注具有经济最终性属性的协议中的去中心化和效率。
首先,我们将简要定义经济最终性(我们假设 2/3 的阈值;Vlad Zamfir 会快速指出,我们实际上希望节点能够设置自己的阈值)。
经济最终性,第 1 版:状态 H 是经济上最终的,如果至少 2/3 的验证者签署了一条证明 H 的消息,并且在任何不包含 H 的历史记录中,他们将失去全部押金。
经济最终性,第 2 版:状态 H1 是经济上最终的,如果足够多的验证者签署了一条证明 H1 的消息,并且如果 H1 和一个冲突的 H2 都被最终确定,则有证据可以证明至少 1/3 的验证者是恶意的,因此销毁他们的全部押金。
目前,我和 Vlad 都在致力于支持第 2 版的协议。但无论如何,请注意经济最终性的两个版本都要求(i)至少 2/3 的验证者签署某条消息,以及(ii)网络验证这些消息*(关于后者,巨大的星号因为实际上有绕过此限制的方法,但这些基本上是分片的形式,因此我认为它们不适用于"最大简化"的 Casper 版本)。
这现在意味着,为了使状态 H 被最终确定,网络必须验证来自至少 2/3 验证者池的消息。从这个简单的事实中,我们得到了三者之间的深层权衡:
理想情况下,我们希望最小化最终时间,最大化去中心化,并最小化开销。但不幸的是,我们不能同时做到这三点。具体来说,从上面关于验证者消息的事实中,我们得到这个数学公式:
f o ≥ d 2/3
其中 f 是以秒为单位的最终时间,o 是开销,d 是验证者池的大小(去中心化)。这是物理学中著名定律“速度 = 距离 / 时间”的简单翻译:如果你需要在 f 秒内处理 d 2/3 消息(“距离”),那么每秒的消息数量(“速度”)是 d 2/3 / f。请注意,实际上,一致性协议需要多轮消息传递,因此 f o ≥ d 2 是可能的,通常情况下,会有超过 2/3 的节点上线。因此,为方便起见,我们就用:
f * o ≥ d
现在,让我们在这个公式中插入一些参数以说明这一点。考虑一种类似 PBFT 的机制,其中区块 n 在开始区块 n+1 之前总是被最终确定,并假设区块时间为 10 秒。假设你想支持 500 个验证者。那么,10 * o ≥ 500,因此开销至少为每秒 50 条消息。
现在,考虑一个基于链的权益证明,具有 5 秒的区块时间,因此 o = 1/5,并假设有 10000 个验证者。那么,f / 5 ≥ 10000,因此 f ≥ 50000(即 14 小时)。一种中间路线是选择 1000 个验证者,每秒 1 条消息的开销,最终时间为 1000 秒(约 15 分钟)。你可以随意将自己的数字插入这个公式中,看看哪些配置是可行的,哪些不可行。重要的结论再次是,我们不能完全同时拥有这三样好东西。
因此,有四条前进的路径:
请注意,在类型 1 经济最终性的背景下,你可以尝试获得“部分”经济最终性(例如,获得 3.33% 的验证者押金签署一条消息,这仍然是一大笔钱,且仅需 1/20 的时间以获取 67% 的验证者押金),但在类型 2 经济最终性的背景下,你无法做到这一点,因为只有超过 50% 的验证者签署某个状态时,你才会获得经济最终性。此外,在任一情况下,我们可以找到在三者之间妥协的方法。
请注意,我们在 椭圆曲线配对预编译 上的工作是重要的,因为,结合 zk-SNARKs,这种原语可以用来实现确定性阈值签名。因此,我们可以拥有一个系统,在基础层面上有大约 100 个验证者,但希望这些“验证者”中有许多将是池。 这些验证者的验证代码将是阈值签名的验证器(可以在常量时间内计算),而阈值签名证明至少 2/3 的池参与者批准了给定的哈希。每个池本身可能有数十名甚至数百名参与者。
为什么我们不能在顶层使用确定性阈值签名?首先,它们并不透露 谁 参与了,只是足够多人参与了,因此我们不知道该奖励谁,处罚谁。其次,它们与加密抽象的目标相悖,我们希望协议的每个用户,包括验证者,都能够使用他们想要的任何加密方式。
从理论上讲,这些池可以以多种不同方式进行管理。两种最明显的范式是:
完全开放的池是有风险的,因为攻击者可以用许多身份加入池,并实质上以 51% 进行攻击;因此,完全开放池的参与者有失去资金的风险,而这并非他们所做的错。然而,攻击者损失的钱大约与他们的受害者一样多(即,干扰因子约为 ~0.5–2)。封闭池更安全,但当然,它们依赖于人们有互相信任的不合谋的朋友。可以说,这种类型的池允许在现实中具有相当可接受的去中心化水平,只要基础验证者集中有足够的“插槽”,以便可以创建许多不同的池。
还有另一种类型的质押池,它使用受信任的硬件而不是确定性阈值签名;有关更多信息,请参阅 Loi Luu 最近的博客文章。请再次注意,这种设计并不要求整个网络信任某一个特定品牌的受信任硬件;相反,它只要求该特定池的参与者这样做,实际使用这种方案的强大网络可能会包括许多不同的池,以及许多不同的受信任硬件解决方案,此外还有用户更喜欢确定性阈值签名或单独操作。
除了效率外,质押池还有另一个优势:它减轻了单个参与者的负担,以 (i) 100% 上线,并且 (ii) 不被黑客攻击。
给定一个验证者的数量(例如 d = 1000),下一个问题是:这如何转换为对用户个人非常重要的另一个变量 - 他们需要多少 ETH 才能成为(基础层)验证者?对这一点有几个公式:
为了检查 最坏情况 ,我们得到一个简单的数学公式:
total_deposited_ether = min_deposit_size * number_of_validators
原因希望是显而易见且不具争议的。现在我们可以允许目标高于最低存款规模的人进行更大存款,并计入这笔存款。如果发生这种情况,实际上我们将得到优于最坏情况的结果。假设 齐夫律 是正确的,即在给定存款规模下,愿意成为验证者的数量与该规模成反比,因此,例如,在 1000 ETH 的情况下有 10 倍的愿意验证者,而在 10000 ETH 时则少得多。假设存在一个愿意成为规模为 largest_validator_size/n 的验证者,其中 n ≥ 1 是任意整数,largest_validator_size 本身则是模型的输出。
现在,固定一些 number_of_validators。最大的 k 个验证者所存入的总 ETH 数量,即为 largest_validator_size/n 在 1 ≤ n ≤ k 的求和,可以近似为 largest_validator_size * (ln(k) + 0.5)(其中 ln 是自然对数),因此我们得到以下方程:
number_of_validators = largest_validator_size / minimum_depositor_size
total_deposited_ether = largest_validator_size * (ln(number_of_validators) + 0.5)
如果我们固定任意两个变量,则可以求解其他两个变量。假设我们将最低存款设置为 500 ETH,并假设存入了 1000 万 ETH。那么,我们可以解方程,得到的结果是:
如果我们将最低存款降低到 50 ETH,那么我们得到 19291 个验证者;如果将其增至 1500 ETH,则得到 911 个验证者。或者,我们可以反过来计算:如果我们想目标为 1000 个验证者,那么最低存款将在均衡状态下约为 1350 ETH。请注意,这一切假设如果你想加入更多的存款是可以的;如果没有这一属性,那么权衡将按 ~log(n) 的因子恶化,作为存款较大的验证者时,他们必须将自己的存款拆分到多个账户中,并在每次状态被最终确定时执行多次签名。因此,支持高于最低的可变存款规模被认为是一件好事。
- 原文链接: medium.com/@VitalikButer...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!