两万字长文:Rollups的安全辩论

LU 万字 长文 2023-10-20 55

摘要:同样如果有人在Solana之上启动Rollup,它也不会神奇地成为一个「模块化」区块链。虽然我们今天将DAS和有效性/故障证明与传统Rollup联系起来,但我们应该注意到这些在逻辑上是不同的概念。当我们在本报告中讨论「Rollup」时,我们将指的是前者(即不是具有DAS有效性/故障证明的集成链,这可能被称为内置Rollup)。...

原文作者:Jon Charbonneau 原文编译:Frank,Foresight News

介绍

不管你喜欢还是讨厌,Twitter 可能永远不会停止关于「L2」或 Rollup 是否「继承安全性」(inherit security)的争论。

虽然大多数争论都是难以辨别的语义之战,但如果你能设法缩小争论范围,那么潜在的观点就非常有价值,因为它们触及了 Rollup 何时、何地以及为何有意义的核心问题。

可扩展的 L2 是否消除了市场对 L1 的需求?有没有可能将像 Solana 这样的 L1 变成 L2?

这些争论主要归结为安全问题。不幸的是,这里的「安全」定义一直非常难以捉摸。我们通常会随意使用这个术语,大多数人都大致知道我们在说什么,但又不完全清楚。我们将在这里跨不同架构详细分解安全性。

流行语定义

Rollup

我之前使用过 Mustafa 的以下定义:「Rollup 是将其区块发布到另一个区块链并继承该区块链的共识和数据可用性(DA)的区块链」。

以下则是 James Prestwich 给出了更一般的定义:「Rollup 是通过自定义状态转换函数,选择加入另一个共识机制,并保留超集状态的一种方式」。

两者都不需要验证桥,以最小的信任假设构建跨链桥接的能力是 Rollup 的主要好处,但单独分析它们至关重要。

我们可以考虑以下的 Rollup 标准:

  • Rollup 是通过在主链(DA 层)上的数据输入运行自定义状态转换函数(STF)而派生的有状态系统(例如区块链)。

  • 用于派生远程链的最终确认状态(即 Rollup)的所有输入数据(即完整的交易数据或状态差异)均在主链上确认。

  • 由于 Rollup 状态源自对主链上的数据运行的状态转换函数(STF),因此 Rollup 的有效性取决于主链的有效性。然后 Rollup 节点必须充分验证主链的共识和有效性(或对主链做出诚实多数假设);

Rollup 节点通过应用自身的状态转换函数(STF),在主链共识结果上确定 Rollup 的状态(例如主链确认排序和可用性的数据区块)。

跨链桥

跨链桥是允许两个区块链相互通信的系统。链 A(目标链)需要确信链 B(源链)上发生了某些事件,反之亦然。理想情况下,我们希望这种通信是双向的,具有强相关的安全属性(例如消息有效的高置信度、源链不会撤销等等)。

从根本上来说,跨链桥充当了另一个区块链的「观察者」(就像任何其他典型的人类用户一样)。跨链桥实现了给定的确认规则,通过该规则,它确信所连接链的状态(例如,必须通过多少个以太坊区块才能接受转账输入)。

  • 传统跨链桥通常运行源链的链上共识验证器轻节点(即它们信任大多数共识签署的任何内容);

  • 跨链桥可以通过充当完整验证器轻节点(即添加数据可用性采样(DAS) + 有效性 / 故障证明)来提供更强大的安全属性。例如,链的验证器可能需要在连接链的所有 DAS 轻节点上运行,与要求验证器运行连接链的完整节点相比,这是一种更轻量级的替代方案;

  • Rollup 跨链桥还可以保留主链的活跃性和抗重组性(因为 Rollup 必须共享主链的共识);

从主链桥接→Rollup

这个方向非常简单,因为 Rollup 节点会完全验证主链。

Rollup 节点知道主链上发生的一切,因此它们知道跨链桥接的交易何时发生,当前的以太坊 Rollup 完整节点还必须为以太坊基础层本身来运行完整节点。

请注意,如果支持的话,Rollup 节点也可以改为运行其主链的完整验证器轻节点。让我们考虑一个假设的例子,其中以太坊已经完全实现了以下升级:

  • 以太坊执行区块带有有效性证明(基础层的 zkEVM 研究正在进行中);

  • 以太坊已经实现了完整的 DAS,因此节点可以对 DA 进行采样;

  • 以太坊执行层将其数据作为 blob 发布到数据层,就像以太坊之上的任何其他 Rollup 一样(例如 Celestia 的执行层数据将被发布到其 DA 层,因此 DAS 节点将检查 Rollup 数据和 Celestia 自己的执行层的可用性);

  • 以太坊提供了完整的共识证明,而不是依赖于同步委员会(例如,通过验证器的整合、更好的签名聚合、可能的 ZK 共识证明等);

