optimistic rollup 初探
什么是 layer2
Layer2 是构建在 Layer1 之上的二层网络,主要用来帮助 Layer1 实现扩容。以 Ethereum 为例,Ethereum 每天能处理的交易量只有 1M+,随着交易需求的增加,链上越来越拥堵,gas fee 也越来越高,所以以太坊社区开始大力发展 Layer2,希望在不牺牲去中心化的前提下将部分交易转移至 Layer2,以实现扩容并降低 gas fee。
Layer2 有很多解决方案,市面上大致有这些解决方案:
Rollup
Plasma
sidechain
validium
lightning network(BTC)
什么是 Optimistic Rollup
Optimistic Rollup 是 Rollup 的一种,它在 L2 上执行交易、管理状态,并定期将交易数据以 batches 的形式打包压缩回传至 L1,由于发生在 L2 上的若干笔交易被压缩成了一个 batch,最终落在 L1 上的就只有一笔交易,这若干笔交易平摊了 L1 上一笔交易的 gas fee,从而实现了降低交易费的目的。
optimistic rollup 之所以被称为乐观 rollup,是因为它们默认链下交易都是合法的,也不会向主网上传 validity Proof(与之对应的,ZK Rollup 每次提交 batches 的时候,会额外提供 Validity Proof)。
optimistic rollup 借助 fraud proof 来确保链下交易的合法性。每个 batch 提交至 L1 后,会提供一个时间窗口,我们称之为挑战期(一般为 7 天),在挑战期内,如果某个 L2 node 生成的 state root 和其他 node 对不上,它会向 L1 发起 fraud proof challenge,一旦挑战成功,交易被重置,同时作恶的 sequencer 会被惩罚。
如果 rollup batch 在挑战期结束后未被成功挑战(或未被挑战),它进入 finalized 状态,不可被回滚。
Optimistic rollup 具体如何工作的?
网络角色
在 L2 网络中,主要有三个角色:
Users
Sequencers
Verifiers
Users
Users 可以:
在 L1 上发起 Deposit & Withdraw 交易,以进入或者退出 L2
借助 Sequencer 在 L2 完成各类交易
借助 Verifier 及定制的区块浏览器读取 L2 交易状态
Sequencer
Sequencer 负责接收 Users 提交的 L2 交易,随后排序交易并打包执行,生成 L2 blocks,向前延展 L2 chain.
sequencer 比任何其他类型的节点有着更大的权利,它可以按特定方式排序交易,也是唯一的有权利向 L1 提交 L2 blocks 的实体。当前主流 sequencer 解决方案都是中心化的 sequencer,但为了交易抗审查等安全问题,去中心化的 sequencer 在未来仍然非常有必要。
更具体来说,Sequencer 能做这些事情:
接收来自 Users 的 L2 transactions
监控并同步来自 L1 的 deposit transactions,在 L2 上生成同样的 L2 deposit transactions
按特定方式将 L2 User transactions 和 L2 deposit transactions 在 L2 排序执行
向 L1 提交成功执行的 L2 transactions data 和 L2 state root,以供 Verifier 后续获取并验证。
Verifier
Verifier 主要起到两个作用:
验证提交至 L1 的 rollup data,确认从 rollup transaction data 能够成功推导出 rollup state,否则发起挑战并回滚交易。
向 User 展示 L2 网络的交易信息(结合区块浏览器前端)
另外,如果用户想要看到已在 L2 上完成执行但还未提交至 L1 的 L2 transactions 内容,我们仍然需要从 Sequencer 获得相应数据。
关键流程简介
以 optimism 实现为依据介绍
Deposit on L1
当用户想要开始 L2 上的交易时,他首先需要将 L1 token 转移至 L2 上。于是进行 deposit 流程:
用户在 L1 上向 op smart contracts 发起 deposit transaction
deposit transaction 执行后,会释放 deposit event
L2 node 会监听到这个 deposit event,同时在 L2 上创建 deposit transaction.
L2 node 执行 deposit transaction,token 被 mint.
deposit transaction 包含多种类型,上面介绍的类型是最典型的 token deposit,而当用户想通过 L1 向 L2 发送其他跨链消息时,也可以利用这个机制。
L2 transactions flow
资产转移成功后,用户可以在 L2 一样发起其他交易,L2 交易流程如下:
Sequencer 提供 RPC API,接收用户发起的交易请求。
Sequencer 执行层将 deposit transactions 和 RPC transactions 按照特定的排序规则一同执行,并出块。
L2 交易数据和状态,被压缩打包定期提交至 L1,以供 Verifier 后续验证。
Withdraw on L2
当用户想将资产转移回 L1 时,可以发起 Withdrawal 流程,分几步:
Withdrawal initiating transaction:用户在 L2 发起 Withdraw transaction
Withdrawal proving transaction:用户在 L1 向 OP 合约证明在 L2 的 withdraw transaction 存在(借助 merkle proof)。
Withdrawal finalizing transaction:七天挑战期结束后,用户最后在 L1 上发起一笔交易,完成资产最终的 Withdrawal。
fraud proof
具体 fraud proof 过程参考:fraud proving,这里我不细说了。
L1 在 Op Rollup 中的角色
Op Rollup 主要借助 L1 完成以下事情:
数据可用性
之前说过,op Rollup 会定期将 L2 交易数据和状态上传至 L1 存储(通常是存在 calldata 或者 blob 中)。有了这些公开可用可信的数据,任何人可以轻易的获取并构建 fraud proof 来确保非法交易被及时发现。所以 L1 充当的是数据可用性 provider 角色。
抗审查
由于当前 sequencer 是中心化的,它可能存在相应的作恶可能:
sequencer 可能拒绝打包特定用户的交易,或者直接彻底下线
sequencer 可能拒绝用户 withdraw 资产。
而有了 L1,这些问题都能被解决:
如果 sequencer 彻底下线, 这时我们可以临时使用 L1 作为 sequencer 继续提交交易(借助 deposit transaction 机制),其他 L2 节点会继续同步和执行这些交易。
用户可以利用交易数据生成 Merkle proof 证明资金的所有权,并 withdraw 资金。
总之,Ethereum 作为最终的仲裁和结算层,确保了 Layer2 的安全和可用。
Reference
Ethereum Layer2
Ethereum Scaling
Ethereum optimistic rollup
Alchemy: How Do Optimistic Rollups Work (The Complete Guide)
optimism rollup protocol