到底什么是 ZK Rollup ?
1.背景
比特币每秒能够进行 5 笔交易,以太坊 15 笔,仅仅是转账的需求,相比 Visa 网络平均为2000 币,峰值达到数万笔 。TPS 阻碍了区块链大规模的落地,是目前社区第一要务解决的问题,尤其是以太坊,当然我们追求的是去中心的扩展性,而不是 21 个节点。
单从以太坊社区来说,解决以太坊可扩展性解决方案主要有两个方向,分片和 Lyaer2 方案,ETH 2.0 Phase 1 分片目前还在调研中,规范尚未冻结。 Layer 2 扩容方案目前有很多,比如 Plasma 或 State Channel ,还有 V 神在 2014 提出的影子链(半Layer2 的方案),但除了比特币的闪电网络经常被大家提起,但为什么以太坊社区并没有通用的 Layer2 方案落地呢?
某种程度上,目前以太坊这些 Layer2 扩容技术存在一些内在问题。
对于特定的场景,比如相同的两方之间的重复付款,State Channel 是非常适合的,但对于更广泛的应用而言,比如 DEX,目前的 Layer2 的方案都存在一些挑战性的难题。
依 Plasma 为例,Plasma 只把侧链区块的 root hash 放上以太坊主链上做验证,也就是在链下交易了数百或数千笔的交易,最后上链只有几十个字节数据,这是交易放在链外的思想。
这样设计上的最大挑战是- 数据的可用性。
就是当有人要离开这个侧链时,需要一个额外的游戏规则 - 挑战期(因为链上没有交易数据,需要侧链参与者的提供证据),这衍生了有数据才能挑战,所以大家都要存一定数量的数据。
挑战期的另一个问题是,使用者需要保持上线状态,不然错过挑战期,就代表默认了交易。
简单来说,因为数据的可用性问题,衍生了问题:
- 使用者需要常在线上
- 需下载和存储大量数据
Plasma用户被迫不断监视在线活动,必须在链外传输和存储大量数据,同时面临较长的退出时间,为了防止能存在的作弊矿工。这样造成使用者体验很糟,同时在 Plasma 上应用智能合约似乎也非常困难。
2.零知识证明
最近在 Layer2 的方案上,出现了新的转机。过去几年零知识证明取得了巨大进步的技术。
零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。校验一个事件正确与否,并不需要验证者重现整个事件。
零知识证明能够说服外部观察者相信某些计算已正确执行,并且简洁明了且易于验证路径。
有意思的是,零知识证明靠密码学和数学保证数据一致性,而不是博弈论。
零知识证明看起来非常适合扩展以太坊:
- 执行者开销 O(n),这意味着提供证明的人,需要验证每一笔交易
- 验证开销 O(1),这意味着无论处理多少交易,验证工作量都将保持不变
- 数据传输的复杂性 O(1),这意味着我们每次放到链上的数据是不变的,每次向区块链发送 data 只需要耗费少量的 gas,伊斯坦布尔升级后花费 gas 成本更低
- 以太坊已经预编译了实现 SNARK 所需的数学原语
这让零知识证明可以成为 Layer2 打通链上数据与链下计算的关键技术。因为有了计算的证明,同样一个计算就没必要重复多次了,在传统的区块链架构中,同样的计算被重复多次,比如签名的校验,交易合法性校验,智能合约的执行等等。这些计算过程都可以被零知识证明技术进行压缩。
3 Rollup 发展历史
2018年9月, V 神在 Ethresearch 论坛上提出了一个 ZK Rollup提议 ,通过使用 ZK-SNARKs 技术对交易进行区块的有效性,每笔交易的一小部分数据都会发布到 EVM ,以确保每个人都可以重建 Merkle 状态。直接在链上扩展 TPS 到 500 ,引发了社区对区块链扩展性新的思考。
2018年10月份 BarryWhitehat 在 Ethresearch 论坛发布帖子,声称使用 Roll_up/Roll_back 技术的侧链 TPS 可以达到 17000 。数据处理在在侧链,只需要把验证交易有效的 SNARK 写到主链上,一笔链上交易就验证 1万笔交易。如果数据变得不可用,使用 Roll_back 的机制,运营者可以被替换,我们可以回滚到之前的有效状态,然后通过新的运营者继续该状态的运行。当运营者发生更改时,系统会允许用户退出,用户能够拿回某个状态下自己的币。
现在由 Matter Lab 在开发,同时 Plasma Group 所提出的 Plasma Rollup 解决方案: Optimistic Rollup 。
总的来说,Rollup 是一种类似于 Plasma 的 Layer2 扩展方案总称, 整体架构跟 Plasma 一样,有一个智能合约做担保,保管所有用户的资金,有中继者收集并验证交易。不同的是 Rollup 通过向以太坊广播数据来提高数据可用性,欺诈挑战被替换为 ZK Snarks。根据状态转换有效性的保证方式不同,现在有两种 Rollup 方案:ZK Rollup 和 Optimistic Rollup。
4.什么是 ZK Rollup?
ZK Rollup 核心思想是:
- 将主链作为存储媒介,而非共识引擎
- 将交易压缩,并在链下达成状态共识
- 用零知识证明保证链下状态共识的安全性。
ZK Rollup 能把以太坊现有的可扩展性提高30倍,它之所以能做到这点是因为使用这种技术,链上合约将只需要存储一个值:Merkle 树的根。
如果仅提交状态树的根到合约,那么用户如何相信新的状态根是如实地根据上述逻辑计算出来的。万一 Relayer 作恶,故意调大交易的手续费呢?
解决这个问题的一个方法是,要求 relayer 提交状态树的根到合约时,同时也将所有交易提交到合约,这样任何人都可以根据这些交易来验证 relayer 在计算新的状态树时,有没有作弊。但这等于是将所有链下的数据搬回了链上,没有实现 Layer 2 扩容的目的。这也是 Plasma 遇到的问题。
利用零知识证明就可以很好地解决这个问题,Relayer 在链外收集了一系列的交易后,来生成一个 ZK SNARK 证明,Relayer 需要确保每个交易中的 nonce, value, fee 等值都没有问题,且签名是正确的。
智能合约只需要验证这个ZK SNARK 证明是否正确。如果ZK SNARK 证明证明且合约中保存的状态与 PRE_STATE 相等,那么新的状态 POST_STATE 将会被记录到合约中,替换原有状态。
5. Optimistic Rollup
早在 2014年,V 神提出“影子链”(shadow chain)的概念,即区块数据发布在链上,但默认情况下区块不会被验证的一种架构。相反,区块是被暂时接受的,只有在一段时间(比如2周)后才能最终确定。在这两周内,一个暂时接受的区块可能会受到挑战;只有这样才能验证该区块,如果该区块被证明是无效的,那么该区块所在链将被恢复,并且原始发布者的存款将受到惩罚。合约不会跟踪系统的完整状态,它只跟踪状态根(state root),用户自己可通过从头至尾处理提交给链的数据来计算状态。这套方案最近重新被提到了,最近称 “optimistic rollup”,以突出其与ZK Rollup的相似性。
Optimistic Rollup 使用 OVM 在二层网络上使用智能合约的解决方案,借鉴了 Plasma 和 zk Rollup 设计,并以 Vitalik 所提出的影子链为基础。结构类似于 Plasma ,允许开发者在由 Layer1 保护的Layer2 中运行完全通用的智能合约。
Optimistic Rollup 的名称源于其解决方案的工作方式。之所以使用乐观,relayer 发布新的状态根时无需每次都接受 Rollup 智能合约的检验。相反,每个人都假设状态转换是正确的。不过。如果有人发布了一次不正确的状态转换,其它relayer 或者用户都可以指出不合法的交易并回滚不正确的区块、惩罚恶意 relayer。
具体工作步骤:
- 用户将链下智能合约的部署交易发送给 relayer
- relayer 在本地部署创建新的智能合约
- relayer 计算新的状态树根哈希
- relayer 创建了一个以太坊交易,其中包含在步骤3中计算出的状态树根哈希
- 任何看到 relayer 部署了无效状态树根哈希的用户,都可以通过发布有效状态根以及证明该状态根所需的 merkle 证明来挑战该 relayer,并大幅 Slash
- 在提交了无效块并最终确定了欺诈证明之后,可以从前的非欺诈性区块开始恢复交易。
目前进度
2019 在Devcon上,Plasma Group首次发布了一个概念验证的运作演示,Optimistic Rollup与去中心化交易所协议 Uniswap 合作,将“UNI”代币转换成“PIGI”代币,关键在于,这些交易是即时的,不需要消耗 gas ,unipig.exchange 上试用。
6. Rollup 用途
Rollup 可以支持更多复杂的状态转换,包括 Uniswap ,高性能交易所,多种代币,支持隐私的计算,ENS 等。所有这些都可以用 SNARK + 发布 Merkle 树的技术框架。
其他:
- 在以太坊1.0的轻客户端上运行以太坊2.0,需要在 ETH 1.0 预编译支持 BLS-12-381。ETH 1.0 会作为计算层,挂载在 ETH2.0上,采用 rollup 技术,将 ETH 1.0 数据在 ETH 2.0上发布。
- 加速跨分片间交易,现有分片技术的弱点:不同分片间的通信存在延迟(用于等待交叉连接的时间为6分种)。