---
title: "有效性证明（ZK）与欺诈证明对比"
description: "了解零知识证明、欺诈证明，它们的异同，以及如何选择"
---

# 有效性证明（ZK）与欺诈证明对比

Ethereum 的指数级增长给数据处理和存储带来了困难，尤其是在区块限制的约束下——这些限制是为了通过验证区块链上的每笔交易来保持去中心化和数据安全所必需的。

与并行运行于 Ethereum 之外、无法获得其安全性的侧链，以及依靠自身共识机制来保证状态有效性的[单体区块链](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains)不同，layer 2 区块链将证明作为其区块链架构的一部分。

## 哪些类型的区块链使用证明？

**证明最常见于使用 Rollups 来实现扩容和提升吞吐量、同时确保主链状态正确的 layer 2 区块链中。** Rollup 是一种扩容方案，它在单独的区块链上批量处理交易，并使用证明来确保交易的真实性。

Rollups 主要有两种类型：

1. [Optimistic Rollups](https://www.alchemy.com/overviews/optimistic-rollups)——假设所有交易均有效，使用**欺诈证明**在 7 天内证明虚假交易
1. [Zero Knowledge（ZK）Rollups](https://www.alchemy.com/blog/zero-knowledge-rollups)——使用**有效性证明**即时证明交易是否有效

有效性证明和欺诈证明都是在交易被记录到主链状态之前验证其合法性的方式。

## 什么是有效性证明？

**有效性证明，也称为零知识（ZK）证明，是一种交易验证方法，发生在证明者（prover，即为某些信息生成证明的人）与验证者（verifier，即在不共享任何信息的情况下验证该证明的人）之间**。

证明者与验证者之间共享的信息称为**见证（witness）**，通常是某个复杂数学方程的解。本质上，证明者需要证明自己确实知道该见证，而验证者需要能够可靠地判断证明者是否掌握该见证的知识。

### 有效性证明是如何工作的？

**有效性证明被设计为难以破解，依赖于一种称为多项式承诺（polynomial commitments）的密码学技术**。在多项式承诺中，验证计算每一步的信息都被编码为多项式，一个经过因式分解的多项式表达式可以代表大量的数字方程。

通过验证多项式方程，你就隐式地验证了这些数值计算，但对这些多项式进行哈希处理的过程较为复杂。用于多项式承诺的三种主要多项式哈希方案是：

1. KZG（Kate）多项式承诺
1. Bulletproofs
1. FRIs

FRI 是 "**F**ast** R**eed-Solomon** I**nteractive Oracle Proofs of Proximity"（快速 Reed-Solomon 交互式邻近性预言证明）的缩写。

### **哪些区块链使用 ZK 证明？**

**使用 Zero Knowledge 证明和 Rollups 的区块链示例包括 zkSync、StarkNet 和 Zcash。**

所有 ZK Rollups 都高度关注安全性和交易验证，这使它们能够可靠地应用于多种使用场景。zkSync 和 Zcash 更侧重于交易本身，而 StarkNet 已经拓展到支持多种 dapp 和 DeFi 项目，包括 **Immutable X**——一个面向游戏社区的安全 NFT 及 web3 开发框架。

## 什么是欺诈证明？

欺诈证明，也称为**故障证明（fault proof）**，是验证者提交的一种质疑交易状态的证明。根据具体实现方式，欺诈证明会对一部分交易进行重新运行并尝试验证它们。

简单来说：

- 如果欺诈证明发现了错误，插入批次中的交易会被移除，该批次会回退到之前经过验证的正确状态。
- 如果在争议期内没有提交任何欺诈证明，该状态变更就会被乐观地认定为正确。

### 欺诈证明是如何工作的？

欺诈证明的原理是通过单轮计算（如 Optimism）或多轮计算（如 Arbitrum），比较 Merkle 根并验证起始和结束状态根。

区块链运行在一种称为 **Merkle 树** 的数据结构之上，该结构将每笔交易作为树中的一个叶子节点，后续分支则由日益复杂的哈希表示。

根节点，也称为 **Merkle 根**，是一个哈希值，能够有效压缩数据，使用户不必持续下载整条主链的数据。

<ImageBlock
  src="https://media.alchemy.com/1704290692-fraud-proof-merkle-root.png"
  alt="绿色部分的数据以及上图所示的 batch，足以验证 post-state root。（来源：Vitalik's Blog）"
  width={411}
  height={481}
  caption="绿色部分的数据以及上图所示的 batch，足以验证 post-state root。（来源：Vitalik's Blog）"
/>

如果验证者想要质疑某次交易状态变更，只需提交当前的后置状态根以及 Merkle 树中可用于计算正确后置状态根的特定部分即可。如果两者不一致，交易状态变更就会被回退，哈希值也会重置为可证明正确的状态根。

### **哪些区块链使用欺诈证明？**

**欺诈证明和 Optimistic Rollup 模型比主链上的交易要便宜且快得多，这也是 Arbitrum、Optimism 和 Metis Andromeda 等区块链偏好使用它们的原因**。

Optimism 和 Arbitrum 使用各自专为 Optimistic Rollup 功能设计的、与 EVM 兼容的虚拟机，尤其擅长批量处理交易并提升吞吐量；而 Metis 则更专注于其 L2 系统的适用性，提供多种功能以辅助[应用](https://www.alchemy.com/dapps/top/defi-dapps)、[DAO](https://www.alchemy.com/dapps/top/daos)以及 DeFi 生态的创建与开发。

## 有效性证明和欺诈证明有哪些相似之处？

ZK 证明和欺诈证明的相似之处在于，二者都使用 Rollup 方案来实现扩容，并且都针对不同使用场景有多种实现方式。

### 1. 二者均用于 layer 2 的、基于 Rollup 的扩容方案

Rollups 的设计目的是将大部分负载从 Ethereum 主链上移除。Rollups 不在主网上运行交易，而是将计算移到链下进行，同时在 Ethereum 上仅保留每笔交易少量的数据。通过压缩交易，Rollups 能够实现更高的每秒交易数（TPS）扩容能力，并降低平均 gas 成本。

Rollups 主要分为两种类型：Optimistic 和 ZK Rollups。

**Optimistic Rollups** 的关键特征在于，它们最初假设所有交易均有效，并允许这些交易被添加到批次中。提交之后会有一个争议期，在此期间交易可以通过欺诈证明受到质疑。

**Zero Knowledge Rollups** 与 Optimistic Rollups 类似，同样会将交易聚合成批次后提交，但二者的一个主要区别在于：ZK Rollups 在交易被提交到 Rollup 之前，会使用有效性证明对每笔交易进行验证，且无需共享任何个人信息。

### 2. 有效性证明和欺诈证明都有多种实现方式

有效性证明有多种实现方式，包括但不限于 SNARKs 和 STARKs；欺诈证明也有多种实现方式，包括单轮 Rollups 和多轮 Rollups。

### SNARKs 与 STARKs

两种流行的 ZK 证明实现方式是 [SNARKs 和 STARKs](https://www.alchemy.com/overviews/snarks-vs-starks)。

**SNARK 的含义是：**

- Succinct（简洁的）
- Non-interactive（非交互式的）
- ARgument of
- Knowledge（知识论证）

ZK SNARKs 能够生成体积小、可快速验证的知识论证（即计算上可靠的密码学证明），无需在证明本身之外提供额外信息。

**类似地，STARK 的含义是：**

- Scalable（可扩展的）
- TRansparent（透明的）
- Argument of
- Knowledge（知识论证）

SNARK 与 STARK 之间的关键区别在于 STARK 的可扩展性和透明性。STARK 之所以具有可扩展性，是因为其证明规模呈线性增长，而 SNARK 证明的规模仅呈拟线性增长。因此，STARK 更适合用于较大规模的交易。

此外，SNARK 具有透明性，因为它们可以使用公开可验证的随机性来建立证明者与验证者之间的交互，而不必依赖更为中心化的可信初始设置（trusted setup）。

### 单轮 Rollup 与多轮 Rollup

Optimistic Rollups 主要分为单轮和多轮两种类型，分别由 Optimism 和 Arbitrum 采用。当验证者在 Optimism 上提交欺诈证明以质疑某笔交易时，整个证明过程都在 EVM 上运行，这是一个相对快速且简单的过程，唯一的限制是一周的争议时间延迟（DTD）。

而另一方面，Arbitrum 的欺诈证明验证过程依赖于一种交互式的链下争议验证流程：断言者（asserter）和挑战者（challenger）通过多轮交互，逐步缩小交易中存在分歧的部分范围，直到找到具体的分歧点。

## 有效性证明和欺诈证明有哪些不同之处？

ZK 证明和欺诈证明之间存在多个方面的差异，包括所需的计算量、验证交易所需的时间、安全性以及实现难度。

### 1. 有效性证明比欺诈证明计算量更大

ZK 证明在数学上本身就难以验证，考虑到真正的零知识验证过程所需的技术复杂性，通常需要大量的计算。

欺诈证明每批次的成本通常更低，约为 40,000 gas，而 ZK SNARK 证明则需要 500,000 gas。然而，ZK SNARK 在链上的成本反而更低，因为 Optimistic Rollups 需要将所有数据发布回主链，欺诈证明才能据此判定某个结果是否合法。

### 2. 有效性证明是即时的，而欺诈证明存在争议时间延迟

ZK 证明和欺诈证明的一个主要区别在于：ZK 证明能够立即验证交易，而欺诈证明存在固有的争议时间延迟（DTD），会拖慢交易速度。只有当验证者针对某个批次没有提交任何欺诈证明时，该批次才会真正被发布到 Ethereum 上。

### 3. 有效性证明的去中心化程度和数据安全性更高

由于 ZK 证明所需的交互极少（例如，仅需向验证者共享一个证明），并且这一过程可以安全地完成，因此它们具有很高的去中心化程度。

此外，由于这类证明是零知识且完全准确的，有效性证明能够保护用户隐私，并将 L1 链上诸如 51% 攻击等严重威胁的风险降到最低。

而 Optimistic Rollups 则需要验证者提交欺诈证明，这一证明可能会被拦截或遭受 DDoS 攻击，从而阻止交易状态质疑被提交到批次中。

### 4. 有效性证明的实现难度更高

Optimistic Rollups（以及由此产生的欺诈证明）可以在任何 EVM 或 [Optimistic Virtual Machine](https://www.alchemy.com/overviews/optimistic-virtual-machine)（OVM）上运行，而零知识证明和 ZK Rollups 则需要专门的虚拟机，即零知识 Ethereum 虚拟机（[zkEVMs](https://www.alchemy.com/overviews/zkevm)）。这类虚拟机能够以与 ZK 计算及密码学有效性证明兼容的方式执行智能合约。

直到不久之前，人们还认为 zkEVM 只是理论上可行，即使在今天，要对 EVM 进行改造以支持 ZK 证明仍然具有挑战性。不过，ZK 领域出现了一些新的进展，正在为 ZK 证明带来吞吐量和可扩展性方面的提升。

其中最值得关注的是，Polygon 正在开发[自己的 Rollup 技术](https://www.alchemy.com/overviews/polygon-zk-rollups)，该技术使用递归 ZK SNARKs，能够更高效地在链下执行交易，然后再返回主链。递归证明的原理是：一次性证明多个交易区块，然后再证明一个聚合后的区块。

本质上，SNARKs 在证明其他 SNARKs，最终生成的单一交易，比多笔分别打包的交易更加高效。Polygon 旗下的 Polygon Zero 使用 **Plonky2** 来生成这些递归证明，这是目前速度最快的证明方案。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "", dataType: "object" },
      { key: "2", width: 200, title: "<p>Validity Proofs (STARKs or SNARKs)</p>", dataType: "object" },
      { key: "3", width: 200, title: "<p>Validity Proofs (STARKs or SNARKs)</p>", dataType: "object" },
      { key: "4", width: 200, title: "<p>Fraud Proofs</p>", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p><strong>On-Chain Data</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>zK-Rollup</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Volition</p>", tooltip: "", icon: "" },
        "4": { title: "<p>Optimistic Rollup</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p><strong>Off-Chain Data</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Validium</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Volition</p>", tooltip: "", icon: "" },
        "4": { title: "<p>Plasma</p>", tooltip: "", icon: "" },
        id: 1,
      },
    ],
  }}
/>

另一种选择是 [Validum](https://ethereum.org/en/developers/docs/scaling/validium/)，这是一种 ZK Rollup，与在链上存储部分数据不同，它将所有数据都存储在链下。这种方案存在的一个风险因素是，StarkEx 运营方可能阻止访问或修改链下数据，但这一风险可以通过设立数据可用性委员会（Data Availability Committee，DAC）来缓解，该委员会提供中立、诚实的数据存储服务。

## 我应该使用哪种 layer 2 扩容方案？

直到不久之前，欺诈证明和 Optimistic Rollups 一直更受青睐，因为 ZK 证明难以实现，且计算量要大得多，但零知识领域的一系列新进展正在使 ZK Rollups 变得比以往任何时候都更加易于实现。

随着越来越多 zkEVM 的出现，以及交易能够实现更安全、无需信息共享且非交互式的保证，ZK Rollups 正在成为新兴的主流 layer 2 扩容方案。