现在,假设你想为基于以太坊的 Rollup 运行完整节点,要遵循有效的 Rollup 链,必须了解以太坊的规范链,这就需要检查以太坊自身的共识和有效性:

  • 以太坊的共识——任何轻节点客户端都可以跟踪作为区块链、区块头签署的共识;

  • 以太坊自己的执行层 DA——Rollup 节点会对以太坊的 DA 层进行采样,检查 Rollup 数据和以太坊自己的执行层数据的可用性(请注意,DAS 节点仍然对完整节点做出一些额外的假设,我们稍后会看到);

  • 以太坊自身的状态有效性——有了 zkEVM,每个以太坊区块都会附带一个有效性证明;

Rollup 节点必须检查以太坊自身执行层的状态有效性和 DA,因为这些是以太坊区块的有效性条件。Rollup 节点需要知道它不仅跟踪共识已签署的以太坊,而且还知道它是有效的区块头。例如,他们可能会意外地跟踪共识签署但无效的以太坊区块(例如它产生了大量 ETH)。

如果基础执行层本身将其数据发布到 DA 层(就像其他 Rollup 一样)并添加有效性或故障证明,那么它将成为一个内置 Rollup。

从 Rollup → 主链桥接

这个方向比较棘手,因为主链默认不知道 Rollup 的状态和 STF(即以太坊节点不需要运行 Rollup 节点)。为了让主链相信 Rollup 的状态,你可以在主链上部署的智能合约(即 rollup 的验证桥合约)中实现 Rollup 的逻辑。该智能合约检查 DA 和 Rollup 状态的有效性。

同样,这个跨链桥是可选的。主链上的智能合约用于使所有主链节点相信 Rollup 的有效性,这就允许在良好的信任假设下进行双向通信。

Rollups、协处理器(Co-processor)和意图(Intents)

正如所讨论的,Rollup 除了拥有它们主链的状态(例如以太坊的状态)之外,还保存它们自己的一些状态(Rollup 的状态)。那么,CoW Swap 是否有自己的状态,而不是以太坊状态的一部分?如果是,那么听起来就像是 Rollup。如果不是,那么它可能是「协处理器」(Co-processor)。

然而,即使这个问题也不像看起来那么简单:

相反,你可能会认为区分因素是状态的持久性:

如果 CoW Swap 允许特定的参与者向用户提供快速的预确认(比以太坊的出块时间更快),并承诺包含批次处理(batch)的订单——因为以太坊批次处理时间比大多数用户想要的要长,那么它现在是一个 Rollup 么?

Chris Goes 在模块化峰会的演讲中探讨了这个话题,首先他为意图(Intents)提供了一个近似的定义:「对给定系统状态空间的偏好函数的承诺」。

请注意部分解决(匹配意图)和 Rollup 排序之间的相似之处。操作员获取用户的链下签名消息→将结果数据发布到主链。

  • 基于意图的应用程序——由此产生的状态变化在链上解决(例如,在 CoW Swap 示例中,应用程序位于基础链上,因此代币在那里进行兑换);

  • Rollup 应用程序——使用提交到主链的数据来计算 Rollup 所产生的状态更改;

以意图为中心的架构和以 Rollup 为中心的架构从相反的方向实现相似的目标。以意图为中心从用户和应用程序的角度广泛地解决了这个问题,以 Rollup 为中心的方式从不同区块链的角度广泛地解决了这个问题。

在这里,设置具体的区分边界并不重要。更重要的是,我们发现 Rollup 实际上与我们已经习惯的具有链下意图匹配的应用程序没有太大不同!

你依赖链下参与者(排序器与求解器 / 填充器等)来获得一些较弱的保证,例如提供最佳执行和良好的用户体验 → 根据发布到主链的数据来确定结果。但是,他们不保管你的资金。

随着可验证的链下计算变得越来越重要,两者之间的界限可能会变得模糊:

如果你希望意图求解器或 Rollup 排序器不那么受信任......

模块化区块链与单片区块链

