教程区块链区块链技术ch088.5 Rollup 技术:Optimistic 与 ZK Rollup

本页目录

Rollup 是当前以太坊扩容的核心路线,其设计哲学极其简洁:将 L2 上的大量交易压缩为一条批次提交到 L1,同时在 L1 用密码学方式证明这些交易的执行结果正确。这一节剖析两种实现路径—— Optimistic Rollup 的"欺诈证明"与 ZK Rollup 的"零知识证明"——以及它们在经济、延迟和密码学上的深层差异。


8.5.1 Rollup 的通用架构

无论具体方案,所有 Rollup 共享一个三组件架构:

组件功能部署位置
定序器(Sequencer)接收 L2 交易、执行、生成批次L2(中心化/去中心化)
合约桥(Bridge Contract)接收存款、验证证明、处理退出L1(以太坊主合约)
证明系统向 L1 证明批次状态正确欺诈期或 ZK 证明
graph TD
    A[用户] -->|L2 交易| B[定序器<br>执行+排序]
    B --> C[压缩批次数据
    上传 L1]
    C --> D[L1 桥接合约]
    D -->|验证状态根| E{验证方式?}
    E -->|欺诈证明| F[Optimistic Rollup
    7 天挑战期]
    E -->|ZK 证明| G[ZK Rollup
    分钟级确认]
    D --> H[存入/提取资产]
    style G fill:#ccffcc
    style F fill:#ffffcc

8.5.2 Optimistic Rollup:先执行,后质疑

核心假设:定序器提交的状态根默认正确,但在挑战期(通常为 7 天)内,任何人可提交欺诈证明(Fraud Proof)

争议解决

  1. 质疑者锁定押金;
  2. 链上合约以二分的形式重放交易(Interactive Fraud Proof),找到第一个产生分歧的操作码;
  3. 输方押金被罚没。

经济设计

  • 诚实节点有动力监控(因可赚罚没金);
  • 7 天延迟导致资产提取到 L1 极慢。
sequenceDiagram
    participant S as 定序器
    participant L1 as 以太坊 L1
    participant C as 挑战者
    
    S->>L1: 提交状态根 S_n
    Note over L1: 挑战期开始 (7天)
    C->>L1: 质疑: S_{i} 不等于正确执行
    L1->>L1: 二分查找找到分歧点
    L1->>L1: 单步重放 EVM
    L1->>L1: 判定: 定序器作弊
    L1->>C: 罚没定序器押金
    Note over L1: 状态回滚至 S_{i-1}

8.5.3 ZK Rollup:密码学保证即时最终性

核心机制:每笔批次附带有效性证明(Validity Proof),证明"执行这批交易后状态根确实等于 SnewS_{new}"。

证明系统演进

技术证明大小验证时间proof 生成时间通用性
SNARK(Groth16)~200 字节1.5 ms数秒需可信设置(后可选)
STARK~50 KB10 ms数分钟无需可信设置,抗量子
PLONK~400 字节3 ms数秒通用可信设置
Halo2~500 字节5 ms数十秒递归聚合,无需每批次设置
ts
// zk-rollup-batch-verify-sim.ts
// 纯内置:模拟 ZK-Rollup 状态根更新与证明数量

function rollupBatch(
  prevStateRoot: bigint,
  txs: Array<{ from: string; to: string; value: bigint }>,
  proofExists: boolean
): { newStateRoot: bigint; valid: boolean; dataSize: number } {
  if (!proofExists) return { newStateRoot: prevStateRoot, valid: false, dataSize: 0 };
  
  // 模拟状态根更新(hash(prev + 压缩 txs)
  let state = prevStateRoot;
  for (const tx of txs) {
    state = (state + BigInt(tx.value) * BigInt(tx.from.charCodeAt(0)) * 31n) % (1n << 256n);
  }
  // 批处理压缩: 100 笔交易在 L1 仅占用约 500 字节 SNARK 证明 + 状态根
  return { newStateRoot: state, valid: true, dataSize: 500 };
}

const prevRoot = 0xabcdef1234567890n;
const batch = Array.from({ length: 100 }, (_, i) => ({
  from: '0xA', to: '0xB', value: BigInt(i + 1),
}));

const result = rollupBatch(prevRoot, batch, true);
console.log(`新状态根: 0x${result.newStateRoot.toString(16).slice(0, 16)}...`);
console.log(`L1 数据大小: ${result.dataSize} 字节 (替代原约 25000 字节的 100 笔交易)`);
// 压缩比: ~100 倍,验证成本恒定(~113000 gas 配对验证)

8.5.4 数据可用性:Rollup 的生死线

Rollup 的安全性依赖于L1 上的数据可用性

  • 场景 A(乐观 Rollup):数据在 L1,任何人可下载并重放交易以发现欺诈;
  • 场景 B(Validium):数据在链下(如 DAC 委员会),仅状态根上链;
  • 场景 C(数据不可用攻击):定序器提交状态根但不上传交易数据 → 无人可生成欺诈证明。

安全层级

Rollup>Validium>侧链\text{Rollup} > \text{Validium} > \text{侧链}

以太坊通过 EIP-4844 Blob 交易 专门降低了 Rollup 的 L1 数据成本(calldata 成本原为每字节 16 Gas,Blob 数据成本约 1 Gas/字节,且临时存储 4096 个 epoch 后删除)。


8.5.5 项目对比

维度OptimismArbitrumzkSync EraStarkNet
类型OptimisticOptimisticZK (SNARK)ZK (STARK)
EVM 兼容完全完全自定义字节码Stark 语言
提款延迟7 天7 天分钟级数小时
证明成本无(挑战期)~350K Gas~500K Gas
数据格式calldatacalldatacalldata + blobsblobs
去中心化定序器规划中规划中已部分多签已多签

关键认知五:Optimistic Rollup 与 ZK Rollup 不是"哪个更好",而是信任假设与效率的权衡。Optimistic 更兼容现成 EVM 合约,但 7 天提款延迟是硬伤;ZK 提供密码学级即时性,但证明生成成本高、通用 ZK-EVM 仍在成熟中。以太坊的扩容未来不是二选一,而是二者共存——Optimistic 负责迁移兼容,ZK 负责最终安全锚。


← 8.4 状态通道 | 前往 → 8.6 跨链桥与桥安全

评论

0

评论加载中…

发表评论

0/2000