导语:把执行搬到链下,把安全留在链上
以太坊 L1 的瓶颈是执行:全节点要验证每一笔计算。Layer2 的核心思想是把执行(execution)搬到链下,只把数据与安全锚定在链上。
Rollup(汇总)是当前主流的 L2 形态:它把大量 L2 交易**打包(roll up)**成一个批次(batch),提交到 L1,同时承诺"这些交易执行后的新状态根"。
一句话总结:Rollup 用"链下执行 + 链上验证/争议"换来了 10~1000 倍的吞吐,同时让 L1 承担最终安全——这是执行分片愿景在工程上最成熟的落地。
1. Rollup 的核心架构
1.1 基本流程
用户 → 提交交易给 L2 定序器(Sequencer)
│
▼
定序器:排序交易 → 在 L2 状态上执行 → 生成新状态根
│
├─ 把压缩后的交易数据(calldata/blob)发布到 L1(数据可用性)
├─ 提交"状态根承诺"到 L1 合约(rollup 合约)
│
▼
L1 Rollup 合约:
Optimistic → 假设批次正确,进入挑战期(可被欺诈证明挑战)
zk-Rollup → 提交时附带有效性证明(zk-proof),即刻确认
1.2 关键概念
| 概念 | 含义 |
|---|---|
| 定序器 | 中心化的交易排序者(目前多数是运营方运行;去中心化排序在演进中) |
| 批次 | 一批 L2 交易压缩后的数据 + 新的状态根 |
| 状态根 | 每次执行后 L2 世界状态的 Merkle 根 |
| L1 锚定 | Rollup 合约托管 L2 资产 + 验证批次/证明 |
| 强制包含 | 用户在定序器作恶时可直接向 L1 提交交易(逃生舱) |
1.3 数据发布的两条路径
路径 A(传统):批次数据写入 L1 calldata
→ 永久存储在 L1,任何人都能重放执行 → 最安全但最贵
路径 B(EIP-4844 Blob):批次数据写入 Blob
→ Blob 只保留约 18 天(Prune 后无法完整重放)
→ 成本低一个数量级;长尾验证依赖数据存储服务(DA 层)
一句话总结:Rollup 的三块积木——执行(链下)、数据(发 L1)、验证(挑战或证明)——分别对应吞吐、可用性、安全性三大目标,任何一块弱化都会传导成信任假设的变化。
2. Optimistic Rollup:乐观执行 + 欺诈证明
2.1 核心思想
假设批次是正确的,除非有人能证明它错了。验证不是主动执行,而是"事后争议"。
提交批次(含新状态根)→ 7 天挑战期(挑战窗口)
│
├─ 无人挑战 → 批次被确认(状态根最终化)
│
└─ 有人挑战 → 争议解决(interactive fraud proof)
挑战者与提议者围绕争议点进行多轮二分博弈
最终由 L1 合约执行争议的单个步骤
若提议者输 → 质押被罚没,批次回滚
2.2 欺诈证明:二分争议(Interactive Proof)
为了不在 L1 上重放整个批次,Optimism 的防欺诈系统(Cannon)把争议缩小到单条指令:
争议起点:批次状态根 S 与挑战者主张的 S'
↓ 递归二分
比较执行到第 N/2 步的状态哈希 → 逐级缩小
↓
最终:L1 合约只重放 ONE 条 EVM 指令
→ 判定谁对 → 罚没质押
| 特性 | 描述 |
|---|---|
| 挑战窗口 | ~7 天(Optimism)/ ~6.5 天(Arbitrum 支持快出) |
| 资产退出 | 需要等待挑战窗口结束才能提款 |
| 吞吐 | 高(执行在链下,无密码学证明开销) |
| 兼容性 | EVM 等价(可运行现有合约) |
| 代表 | Optimism(OP Stack)、Arbitrum(Nitro)、Base |
2.3 安全假设
- 至少一个诚实的验证者在监控链(否则错误批次可被偷渡)
- 数据可用:挑战者必须能从 L1 获取全部批次数据以重放执行
- 定序器不能审查(可通过 L1 强制包含交易绕过)
一句话总结:Optimistic Rollup 用"默认信任 + 事后审计"换来了低复杂度高吞吐,代价是 7 天的提款延迟与"必须有人盯着"的安全假设。
3. zk-Rollup:执行结果 + 有效性证明
3.1 核心思想
每次提交批次时,附带一个密码学有效性证明(zk-SNARK/STARK),证明"批次的输入 → 声明的状态根"是真实执行的结果。
批次提交 = 压缩交易数据 + 状态根 + 有效性证明
L1 合约:
1. 取批次数据作为公开输入
2. 验证 zk-proof(调用 bn128Pairing 等预编译合约)
3. 通过 → 状态根立刻确认(无挑战窗口)
zk 证明要点:
证明 P:(executed(txs) = new_state_root) 且所有交易合法
验证 O(1):与批次大小无关(证明越小越好)
3.2 两种主流证明系统
| 维度 | zk-SNARK | zk-STARK |
|---|---|---|
| 依赖假设 | 可信设置(trusted setup,部分系统已免) | 仅哈希(无可信设置) |
| 证明大小 | ~几百字节(最优约 100B) | 数十 KB ~ 数百 KB |
| 验证成本(L1) | 低 | 较高 |
| 生成速度 | 较慢(需 Groth16/Plonk 电路优化) | 生成快、可并行 |
| 代表 | zkSync(SNARK)、Polygon zkEVM | Starknet(STARK) |
| 量子安全 | 多数不是 | 是 |
3.3 zkEVM 的挑战
让 zk 证明电路直接证明"EVM 执行"很困难:
zKEVM 兼容层级:
L1 完整 EVM → 证明每条 opcode → 最慢、最接近完全等价(如 Scroll)
字节码级仿真 → 把 EVM opcode 映射到自定义电路 → 快、部分兼容(zkSync Era 初版)
高级语言级 → 编译 Solidity 到 zk 友好中间表示 → 最快、兼容性最弱
| 指标 | zk-Rollup | Optimistic Rollup |
|---|---|---|
| 提款延迟 | 分钟级(无需挑战窗口) | ~7 天 |
| 复杂度 | 高(证明系统工程庞大) | 低 |
| 吞吐上限 | 高(可用递归证明进一步聚合) | 高(但受数据限制) |
| 活跃安全假设 | 无(无需监控者) | 需诚实监控者 |
| 状态根确认 | 即时 | 延迟 |
| 代表 | zkSync、Starknet、Scroll、Polygon zkEVM | Optimism、Arbitrum、Base |
一句话总结:zk-Rollup 用"先证明、后确认"取代"先信任、后挑战",换来了即时提款和更弱的安全假设,代价是把整个 EVM 语义编译进密码学电路——这是当前 L2 工程最烧钱也最有想象力的赛道。
4. 数据可用性(DA):Rollup 的命脉
4.1 为什么 DA 如此重要
Rollup 安全的前提是任何人都有能力重放执行(Optimistic 挑战 / zk 验证的公共输入)。如果批次数据丢失,“状态根"就无法被独立验证——资金可能被"冻结"在错误的根上。
数据可用性(Data Availability)分层:
L1 calldata → 永久、最贵、最安全
L1 Blob(4844) → 约 18 天、便宜一个数量级
专用 DA 层 → Celestia / EigenDA / Avail(模块化 DA,信任转移到 DA 层)
4.2 数据可用性采样(DAS)
Celestia 等模块化 DA 用 DAS(Data Availability Sampling) 让轻节点只需随机下载一部分数据即可高概率确认数据完整:
区块数据被切分成大量 chunk,并用 Reed-Solomon 编码扩展
轻节点随机采样 K 个 chunk:
若某 chunk 缺失 → 通过纠删码可恢复
攻击者必须隐藏超过 1/2 的 chunk 才能通过采样 → 概率指数下降
4.3 Rollup 与 DA 的关系演进
| 方案 | DA 存储 | 信任假设 | 成本 |
|---|---|---|---|
| 传统 Rollup | L1 calldata | 完全依赖 L1 | 高 |
| 4844 后 Rollup | L1 Blob | 依赖 L1(但数据有期限) | 中低 |
| 模块化 Rollup | 专用 DA 层 | 额外信任 DA 层 | 低 |
| Validium | 链下/运营商存储 | 信任运营商(弱 DA) | 最低 |
一句话总结:DA 决定"可重放性”,可重放性决定"可验证性"——把 DA 下放到第三方层,本质上是在用信任换成本,这是 Validium 与真 Rollup 的分水岭。
5. 跨 L2 桥与互操作
5.1 L2 → L1 提款:消息机制
存入(L1 → L2):
用户调用 L1 Rollup 合约 → 定序器纳入 L2 交易 → L2 资产入账(通常较快)
提款(L2 → L1):
L2 发起提款交易(burn L2 资产)
L2 状态根被提交到 L1 且被确认(Optimistic 需等挑战窗口)
L1 合约验证后 → 解锁 L1 资产
5.2 L2 → L2:跨链桥的三条路径
| 方案 | 机制 | 延迟 | 信任假设 |
|---|---|---|---|
| 规范桥(官方) | 经 L1 中转 | Optimistic:7 天 / zk:分钟级 | 最少 |
| 跨链消息协议 | 中继者(relayers)验证 L2 轻客户端 | 数分钟 | 信任中继者或做乐观验证 |
| 聚合协议 | Across、Connext、LayerZero(Off-chain oracle) | 快 | 信任预言机/中继网络 |
// 以 LayerZero 风格的消息接口示意(概念,非完整代码)
contract L2Sender {
function sendMessage(bytes calldata payload) external {
ILayerZeroEndpoint(lzEndpoint).send(
targetChainId,
abi.encode(msg.sender, payload), // 目标链的接收地址
address(this),
payable(msg.sender)
);
}
}
5.3 互操作方向:聚合层与共享排序
Shared Sequencer(共享定序器):
多个 L2 共用同一个定序器 → 原子跨 L2 交易成为可能(跨 L2 无需桥)
Intent-based(意图系统):
用户声明"我想做 X" → 求解器(solver)竞标执行 → 结果聚合
代表:Anoma、Across、UniswapX 精神
一句话总结:跨 L2 桥的本质是"消息传递 + 状态证明验证"——延迟与信任直接取决于验证方式(L1 全量验证最安全最慢,乐观/中继最快但多一层信任)。
6. Rollup 生命周期:从提交到最终确认
┌─ 用户 ──┬─ 定序器 ──┬─ L1 合约 ──┬─ 挑战/证明 ──┬─ 最终化 ─┐
│ 签名交易 → 排序执行 → 批次+状态根 → Optimistic:挑战期 │ 状态根被
│ │ 构建批次 → 发布数据 → zk:验证证明 │ 最终确认
└─────────┴─────────┴───────────┴───────────────┴──────────┘
最终化层级(以 Optimistic 为例):
L2 内部确认(定序器承诺) → 软确认
数据发布到 L1 → 可重放
挑战窗口关闭 → 状态根最终化 → 硬确认(可安全提款)
6.1 逃生舱(Force Inclusion)
若定序器作恶/宕机,用户可直接在 L1 调用 Rollup 合约的强制包含入口提交 L2 交易——这是对中心化排序的最终制衡。
6.2 安全评级视角
| 信任假设 | Optimistic | zk-Rollup |
|---|---|---|
| 诚实假设 | 需至少一个诚实挑战者 | 无 |
| 定序器信任 | 审查可由强制包含绕过 | 同左 |
| 数据可用 | 需可重放(L1 或长期 DA) | 同左 |
| 协议升级 | 多数走升级合约(存在社会信任) | 同左 |
一句话总结:Rollup 的完整生命周期是"排序→发布→验证→最终化"四步曲;理解挑战窗口、blob 期限、强制包含,才知道你的资金在 L2 上到底有多安全。
7. 总结
- Rollup 本质:链下执行 + 链上数据 + 链上验证/争议
- Optimistic:欺诈证明 + 挑战窗口 → 延迟换取简单
- zk-Rollup:有效性证明 → 即时确认换取证明工程复杂度
- DA 是命脉:Blob 与模块化 DA 重构了成本结构
- 跨 L2 桥:消息 + 证明验证,信任与速度的权衡是核心
延伸阅读:
- 以太坊 EVM 与状态模型 — Rollup 要汇总的就是这台状态机
- 共识算法深入 — L1 最终化与安全属性
- 区块链密码学基础 — zk 证明与配对预编译的数学底座
- 跨链互操作 — 跨 L2 桥在更大互操作谱系中的位置
- 区块链-web3 专题 — 在 L2 上构建 DApp 的工程实践
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。