单片区块链(又名集成区块链)通常被定义为垂直集成所有核心功能(即共识、DA 和执行)的链。它们对自己的安全负全部责任,Solana 和 Cosmos Hub 就是典型的例子。

DA 层(例如以太坊和 Celestia)通常被称为「模块化」区块链,因为它们将执行外包给 Rollup,但这并不十分准确。他们还独立负责自己的共识、DA 和执行。

即使 Celestia 的执行也会受到限制(例如,转账、质押、跨链)。同样如果有人在 Solana 之上启动 Rollup,它也不会神奇地成为一个「模块化」区块链。

因此,当你听到人们将以太坊或 Celestia 等链称为「模块化」区块链时,请意识到这更多是一种实际区别,而不是严格的技术区别。两者通常都在优化自己的架构以支持 Rollup。这些 Rollup 预计将处理其范围内的大部分交易执行。

即使 Rollup 也不一定完全「模块化」——Rollup 排序器可以就交易排序达成共识,提供 DA,并在主链执行任何操作之前执行交易。这就是用户获得预先确认的方式。然后主链提供另一个「最终」承诺,再次声明 DA 和对 Rollup 交易顺序的共识。

Rollups 与「集成链」(Integrated Chains)

对于我们的目的而言,更重要的区别是「Rollup」或「非 Rollup」。链的最终状态是否源自发布到单独主链(即 DA 层)的数据?

虽然我们今天将 DAS 和有效性 / 故障证明与传统 Rollup 联系起来,但我们应该注意到这些在逻辑上是不同的概念。理论上,任何「集成链」(例如典型的 Cosmos 应用链)都可以升级以添加 DAS 和有效性证明,而无需将其数据发布到以太坊等其他外部主链。节点将单独对该链进行采样和检查证明。

Vitalik 在他的《终局之战》(Endgame)中谈到了这一区别:

你可能会注意到,添加 DAS + 有效性 / 故障证明的「传统大区块链」(集成链)最终可能看起来像一个「内置 Rollup」(enshrined rollup)!类似地,「一个可扩展和占主导地位的 Rollup」可能会变得非常成功,以至于它只是与其主链合并以容纳该 Rollup。

区分的界限在极限处变得模糊。

因此,如果你相信 DAS + 有效性 / 故障证明是最终结果,那么某种意义上的「Rollup」是不可避免的。上图中的两种方法之间存在有效的区别:

  • 「Rollups」又名「模块化」 ——构建逻辑上独立的链,将数据发布到其主链(DA 层),重用主链的共识;

  • 「集成区块链」又名「单片区块链」 ——将所有内容集成到具有自己共识的一个协议中,不将数据发布到单独的主链(即使 DA 层和执行层在某种意义上是共享协议的逻辑上独立的部分);

当我们在本报告中讨论「Rollup」时,我们将指的是前者(即不是具有 DAS + 有效性 / 故障证明的集成链,这可能被称为内置 Rollup)。

虽然「传统」Rollup 并没有垄断 DAS 或证明(即集成的大型区块链可以添加它们),但请注意,我们在这里忽略了很多技术细节,你不能只选择 Solana 并决定「哦,我想我们今天就添加 DAS」。

这需要从根本上重构协议,以开始接近我们所看到的以太坊和 Celestia 正在做的事情:

改变数据编码方式以支持 DAS 将等同于减慢区块编码和传播速度,开始更接近传统的 DA 层:

出于这个原因,我们看到团队构建了以下内容:

  • 专门的 DA 层(例如以太坊的 Danksharding、Celestia 等)- 慢速区块 + DAS;

  • 共享定序器(例如 Espresso、Astria 甚至 Solana)- 实际上只是快速 DA 层,无需 DAS;

然而如果将快速区块和 DAS 的时间分开,它们并不一定不兼容。例如,你可以想象像 Solana 这样的链提供两条不同的路径:

  • 快速路径 - 继续尽可能快地执行交易并传播数据(就像今天一样);

  • 慢速路径 - 以可以异步采样的方式事后对数据进行编码,为 DAS 节点提供稍微落后于共识的保证;

Anatoly 在播客中讨论了 Eclipse 如何将以太坊、Celestia 和 Solana 结合在一起,从另一端来看,你可以想象 DA 层在使数据可用于采样之前添加更快的路径:

在同一基础层协议中提供两条路径可以有效地内部化快速共享排序,从而为基于 Rollup 提供有趣的设计。请注意,目前这仍然是一个非常探索性的想法。

