ZK回滚的决定论

https://cexplorer.io/article/advantages-of-determinism-for-zk-rollups-on-cardano

Cardano 交易很少失败,因为验证不依赖于共享的全局状态。这是 Cardano 的 UTxO 模型与以太坊基于账户的模型之间的关键区别。Cardano 的方法允许可预测和确定性的交易验证和脚本执行。结果是预先知道的,这对实施 ZK Rollups 特别有利。这些都可以在不需要集中式定序器的情况下实现。在本文中,我们将首先深入解释确定性以及以太坊上的交易可能失败的原因。然后,我们将解释以太坊上 ZK Rollups 的基本原理。之后,我们将探讨 ZK Rollups 在 Cardano 生态系统中的不同之处。

零知识卷积简介
零知识卷积(ZK Rollup)是一种第二层(L2)扩展解决方案。它可以将第一层(L1)的部分状态(通常是用户账户余额)转移到第二层。这样就可以在 L2 层进行复杂的计算,而如果在链上(即 L1 层)进行计算,速度会很慢,而且会耗费大量资源。换句话说,计算在链外进行,为扩展提供了高效的解决方案。
096262b7fde7c2502da64ee0cd050a0a

交易验证和智能合约执行等状态变化在链外计算,随后使用零知识证明(ZK Proofs 或 ZKP)在链上验证。ZK Rollups 可显著提高交易吞吐量,最大限度地降低交易成本,同时继承其所连接的基础层网络的安全性,以便进行结算。

ZK Rollups 定期向第一层(L1)提交一个小数据子集。这些数据是第二层(L2)处理大量数据的结果。通过这种方式,ZK Rollups 可以有效利用基础层的抗审查能力和安全性进行最终交易结算。

交易验证中对上下文的需求
在任何金融系统中,验证交易–两个或多个参与者之间的价值转移–都需要一定的背景或状态进行验证。除其他事项外,系统必须验证发送方的账户是否有足够的资金。系统还需要确保用户不会多次使用相同的资金,从而解决众所周知的重复消费问题。

验证输入是交易和状态。输出则是根据状态决定交易是否有效。

区块链是一种分布式金融系统,交易处理或状态转换是通过在区块链末端添加新区块来实现的。每个区块包含多个交易。

如图所示,每添加一个新区块,全局状态都会发生变化。最后一次状态变化发生在添加了 N+4 个区块之后,因此当前的全局状态为 N+4。

卡达诺和以太坊采用了不同的交易验证环境。

就以太坊而言,交易或智能合约的验证取决于特定时刻的全局状态。全局状态包括所有账户的当前状态,包括账户余额和任何现有智能合约的状态。区块内的交易按固定顺序排列,每笔交易都有可能改变全局状态。因此,交易执行的结果会受到同一区块内之前执行的交易的影响。

如图所示,最近添加的区块为 N+3,全局状态为 N+3。网络试图过渡到新的状态 N+4,因此构建了一个新的 N+4 区块。值得注意的是,N+4 区块中的交易验证(绿框表示)取决于全局状态。一旦交易被纳入 N+4 区块,后续交易就可以被验证,这将取决于全局状态和前一个交易。

以太坊交易可能失败的原因之一是交易验证时全局状态的不可预测性。在构建交易时,无法预测其结果。交易验证时的全局状态可能与交易构建时的状态不同。在交易提交和验证之间,交易参与者的账户余额可能会发生变化。这些账户余额的变化可能会导致交易无法按照提交者最初的意图执行。

图中展示了从提交交易 TX 10(发生在块 N+2(状态 +2)前后)到交易 TX 9 验证后的交易验证之间的时间段。在此期间,全局状态发生了多次变化。交易 TX 10 的验证取决于全局状态和交易 TX 9 带来的变化。交易 TX 9 或之前的任何变化都有可能导致交易 TX 10 失败。

以太坊交易可以说是有状态的。

相比之下,Cardano 没有全局状态,采用的是 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,这意味着状态发生了变化。

卡达诺交易本质上是无状态的。在提交交易时,输入和输出都是已知的。这样就可以在提交前进行本地交易验证,确保交易有可能通过网络验证。输入 UTxOs 的使用能力(它们的存在和使用正确签名的能力)可以在本地验证,脚本的执行结果(取决于提交者在交易中添加的输入数据)也可以在本地验证。这让提交者对交易不会失败有很大的信心。

与以太坊不同,卡达诺的运行是可预测和确定的。这一根本区别对 ZK 证明的使用产生了重大影响。

需要说明的是,以太坊确实是以确定性的方式验证交易的,即在输入(交易数据)和状态(以太坊区块链的当前全局状态)相同的情况下,EVM 将始终产生相同的输出。但是,交易验证的结果是非确定的。验证结果可能与用户的预期不同。

