Rollup 是类似于 Plasma 的第 2 层扩展解决方案:单个主链合约持有所有资金和对更大“侧链”状态(通常是账户、余额及其状态的 Merkle 树)的简洁加密承诺。侧链状态由链下用户和运营商维护,不依赖 L1 存储(这是最大的可扩展性胜利的来源)。
Rollup 与 Plasma 的不同之处在于,它解决了 Plasma 的巨大问题——数据可用性——通过 L1 网络发布每笔交易的一些数据(在以太坊中,专门为此目的使用了 tx CALLDATA)。因此,可以将数千个交易捆绑(汇总)在一个汇总块中。虽然这种方法在成本(事务数量的 O(n))方面严格线性增长,但它提供了实际 100 倍的吞吐量提高,因为 CALLDATA 比 L1 存储和计算便宜得多。
Rollup 多次被 Vitalik Buterin 认可为他最喜欢的 Layer-2 扩展解决方案。
根据如何保证状态转换的正确性,有两种 Rollup 风格:ZK Rollup 和 Optimistic Rollup, 根据不同的项目,又有不同的改进版 Rollup
Rollups 旨在通过压缩第 1 层区块链上的数据足迹来降低 gas 费用。汇总工作原理的基本思想是,它将大部分事务——计算(和状态存储)——从基础链推到第二层,同时将事务数据提交回底层的第 1 层链进行存储。
后者是关键,因为它允许区块链运营商检查和检测在链下计算的交易的欺诈行为,如果他们愿意的话。
在安全性方面,rollup 仍然依赖于以太坊基础链,因此如果用户已经信任以太坊的安全验证,则不必信任一组单独的验证器。
Rollup 的核心思想是将“打包”后的交易数据区块发布在链上,从而降低交易有效性验证的难度。交易数据的上链和验证是基于智能合约完成的。操作者收集到不同参与者提交的链下交易后,在链上执行 Rollup 智能合约提供的脚本,将打包后的交易数据区块作为参数提交给合约,合约验证数据有效后为每个参与者记账。这相当于一次性执行了一批链下交易,但是在链上只执行了一个交易。
下图是 ZK Rollup 提交上链的打包数据。它包含一组压缩后的交易数据 [Tx](不包含任何签名)、执行这批交易之前的老的用户状态的 merkle 树树根,以及执行交易之后的新的用户状态的 merkle 树树根。除此之外还包含一个 SNARK 零知识证明,合约用它来验证在老的用户状态上施加这批交易 [Tx] 后结果就是新的用户状态。零知识证明具体是如何工作的, 后面我们会专门出一个专栏课程,
生成 SNARK 的成本非常高,所以 Optimistic Rollup 采用了不同的方法——“欺诈证明”来验证交易有效性。这里的“欺诈证明”并非 SNARK 那样的见证数据,它实际上指的是加密经济学有效性博弈(Cryptoeconomic Validity Game)。越说越晕了,其实很简单,就是每次打包后的交易被提交到链上时,智能合约都假定它们是正确的,无需验证。如果有人篡改了交易,操作者或者其它参与者都可以挑战非法交易,挑战成功后通过智能合约回滚不正确的区块,作弊者会受到惩罚,它的押金将会被没收,部分押金会奖励给挑战者。这就是所谓的基于加密经济学有效性博弈的“欺诈证明”,实际上是让参与各方互相监督,通过惩罚机制来提高作弊成本。为了实现“欺诈证明”,光有 ZK Rollup 那样的交易数据 [Tx] 是不够的,Tx数据需要包涵交易提交者的签名,合约通过校验签名来判断交易是否合法
Rollup 的安全性来自于数据可用性和交易有效性。有了数据可用性和交易有效性,就能保证 Rollup 操作者永远不能破坏状态或窃取资金,即使操作者不配合,参与者也能方便的追回 Rollup 网络上的资产。Rollup 将交易数据发布到链上,就像“锚”一样将 Rollup 网络锚定到了以太坊主链上。就好比是赌场里装上了摄像头,即便是玩扑克的人被打了一闷棍,还是能通过视频记录证明自己确实赢了钱。
对于交易有效性验证,ZK Rollup 和 Optimistic Rollup 采取了不同的方法。ZK Rollup 采用零知识证明来保证交易有效。它的安全性建立在密码学基础之上,智能合约仅在交易数据被证明为正确之后才会接受状态转换。每次状态转换都有一个零知识证明,这保证了链上总是对应着一个正确的二层状态。Optimistic Rollup 采用基于加密经济学有效性博弈的“欺诈证明”,它无需为每一次状态转换都提供证明,只在有人认为状态转换有误的时候提供。因为沉默将被视为同意,所以它要求交易方必须每时每刻都要在线。相比较 ZK Rollup,Optimistic Rollup 的安全性有所降低,它需要采取额外的措施来防止 DDoS 攻击造成的“默许”。
Rollup 通过一次链上交易可以执行一大批打包后的链下交易,主链不需要通过执行每笔交易来验证其有效性,而且交易数据是作为函数参数发布的,验证完有效性后就会被丢弃,这样就不会占据主链的存储空间。因此 Rollup 可以大幅度提升主链的可扩展性。
但是这种提升并非没有限制,虽然只有一次链上交易,但是它会受到交易数据本身 gas 成本的制约。以太坊数据的 gas 成本在伊斯坦布尔升级前是每字节 68 单位,而以太坊上每个地址就会占用 20 字节,所以如果用以太坊交易的数据结构来表示链下交易,gas 费用会非常高,因此 Rollup 对交易数据进行了压缩。
ZK Rollup 在智能合约里用 merkle 树来记录地址,这样地址就可以表示成树的索引值,地址数据的大小就从原本的 20 bytes 减少到只有 3 bytes 到 4 bytes。每笔交易就被压缩成 10 几个字节,再加上一个约 100-300 字节的 SNARK,理论上可以将以太坊吞吐量从 32 TPS 提升到约 680 TPS,伊斯坦布尔升级后可达到 2000 TPS。下图是压缩后 ZK Rollup 每笔交易数据的格式:
Optimistic Rollup 的吞吐量理论上只有 100 TPS,主要原因是上文提到过的,为了支持“欺诈证明”,Optimistic Rollup的每笔交易数据需要包涵交易提交者的签名。每条签名的大小是 64 bytes,这大大增加了提交上链的交易数据的字节数,从而很快达到 gas 上限。为了减少交易数据的字节数,一种 BLS 聚合签名机制被提了出来。如下图所示, BLS 聚合签名机制是在操作者收集到所有交易后,将打包后的交易发送给每个交易提交者签名,因为每个签名都是针对相同的数据,所以可以被操作者聚合成一个 BSL 签名。发送给链上合约的将是压缩后的交易数据加上聚合后的 BLS 签名,从而大幅减少了交易数据所消耗的 gas。BLS 签名可以将 Optimistic Rollup 的吞吐量从100 TPS提升到 450 TPS,伊斯坦布尔升级后也可以达到 2000 TPS。
Optimistic Rollup 基于加密经济学有效性博弈,只有过了1~2周的挑战期才能确认交易生效。ZK Rollup的延迟相对较小,如果一个打包区块中有 1000 笔交易,在普通的服务器上大概需要 20 分钟可以构造出一个证明。开发者已经提出很多减少延迟的方法,比如采用 GPU 加速可以将零知识证明构造时间压缩到 1 分钟。还有一种叫做“即时交易收据”(instant tx receipts)的方法两种 Rollup 方案都适用。它主要借助经济学博弈来完成,就是负责打包的操作员需抵押一部分安全保证金,如果某个交易没有被打包到区块中,这笔钱就会被没收。理论上“即时交易收据”可以将交易确认时间压缩到 1 秒以内,但是实现相对复杂,安全性有所降低。
通用性方面,Optimistic Rollup 明显好于ZK Rollup,当然它的设计目标就是支持任意智能合约。而 ZK Rollup 目前仅适用于支付之类的特定交易,对于通用智能合约,由于创建零知识证明的成本非常高,部署起来困难较大。为了提高效率, 开发者正在开发专门的零知识证明虚拟机,比如 ZEXE。它在一定程度上可以缩短创建证明的时间,但是缺点是合约开发者需要大量的专业知识。Matter Labs团队基于ZK Rollup开发的新一代区块链扩展方案 ZK Sync,设计开发了一款以委托的方式生成零知识证明的沙盒式虚拟机,开发者不需要深入了解零知识证明领域的技术细节就可以编写出高效且安全的智能合约。
本文简要介绍了区块链扩容方案 Rollup 的工作原理,对比分析了两种 Rollup 方案 ZK Rollup 和 Optimistic Rollup 在可扩展性、延迟、通用性、安全性上的优劣。
rollup | 可扩展性 | 延迟 | 安全性 | 通用性 |
---|---|---|---|---|
optimistic rollup | 450TPS | 一周 | 差 | 好 |
zk rollup | 680TPS | 20min | 好 | 差 |
根据以上的对比分析,短期看来 Optimistic Rollup 由于较好的通用性会受到开发者的青睐;但从长期来看,随着零知识证明虚拟机的演进,ZK Rollup 会在通用性上不断提高。