确认规则

有了背景知识,我们现在可以开始分解这些不同架构的安全属性。

首先,节点通过运行「确认规则」(Confirmation Rules)来与任何区块链进行交互:

「确认规则,是指由节点运行的输出某个区块是否被确认的算法。在这种情况下,在某些假设下,主要涉及网络同步和诚实股份的百分比,当满足这些条件时,该区块将被保证永远不会发生重组 」。

对于给定的链可以存在任意多个确认规则:

  • 在确认比特币交易之前你需要等待多少个区块? 1 ? 6 ? 10 ?

  • 你是否使用 LMD GHOST 确认基于以太坊可用账本的区块,还是等待最终性小工具(Casper FFG)来确认?

  • 你是否运行直接验证每个区块的完整节点,或者仅运行检查共识签署的轻节点?

  • 你只是问 Infura 么?

由于每个确认规则可以做出非常不同的假设,因此即使与同一条链交互,它们也可以具有非常不同的安全属性:

这种区别很微妙但很重要:

安全=安全性 + 活跃度

现在让我们深入研究 Rollup 是否会从其主链「继承安全性」。

继承,也许更清楚地说,Rollup 总是「租用」而不是「继承」其主链中的任何内容,它会为消耗的资源(DA)支付持续的成本,任何一方都可以选择结束这种关系。但这不是问题有趣的部分。

安全性,从现在开始我们将重点关注安全性。算法的安全(Security)由安全性(Safety)和活跃度(Liveness)组成:

  • 安全性(不会发生任何不好的事情),两个正常运行的节点所确定的最终状态将永远不会发生冲突;

  • 活跃性(最终会发生好事),所有正常运行的节点将在有限时间内完成反映适合包含的交易的新状态;

使用 Sreeram 的出色框架,我们可以将它们进一步分解为五个属性,这些属性共同确保确认规则的安全:

让我们考虑一个具有 DAS + 有效性 / 故障证明的假设集成链的示例。它的数据不会发布到任何其他外部主链。为了简单起见,我们假设即时最终确定(例如 Tendermint),因此可用分类账与最终确定分类账之间没有可用的区别(例如以太坊的 Gasper)。

我们将考虑三个确认规则,可用于使用不同类型的节点来跟踪链:

  • 共识验证器轻节点 - 验证共识证明(即信任诚实的多数共识)。

  • 全验证者轻节点 - 验证共识 + 检查 DA(使用 DAS)+ 验证状态有效性(使用有效性 / 故障证明);

  • 全节点 - 验证共识 + 直接验证 DA(下载所有数据)和有效性(执行所有交易并计算状态);

确认规则有安全属性,链没有

再次强调这一点,「我们通俗地谈论一条链是安全的,但实际上它是安全属性所附加的确认规则」。

让我们看一些例子。

CAP 定理

作为背景,CAP 定理告诉我们,没有一个账本可以同时满足这两个条件:

  • 适应性(Adaptivity,又名动态可用性) - 在动态参与下保持活动状态(即如果大部分节点离线);

  • 最终性(Finality,又名一致性) ——在网络分区下保持安全;

共识协议往往分为两个部分,每个部分都满足上述条件之一:

  • 最长链协议 - 这些协议(例如比特币的中本聪共识)即使在活跃参与节点的数量可变(即它们是自适应的)时也能保证活跃性,然而它们在网络分区下并不安全(即没有最终性);

  • BFT 型协议 - 经典共识协议(例如 PBFT)实现了最终性,但没有实现适应性;

比特币确认规则

比特币的共识并不提供任何硬性的经济最终性。

节点在其本地视图中观察最长的链,每个用户都可以自由应用他们喜欢的任何确认规则(例如接受具有 > k 个确认的区块)。标准是等待 6 个区块确认,但这取决于你。

对于更高价值的交易,等待更长时间是合理的。等待时间与安全性(即重组的可能性)之间需要权衡。

以太坊确认规则

以太坊的 PoS 共识(Gasper)乍一看似乎回避了 CAP 定理。然而,它实现了这两个属性,因为它包含两个嵌套账本:

  • 动态可用的分类账 - 如果网络未分区,则在动态参与下安全且活跃;

  • 最终确定的前缀分类账 - 始终安全可靠。如果网络未分区并且有足够的节点参与,则保持活动状态;