在提交交易时,用户无法预测交易验证时的全局状态。因此,不可能非常确定地估计验证结果。只能是假设。

ZK 卷积保持状态
在第二层解决方案(如 ZK Rollups)中,交易验证对于维护系统完整性至关重要。这包括防止重复消费和未经授权创建新代币。

与以太坊的第 1 层类似,ZK Rollups(第 2 层)也保留了一个全局状态。每次交易都会更新全局状态,因此交易顺序非常重要。

与以太坊区块链相比,ZK Rollups 中的状态维护复杂度要低得多,这主要是因为通常由一个被称为序列器的中心化实体来监督。因此,一台服务器就能管理用户账户的余额。

希望使用 ZK Rollups 的用户需要锁定在以太坊上铸造的代币。用户可以通过使用以太坊智能合约来锁定代币,并在第二层生成等量的代币。

在第二层,用户可以提交交易。这些交易会改变第二层中用户账户的余额。不过,需要注意的是,第二层中发生的所有状态变化都不会影响特定时刻以太坊的全局状态。

以太坊网络内的全局状态变化与第 2 层的状态无关。

如果用户希望退出第 2 层并解锁以太坊智能合约中的代币,则需要从 ZK Rollup 中提款。这一操作会导致用户在第 2 层的代币被烧毁,并在第 1 层解锁同等数量的代币。在整个过程中,第 2 层代币所有权的任何变化都会得到适当反映。

要从 ZK Rollup 中提取代币,必须提供 ZK 证明。

当用户希望将其代币从 ZK Rollup 转回以太坊时,她会发起一个取款请求。该请求指定了她打算提取的代币数量以及代币应该发送到的以太坊地址。

随后,ZK Rollup 系统会生成一个零知识(ZK)证明来验证这个取款请求。

该证明本质上是确认 “用户确实在第 2 层拥有这些代币,而且这些代币尚未被使用”。

然后,该 ZK 证明将提交给以太坊上的智能合约。如果智能合约验证该证明有效,所请求的代币金额就会从智能合约中解锁,并转移到用户的以太坊地址。

总而言之:

以太坊通过存款交易锁定用户的代币,同时影响以太坊的整体状态和 ZK Rollup 的状态。用户只能在第 2 层使用代币。在 ZK Rollup 中进行的交易主要影响第 2 层的状态。我们将进一步说明 ZK Rollup 中的状态变化如何影响第 1 层状态。如果用户希望将代币从第 2 层转回以太坊,他们必须提交一笔提现交易,以解锁第 1 层的代币。这一操作再次改变了第 1 层和第 2 层的状态。

虽然以太坊和 ZK Rollup 中的余额是相互关联的,但它们并不总是等价的,它们在某种程度上是独立运行的。

ZK Rollup 如何工作?
在第 2 层,每个用户都有一个带有余额的账户。用户提交交易,其中可能涉及账户间的价值转移。这些交易由一个称为 “排序器 ”的中央实体收集并排序。

排序器形成一批新的交易,代表一组已在链外处理的单个交易。

用户交易不包括在新状态根或 ZK 证明中。相反,它们被单独存储在数据可用层(一种链外存储)中。这些数据对于重建 Rollup 的状态至关重要,而将其存储在链外可以提高可扩展性。

根据批处理,排序器会计算出一个新的全局状态(也称为状态根)和一个 ZK 证明。

在 ZK 密码学中,第 1 层充当验证者,第 2 层充当证明者。

排序器定期向以太坊发送新的事务。每笔交易都包括一个 ZK 证明和一个新的状态根(全局状态)。

状态根是对一批交易处理完毕后 ZK 卷的新状态的加密承诺。它表示该批交易中所有交易的净结果。

ZK 证明是一种加密证明,用于证明批次所代表的状态转换的有效性。它验证了该批交易是否被正确处理,并产生了新的全局状态。

ZK 证明和新的全局状态都依赖于交易批次,并从交易批次中加密推导出来。它们提供了一种在主链上表示批量交易的安全高效的方式,而无需在链上处理每笔交易。

以太坊智能合约(验证器)不需要批量交易来验证。它只需要 ZK 证明和新的状态根。以太坊只需要确认这批交易作为一个整体是有效的(如 ZK 证明所证明的),并了解对每个账户余额的净影响。

在图片中,你可以看到最上面的用户交易。排序器(ZK 卷积证明器)将最新的用户交易排序,并创建一批交易。它从批次中生成一个 ZK 证明和一个新的全局状态(状态根)(红色箭头代表对批次的加密依赖),并将其发送给以太坊,以便在交易中进行验证。以太坊(ZK 校验器)将验证并在区块链中存储该交易,从而改变其全局状态。

