Advantages Of Determinism For ZK Rollups On Cardano | Cardano Explorer (cexplorer.io)
卡尔达诺交易很少失败,因为验证不依赖于共享的全局状态。这是卡尔达诺的 UTxO 模型和以太坊基于账户的模型之间的一个关键区别。卡尔达诺的方法允许可预测和确定的交易验证和脚本执行。结果是提前知道的,这对于 ZK Rollups 的实施特别有利。这些可以在不需要集中排序器的情况下实现。在本文中,我们将首先深入探讨决定论的解释以及以太坊上的交易可能失败的原因。然后我们解释了以太坊上 ZK Rollups 的基本原理。接下来,我们将探讨 ZK Rollups 在 Cardano 生态系统中有何不同。
ZK Rollups简介
零知识汇总 (ZK Rollup) 是一种第 2 层 (L2) 扩展解决方案。它可以从第 1 层 (L1) 获取一部分状态(通常是用户帐户余额)并将其传输到 L2。这允许在 L2 中进行复杂的计算,否则如果在链上(即在 L1 中)执行,计算速度会很慢并且会占用大量资源。换句话说,计算是在链外进行的,为扩展提供了有效的解决方案。
状态更改(例如交易验证和智能合约执行)在链外计算,然后使用零知识证明(ZK 证明或 ZKP)在链上进行验证。 ZK Rollups 显着提高了交易吞吐量并最大限度地降低了交易成本,同时继承了它们所连接的用于结算的基础层网络的安全性。
ZK Rollups 定期向第 1 层 (L1) 提交一个小数据子集。该数据是在第 2 层 (L2) 中处理大量数据的结果。这样,ZK Rollups 有效地利用了基础层的审查阻力和安全性来进行最终的交易结算。
交易验证中对上下文的需求
在任何金融系统中,验证交易(两个或多个参与者之间的价值转移)都需要一些上下文或状态来进行验证。除其他事项外,系统必须验证发送者的帐户是否有足够的资金。它还需要确保用户不会多次花费相同的资金,从而解决众所周知的双重支出问题。
验证输入是交易和状态。输出是交易在状态上下文中是否有效的决定。
区块链是一种分布式金融系统,其中交易处理或状态转换是通过在区块链末尾添加新块来实现的。每个区块包含多个交易。
如图所示,全局状态随着每个新添加的块而变化。最后一次状态改变发生在添加块 N+4 之后,使得当前全局状态为 N+4。
卡尔达诺和以太坊采用不同的上下文进行交易验证。
就以太坊而言,交易或智能合约的验证取决于特定时刻的全局状态。这种全局状态包含所有账户的当前状态,包括其余额和任何现有智能合约的状态。块内的交易按固定顺序排列,每个交易都有可能改变全局状态。因此,交易执行的结果可能会受到同一块内之前执行的交易的影响。
如图所示,最近添加的块是 N+3,使得全局状态为 N+3。网络尝试转换到新的状态 N+4,从而构建新的 N+4 块。值得注意的是,区块 N+4 中交易的验证(由绿色框表示)取决于全局状态。一旦交易被合并到区块 N+4 中,后续交易就可以被验证,这将取决于全局状态和之前的交易。
以太坊交易失败的原因之一是交易验证时全局状态的不可预测性。当交易正在构建时,不可能预测其结果。交易验证期间的全局状态可能与交易构建期间的状态不同。在交易提交和验证之间,交易参与者的账户余额可能会发生变化。账户余额的这些变化可能会阻止交易按照提交者最初的预期执行。
该图说明了在区块 N+2(状态+2)周围发生的交易 TX 10 的提交与交易 TX 9 验证之后的后续交易验证之间的时期。在此期间,全局发生了许多变化。状态发生。交易 TX 10 的验证取决于全局状态和交易 TX 9 引入的更改。交易 TX 9 或任何先前的更改可能会导致交易nsaction TX 10 失败。
以太坊交易可以被描述为有状态的。
相比之下,卡尔达诺在没有全局状态的情况下运行,并采用 UTxO 模型。在此模型中,交易验证基于其输入和输出,无需全局状态参考。每笔交易都会消耗一定的 UTXO 作为输入,并生成新的 UTXO 作为输出。交易的有效性仅取决于消耗的 UTXO 是否有效且未花费,以及输入的总价值是否与输出的总价值匹配。
交易验证是相互独立的。 UTxO 是不可变的对象,可以确保独占访问。在块验证中,可以直接确保每个输入 UTxO 仅被完整消耗一次。卡尔达诺区块内的交易顺序在状态上下文中无关紧要。
该图描绘了一个生成新区块 N+4 的网络,其中包含交易 TX 9 和 TX 10。新交易 TX 9 和 TX 10 消耗旧的输出 UTxO(由绿色框表示)以形成输入 UTxO(由绿色框表示)由红色框表示)。区块内交易的顺序是无关的,因为交易是独立的并且不会相互影响。在区块 N+2 生成后不久提交的交易 TX 10 可以消耗该区块内交易的 UTxO。添加新的 N+4 块会导致从输入 UTxO 创建新的 UTxO,这意味着状态发生变化。
卡尔达诺交易本质上是无状态的。输入和输出在交易提交时都是已知的。这允许在提交之前进行本地交易验证,确保它可能通过网络的验证。花费输入 UTxO 的能力(它们的存在以及使用正确签名花费它们的能力)可以在本地进行验证,以及脚本执行的结果(这取决于提交者在交易中添加的输入数据)。这让提交者高度确信交易不会失败。
与以太坊不同,卡尔达诺的运行是可预测的、确定性的。这种根本差异极大地影响了 ZK Proofs 的使用。
需要澄清的是,以太坊确实确定性地验证交易,即给定相同的输入(交易数据)和相同的状态(以太坊区块链的当前全局状态),EVM 将始终产生相同的输出。然而,交易验证的结果是不确定的。验证结果可能与用户的期望不同。
在交易提交期间,用户无法预测交易验证时的全局状态。因此,不可能高度确定地估计验证结果。这只能是假设。
ZK Rollup 维护状态
在 ZK Rollups 等第 2 层解决方案中,事务验证对于维护系统完整性至关重要。这包括防止双重支出和未经授权创建新代币的保护措施。
与以太坊的第 1 层非常相似,ZK Rollups (L2) 也保留了全局状态。这个全局状态会随着每笔交易而更新,使得交易的顺序变得很重要。
ZK Rollups 中的状态维护比以太坊区块链中的状态维护要简单得多,主要是因为一个称为定序器的中心化实体通常会对其进行监督。因此,单个服务器可以管理用户帐户的余额。
希望使用 ZK Rollups 的用户需要锁定以太坊上铸造的代币。他们通过使用以太坊智能合约来实现这一目标,该合约锁定代币并在第二层生成等量的金额。
在第二层,用户可以提交交易。这些交易会改变第 2 层中用户帐户的余额。但是,需要注意的是,第 2 层中发生的所有状态变化不会影响以太坊在该特定时刻的全局状态。
以太坊网络内的全局状态的变化独立于第 2 层的状态。
如果用户希望退出第 2 层并解锁以太坊智能合约中的代币,则需要从 ZK Rollup 中提款。此操作会导致第 2 层中的代币被燃烧,并在第 1 层中解锁等量的代币。在整个过程中,第 2 层中发生的代币所有权的任何变化都会得到适当反映。
要从 ZK Rollup 中提取代币,必须提供 ZK 证明。
当用户希望将她的代币从 ZK Rollup 转移回以太坊时,她会发起提款请求。该请求指定了她打算提取的代币数量以及代币应发送到的以太坊地址。
随后,ZK Rollup 系统生成零知识(ZK)证明来验证该提款请求。
这个证明基本上证实了“用户确实在第 2 层拥有这些代币,而且它们还没有被花费”。
然后将该 ZK 证明提交给以太坊上的智能合约。如果智能合约验证证明有效,则将从智能合约中解锁所请求的代币数量并将其转移到用户的以太坊地址。
总结一下:
以太坊因存款交易而锁定用户的代币,同时影响以太坊的全局状态和 ZK Rollup 的状态。用户只能使用 Layer 2 中的代币。ZK Rollup 中进行的交易主要影响 Layer 2 状态。我们将进一步说明 ZK Rollup 中的状态变化如何影响第 1 层状态。如果用户希望将代币从第 2 层转移回以太坊,他们必须提交提款交易以解锁第 1 层中的代币。此操作再次改变第 1 层和第 2 层的状态。
虽然以太坊和 ZK Rollup 中的余额是相互关联的,但它们并不总是等价的,并且它们在某种程度上独立运行。
ZK Rollup 是如何工作的?
在第 2 层中,每个用户维护一个有余额的帐户。用户提交交易,这可能涉及账户之间的价值转移。这些交易由称为排序器的集中式实体收集并排序。
排序器形成一批新的交易,代表一组已在链外处理的单独交易。
用户交易不包含在新的状态根或 ZK 证明中。相反,它们单独存储在数据可用性层(链下存储)中。这些数据对于重建 Rollup 的状态至关重要,将其存储在链外可以增强可扩展性。
基于批次,定序器计算新的全局状态(也称为状态根)和 ZK 证明。
在 ZK 密码学的背景下,第 1 层充当验证者,第 2 层充当证明者。
排序器定期向以太坊发送新交易。每笔交易都包含一个 ZK 证明和一个新的状态根(全局状态)。
状态根是处理一批交易后对 ZK Rollup 新状态的加密承诺。它表示批次中所有交易的净效应。
ZK 证明是一种密码学证明,证明批次所代表的状态转换的有效性。它验证该批交易是否已正确处理并产生新的全局状态。
ZK 证明和新的全局状态都依赖于这批交易,并以加密方式衍生自这批交易。它们提供了一种安全有效的方式来表示主链上的批量交易,而无需在链上处理每笔交易。
以太坊智能合约(验证者)不需要一批交易进行验证。它只需要 ZK 证明和新的状态根。以太坊只需要确认该批次作为一个整体是有效的(由 ZK 证明证明)并了解对每个账户余额的净影响。
在图中,您可以在最顶部看到用户交易。排序器(ZK Rollup 证明者)获取最新的用户交易,对它们进行排序,并创建一批交易。它从批次中生成 ZK 证明和新的全局状态(状态根)(红色箭头表示对批次的加密依赖性),并将其发送到以太坊以在交易中进行验证。以太坊(ZK 验证者)将验证交易并将其存储在区块链中,从而改变其全局状态。
以太坊保留了 ZK Proof 和排序器传输的新全局状态,从而保证了 ZK Rollup 的完整性。
以太坊虚拟机(EVM)可以在 ZK Rollup 中运行。这意味着开发人员可以以与以太坊主网相同的方式编写智能合约。这种与 EVM 的兼容性有助于将去中心化应用程序 (DApp) 从以太坊移植到 ZK Rollup。
这本质上将 DApp 智能合约的执行从以太坊转移到了 ZK Rollup。虽然智能合约继续遵守 EVM 的规则,但由于它发生在第 2 层,因此它们的执行变得更具可扩展性和效率。
将智能合约迁移到 Layer 2 解决方案的便捷性是 ZK Rollups(和其他 Layer 2 解决方案)采用类似于以太坊所使用的基于帐户的模型的原因之一。
卡尔达诺决定论的优点
以太坊社区一直在积极探索各种方法来提高可扩展性和效率,其中零知识技术是正在研究的有前途的解决方案之一。 ZK Rollups 中引入的排序器是第 2 层网络中管理和排序事务的关键机制。
排序器作为事务排序和确定性问题的解决方案,在 ZK Rollups 的运行中发挥着关键作用。然而,定序器的使用引入了一定程度的集中化,从而提高了区块链去中心化原则背景下的担忧。排序器作为一个有权排序交易的单一实体,可能会成为故障或操纵点。
卡尔达诺的交易验证是确定性的,允许创建交易,其中结果在构建交易时是已知且可预测的。这是可能的,因为卡尔达诺的交易验证仅依赖于交易的输入和输出,而不依赖于任何全局状态。
在 ZK 证明的背景下,这种确定性性质是有利的。创建 ZK 证明时,您本质上是在证明您知道一个秘密输入,该输入在经过特定计算时会产生已知的输出。由于计算是确定性的,因此您可以在构建 ZK Proof 时预测输出。
鉴于在交易构造过程中已知正在花费的 UTxO、正在生成的 UTxO 以及正在运行的验证器(智能合约)的所有知识,创建 ZK 证明来证明验证器(编码为算术电路)成功执行是可行的。
由于更复杂的计算,ZK Proof 见证人可以在链外构建。链上验证器包含一个算术电路,用于验证任何提供的 ZK Proof 见证人的正确性。
这就是为什么可以减少甚至可能消除对测序仪的需求。由于交易的确定性,链下计算可能无需排序器即可完成。在 Cardano 的 ZK Rollup 中,每笔交易只需要知道其具体的输入和输出,不需要与全局状态交互。换句话说,UTxO模型在L1的优势可以转移到L2。
在以太坊中,ZK Proof 扩展解决方案利用排序器以确定性方式对批量交易进行排序,以便了解创建所需证明(ZK Proof 见证人)的状态。
在构建以太坊交易时,无法获得相关状态的完美知识。这使得在没有可信排序器(操作员)的情况下几乎不可能首先构建证明,因为在处理交易时不知道合约的状态。
然而,在卡尔达诺中,无需知道交易将出现在区块中的何处,因为它出现在区块中的何处不会影响智能合约的状态。每个区块只有一笔交易可以与状态(UTxO 的 Datum)交互。
Cardano 的这种确定性性质允许在不需要排序器的情况下创建 ZK 证明。理论上甚至可以不需要外部数据可用性层。
在L2网络中,必须有一个实体(ZK Prover)为L1构建交易。 L2 状态不会是像以太坊那样的全局状态,而是所有独立交易的状态。
在 ZK Rollup 中,UTxO 可以彼此独立运行,就像在第 1 层中一样。这允许事务之间的高度并行性和独立性。
即使没有排序器和事务批处理,也可能需要以某种方式将第 2 层的状态中继到第 1 层,以确保系统的完整性和一致性。虽然 Cardano 不需要排序器来实现确定性,但 L2 仍然依赖 L1 来保证安全。
与以太坊生态系统中的 ZK Rollups 不同,利用 UTxO 模型的 ZK Rollups 可以更轻松地去中心化。确定性本质和 UTxO 模型为新的实施可能性铺平了道路。开发 ZK Rollup 实现可能要容易得多,它比基于账户的模型更高效、更去中心化。
是否有团队能够创建一个无需排序器即可运行的 ZK Rollup,并通过使用验证器脚本和 ZK 证明来维护系统完整性,还有待观察。
结论
Cardano 的 UTxO 模型具有多种优势,包括确定性交易、ZK 证明的强大使用潜力、消除对排序器的需求,以及在没有数据可用性层的情况下构建 ZK Rollups 的理论上的可能性。与以太坊基于账户的模型相比,这些优势使其成为 ZK Rollups 更有利的选择。即将到来的Chang硬分叉将把ZK密码学引入Cardano,标志着整个生态系统新篇章的开始。