Gasper 属于「潮起潮落」(ebb-and-flow,又名双账本或双确认规则)协议家族。双账本设计不属于 CAP 定理的范围(即它假设单一确认规则)。当网络分区时,最终确定的账本落后于自适应账本,但当网络修复时它会赶上。

这允许在用户级别而不是在系统范围级别解决适应性与最终性之间的权衡。这是区块链 CAP 定理在允许用户依赖的适应性和最终性中,提出的「检查点最长链」协议的一个特征。这些协议为个人用户提供了最终性和适应性之间的选择,而不是将其强加于整个系统级别。

Gasper 明确公开了两个不同的确认规则,映射到上面提到的两个账本:

  • 动态可用规则 - 保证适应性。尊重最长链的区块头。LMD GHOST 是用于确定最重子树的分叉选择规则;

  • 最终确定规则 - 保证最终确定性。尊重由最终性小工具确认的区块。Casper FFG 是应用在分叉选择规则之上的最终性小工具;

正如论文中所讨论的:

「更乐观的自适应规则总是确认由更保守的规则标记为最终确定的区块,并且可能在可变的参与水平期间确认更多的区块。客户(用户)根据个人喜好在确认规则之间进行本地选择,而矿工遵循与这两个确认规则一致的固定区块提议规则」。

这允许系统中所有(诚实的)节点:

  • 遵循通用的区块提议机制;

  • 但不同的节点可以选择不同的确认规则;

无论参与程度如何,验证者都会继续延长最长的链(在不断增加的高度上开采新区块),但只有在有足够的参与度时才会出现新的检查点。

最长的链(包含最新的检查点)可以在不同的链之间交替(即重组未完成的区块),但无论网络条件如何(即最终性),检查点都保证位于单个链上。

用户的安全取决于他们遵守的确认规则。快速区块确认与更强的安全保证之间需要权衡。卖咖啡的用户可能更喜欢活跃性而不是安全性,但卖游艇的用户可能更喜欢安全性而不是活跃性。

以太坊节点还可以将一些其他的中间确认规则启发式应用于实际用途。与其像比特币那样使用朴素的 k 个区块作为自适应确认规则,我们可以添加其他启发式方法,其中包括有关网络同步和验证者诚实的假设。

这正是《以太坊共识协议确认规则》中提出的内容,它提出了具有以下属性的确认规则:

  • 在理想条件下 - 规则将在其插槽之后立即确认新区块;

  • 在典型的主网条件下 - 该规则应该能够在一分钟内确认大多数新区块;

该确认规则不能替代经济最终性。相反,它为相信网络同步将在不久的将来保持的用户,提供了有用的启发式方法。让我们比较一下两者:

让我们考虑一些例子,譬如你以 250 万美元的 ETH 出价售卖一艘游艇,以下是一些可能的确认规则:

  • 全节点 + 等待最终结果——即使是恶意的大多数验证者也无法欺骗你接受无效块(例如产生假 ETH)。如果他们付给你 250 万美元的 ETH,然后尝试稍后重组最终确定的区块,他们将承受巨大的成本(至少三分之一的权益是可惩罚性削减的);

  • 全节点 + 等待一个区块——大多数恶意验证者仍然无法欺骗你接受无效区块,然而他们可以在一个有效的区块中向你发送 250 万美元的 ETH,乘坐游艇离开,然后该区块立即重组,如果有足够的权益权重或较差的网络条件,这是可能的,它们没有被惩罚性削减;

  • 轻节点客户端——恶意同步委员会可以对你撒谎,而不会受到任何处罚,买家就可以乘游艇离开(请注意,这个同步委员会作为共识的子集是以太坊独有的,其他具有更高效的轻节点客户端支持的 PoS 链可以在验证者数量较少的情况下检查所有共识投票);

  • MetaMask——你只是信任 Infura,向你买游艇的人向 Infura 员工承诺他们可以在周末乘坐游艇,所以他们对你撒了谎,你认为你已经拿到了 250 万美元的 ETH,然后你交出了钥匙;

Rollup 确认规则

与任何链一样,节点使用不同的确认规则与 Rollup 进行交互。Rollup 最强的确认规则将与其主链的共识一起最终确定。Rollup 定序器可以暴露较弱的确认规则以获得更好的用户体验(即为不耐烦的用户提供快速预确认),但用户也可以等待主链确认规则的完全安全性。

本文地址:https://www.bitehuangjin.com/show/231.html
版权声明:本站所有文章皆是来自互联网,如内容侵权可以联系我们删除!
相关推荐