以太坊保留 ZK 证明和排序器传输的新全局状态,从而确保 ZK Rollup 的完整性。

以太坊虚拟机(EVM)可以在 ZK Rollup 中运行。这意味着开发人员可以用与以太坊主网相同的方式编写智能合约。与 EVM 的这种兼容性有助于将去中心化应用程序(DApp)从以太坊移植到 ZK Rollup。

这实质上是将 DApp 智能合约的执行从以太坊转移到 ZK Rollup。虽然智能合约继续遵守 EVM 的规则,但它们的执行变得更具可扩展性和效率,因为它发生在第 2 层。

将智能合约迁移到第 2 层解决方案的便利性是 ZK Rollup(和其他第 2 层解决方案)采用与以太坊类似的基于账户的模式的原因之一。

卡达诺决定论的优势
以太坊社区一直在积极探索提高可扩展性和效率的各种方法,零知识技术就是其中一种很有前景的解决方案。在 ZK Rollups 中引入序列器是第二层网络中管理和排序交易的关键机制。

排序器是交易排序和确定性问题的解决方案,在 ZK Rollups 的运行中发挥着关键作用。但是,序列器的使用引入了一定程度的中心化,这在区块链去中心化原则的背景下引发了担忧。排序器作为一个拥有交易排序权的单一实体,有可能成为故障点或操纵点。

Cardano 的交易验证是确定性的,允许创建交易,而交易结果在创建交易时是已知和可预测的。之所以能做到这一点,是因为 Cardano 的交易验证完全依赖于交易的输入和输出,而不是任何全局状态。

就 ZK 证明而言,这种确定性是有利的。在创建 ZK 证明时,您实质上是在证明您知道一个秘密输入,该输入经过特定计算后会产生一个已知输出。由于计算是确定的,因此在创建 ZK 证明时,您可以预测输出结果。

鉴于在交易构建过程中,关于UTxOs 支出、UTxOs 生成和验证器(智能合约)运行的所有知识都是已知的,因此创建一个 ZK 证明来证明验证器(编码为算术电路)成功执行是可行的。

ZK 证明见证可以在链外构建,作为更复杂计算的结果。链上验证器包含一个算术电路,可以验证所提供的任何 ZK 证明见证的正确性。

这就是为什么可以减少甚至消除对定序器的需求。在以太坊中,ZK 证明扩展解决方案利用排序器以确定性的方式对交易批次进行排序,这样就可以知道创建所需证明(ZK 证明见证)的状态。

在构建以太坊交易时,无法完全了解相关状态。这使得在没有可信的排序器(操作员)的情况下,几乎不可能首先构建证明,因为在处理交易时不知道合约的状态。

然而,在 Cardano 中,不需要知道交易在区块中出现的位置,因为交易在区块中出现的位置不会影响智能合约的状态。每个区块只能有一笔交易与状态–UTxO 的数据–发生交互。

Cardano 的这种确定性允许在不需要序列器的情况下创建 ZK 证明。从理论上讲,它甚至可以不需要外部数据可用层。

在 L2 网络中,必须有一个实体(ZK 校验器)为 L1 构建交易。L2 状态不像以太坊那样是全局状态,而是所有独立交易的状态。

在 ZK Rollup 中,UTxO 可以相互独立运行,就像在第 1 层中一样。这就实现了事务之间的高度并行性和独立性。

即使没有排序器和事务批处理,也可能需要以某种方式将第 2 层的状态传递给第 1 层,以确保系统的完整性和一致性。虽然 Cardano 不需要排序器来实现确定性,但第 2 层仍然依赖第 1 层来保证安全性。

利用 UTxO 模型的 ZK Rollups 可以更容易地实现去中心化,这与以太坊生态系统中的 ZK Rollups 不同。确定性和 UTxO 模型为新的实施可能性铺平了道路。与基于账户的模式相比,开发一种更高效、更分散的 ZK Rollup 实现方式可能要容易得多。

至于是否有团队能够创建一种无需排序器的 ZK Rollup,并通过使用验证脚本和 ZK 证明来维护系统的完整性,我们拭目以待。

结论
Cardano 的 UTxO 模型有几个优点,包括交易的确定性、ZK 证明的强大使用潜力、无需定序器,以及理论上可以在没有数据可用层的情况下构建 ZK Rollup。与以太坊基于账户的模式相比,这些优势使其成为 ZK Rollups 更为有利的选择。即将到来的 Chang 硬分叉将为 Cardano 引入 ZK 加密技术,标志着整个生态系统新篇章的开始。