---
title: "Validity（ZK）證明 vs. Fraud 證明"
description: "了解 zero knowledge 證明、fraud 證明，兩者的相似之處、差異，以及該如何選擇"
---

# Validity（ZK）證明 vs. Fraud 證明

Ethereum 的指數型成長為資料處理與儲存帶來了困難，尤其是在區塊限制的約束下——這些限制是為了在鏈上驗證每一筆交易，藉此維持去中心化與資料安全性所必需的。

不同於與 Ethereum 平行運作、卻無法獲得其安全性優勢的側鏈，以及依賴自身共識機制來確保狀態有效性的[單體式區塊鏈（monolithic blockchains）](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) — 假設所有交易皆為有效，並使用**詐欺證明（fraud proofs）**在 7 天內證明不實交易
1. [零知識（ZK）Rollups](https://www.alchemy.com/blog/zero-knowledge-rollups) — 使用**有效性證明（validity proofs）**立即證明交易是否有效

有效性證明與詐欺證明皆用於在交易被記錄至基礎鏈狀態之前，驗證其合法性。

## 什麼是有效性證明？

**有效性證明，也稱為零知識（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 證明？**

**使用零知識證明與 Rollups 的區塊鏈範例包括 zkSync、StarkNet 與 Zcash。**

所有 ZK rollups 都高度專注於安全性與交易驗證，這使它們得以可靠地應用於各種使用情境。zkSync 與 Zcash 較著重於交易本身，而 StarkNet 則已多元發展，支援各種 dapp 與 DeFi 專案，其中包括 **Immutable X**——一個為遊戲社群提供安全 NFT 與 web3 開發的框架。

## 什麼是詐欺證明？

詐欺證明（fraud proof），也稱為**故障證明（fault proof）**，是驗證者提交、用以質疑某項交易狀態的證明。根據實作方式不同，詐欺證明會重新執行一段交易並嘗試對其進行驗證。

以下是簡單的說明：

- 若詐欺證明發現錯誤，則批次中插入的交易會被移除，該批次會回復至先前可驗證為正確的狀態。
- 若在爭議期間內未有任何詐欺證明被提交，則該狀態變更會被樂觀地視為正確。

### 詐欺證明如何運作？

詐欺證明的運作方式是比對 Merkle 根，並透過單輪運算（如 Optimism）或多輪運算（如 Arbitrum）來驗證起始與結束狀態根。

區塊鏈是建立在一種稱為 **Merkle Tree** 的資料結構上，其中每筆交易皆為樹中的一個葉節點，而後續的分支則由越來越複雜的雜湊值所組成。

根節點，也稱為 **Merkle 根（Merkle Root）**，是一個能有效壓縮資料的雜湊值，使使用者不必持續下載整條主鏈的完整資料。

<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）"
/>

若驗證者想要質疑某筆交易的狀態變更，他們只需提交目前的後狀態根（post-state root），以及可用來計算正確後狀態根的 Merkle tree 特定部分。若兩者不一致，該交易狀態變更將被回復，雜湊值也會重設為可證明正確的狀態根。

### **哪些區塊鏈使用詐欺證明？**

**詐欺證明與 optimistic rollup 模式相較於主鏈上的交易，成本顯著更低、速度也更快，這正是 Arbitrum、Optimism 與 Metis Andromeda 等區塊鏈偏好採用此方式的原因**。

Optimism 與 Arbitrum 皆使用自家、與 EVM 相容的虛擬機，專門為 optimistic rollup 功能設計，尤其著重於批次處理交易與提升吞吐量的能力；而 Metis 則更著重於其 L2 系統的實用性，提供多種功能以協助建立與開發[應用程式（apps）](https://www.alchemy.com/dapps/top/defi-dapps)、[DAOs](https://www.alchemy.com/dapps/top/daos) 以及 DeFi 生態系。

## 有效性證明與詐欺證明有何相似之處？

ZK 證明與詐欺證明的相似之處在於，兩者皆使用 rollup 方案來達成擴展性，且兩者都有多種因應不同使用情境的實作方式。

### 1. 兩者皆用於 layer 2 的 rollup 型方案，以提升可擴展性

Rollups 的設計目的是將大部分負載從 Ethereum 主鏈上移除。Rollups 不在主網上執行交易，而是將運算移至鏈下進行，同時只在 Ethereum 上保留每筆交易的少量資料。透過壓縮交易，rollups 得以提升每秒交易數（TPS）的可擴展性，並降低平均 gas 成本。

Rollups 主要分為兩種類型：optimistic rollups 與 ZK rollups。

**Optimistic rollups** 的關鍵特徵在於，它們一開始便假設所有交易皆為有效，並允許這些交易加入批次。提交後會有一段爭議期，期間交易可透過詐欺證明被提出質疑。

**零知識 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 所具備的可擴展、透明特性。STARKs 之所以具可擴展性，是因為其證明規模呈線性成長，而 SNARK 證明的規模則僅為擬線性成長。因此，STARKs 更適用於較大規模的交易。

此外，SNARKs 具有透明性，因為它們可以使用可公開驗證的隨機性，來建立證明者與驗證者之間的互動，而不需依賴較為集中化、需要信任的初始設定。

### 單輪 rollups 與多輪 rollups 的比較

Optimistic rollups 主要分為單輪與多輪兩種類型，分別由 Optimism 與 Arbitrum 採用。當驗證者在 Optimism 上提交詐欺證明以質疑某筆交易時，整個證明過程會在 EVM 上執行完畢，這是一個相對快速且簡單的流程，唯一的限制是一週的爭議延遲時間（DTD）。

相較之下，Arbitrum 的詐欺證明驗證流程依賴一套互動式的鏈下爭議驗證機制，斷言者（asserter）與挑戰者（challenger）會在多個回合中反覆縮小交易範圍，直到找出雙方意見分歧的部分。

## 有效性證明與詐欺證明有何差異？

ZK 證明與詐欺證明存在多項差異，包括所需的運算量、驗證交易所花費的時間、安全性，以及實作的難度。

### 1. 有效性證明的運算量比詐欺證明更大

ZK 證明本質上在數學驗證上具有相當高的難度，由於真正的零知識驗證過程需要一定的技術性，通常需要密集的運算。

詐欺證明每批次的成本通常較低，約為 40,000 gas，而 ZK SNARK 證明則需要 500,000 gas。然而，ZK SNARKs 在鏈上的成本反而較低，因為 optimistic rollups 需要將所有資料重新發佈回主鏈，詐欺證明才能對結果進行證實或推翻。

### 2. 有效性證明即時完成，而詐欺證明有爭議延遲時間

ZK 證明與詐欺證明的一項主要差異在於，ZK 證明能立即驗證交易，而詐欺證明則存在固有的爭議延遲時間（Dispute Time Delay，DTD），會拖慢交易速度。只有當驗證者在該批次相關的爭議期內未提交任何詐欺證明時，該批次才會實際被發佈至 Ethereum。

### 3. 有效性證明具有更高的去中心化程度與資料安全性

由於 ZK 證明所需的互動極少（例如僅需將證明分享給驗證者），且此過程可以安全地完成，因此其去中心化程度非常高。

此外，由於這些證明屬於零知識、且準確無誤，有效性證明能夠保護使用者隱私，並將 51% 攻擊等針對 L1 鏈的重大威脅風險降至最低。

然而，optimistic rollups 需要驗證者提交詐欺證明，而此證明可能遭到攔截或 DDoS 攻擊，導致交易狀態的質疑無法送達至該批次。

### 4. 有效性證明較難實作

雖然 optimistic rollups（以及隨之而來的詐欺證明）可在任何 EVM 或 [Optimistic 虛擬機](https://www.alchemy.com/overviews/optimistic-virtual-machine)（OVM）上運作，但零知識證明與 ZK rollups 則需要專門的虛擬機——稱為零知識 Ethereum 虛擬機（[zkEVMs](https://www.alchemy.com/overviews/zkevm)）。這類虛擬機能夠以符合 ZK 運算與密碼學有效性證明的方式執行智能合約。

直到最近，zkEVMs 一直被認為僅在理論上可行，即使到了現在，要將 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 變得比以往更容易採用。

隨著越來越多 zkEVMs 的出現，加上更安全、不涉及個人資訊、且非互動式交易的保證，ZK rollups 正逐漸成為新興的首選 layer 2 擴展方案。
