以太坊扩容方案之zkRollup

3for YudiZou
13 min readApr 29, 2021

--

1. 引言

2020年6月18日,以太坊的研究团队Matter Labs宣布已将zkSync部署至以太坊主网。
所谓zkSync,是一种基于zkRollup构建的Layer 2 扩容工具。
自此,用户可在zySync上存取转账代币。

zkSync最主要的功能就是token transfer 代币交易:
用户可将其现有以太坊钱包连接至zkSync,提取、发送或接收代币至zkSync钱包。
zkSync目前还不支持智能合约部署。不过其基于Zinc和Solidity构建的高效、安全、图灵完备的多语言智能合约的版本正在开发中。

zkSync的主要目的是提升交易容量,并减轻以太坊的网络压力。
借助zkSync,可实现2000tps的吞吐量(接近于VISA的平均吞吐量),平均每个交易的费用接近0.01美金(大幅削减了交易费用)。
与此对比鲜明的是,以太坊区块链当前的平均吞吐量为15tps,且其平均gas费用由2020年1月的10Gwei 飞涨至 2020年6月时的40Gwei,这意味着,以2020年6月时的ETH价格为基准,每笔交易的费用在0.2美金。

1.1 以太坊现有Layer2 扩容方案对比

详细可参见Vitalik 2021年1月5日博客 An Incomplete Guide to Rollups 。相应的中文翻译见 V神带你读懂以太坊扩展性解决方案 Rollup

根据 以太坊路线图 EthHub 可知,目前以太坊的Layer2扩容方案主要有:
* 1)ZK-Rollups:如,现有已主网上线的zkSync。
* 2)Optimistic Rollups:
* 3)Plasma:
* 4)State channels:
* 5)Payment Channels:
* 6)ZK-STARKs:
* 7)Commit-Chains:
* 8)Sidechaines:

各种Layer 2 扩容方案对比为:

2. zkRollup

zkSync是基于zkRollup技术构建的。

zkRollup为一种Layer 2 扩容架构,由以太坊的研究员提出,其特点是:
* 所有计算过程由链下计算,链上存储;
* 参与计算的明文数据通过calldata的形式发送到链上合约;
* 可降低存储成本;
* 链下计算的正确性由零知识证明算法保证;
* 可大幅提高tps;
* 可降低单次交易的费用。

其将交易存储在sidechain中,而不是直接记录在以太坊层,从而可以节约以太坊层的网络空间。zkRollup会将一系列交易的状态打包进区块,然后发布到以太坊层。其中的“zk”是指zero-knowledge proofs,即zkRollup可在发布到以太坊层之前,证明区块中状态的有效性。

目前致力于zkRollup的初创公司主要有:
* Matter Labs
* Loopring (关注基于zkRollup的去中心化交易所方向)
* DeversiFi(来自于Starkware团队)

2.1 zkRollup 项目及相应生态产品

截止2021年初,基于zkRollup构建的相关项目及其生态产品主要有:

基于zkRollup的解决方案主要有:
* zkSync
* loopring
* starkware
* zkSwap
* aztec
* Hermez

### 2.1.1 zkSync相关生态产品
zkSync由Matter Labs负责发起,为a trustless,secure,user-centric protocol for scaling payments and smart contracts on Ethereum。

基于zkSync的产品有:zkWallet

基于zkSync的已发布的相关生态产品有:
* Numio:Numio致力于让所有人都更易于使用加密支付和加密存储应用。Numio app是世界上第一个在谷歌Play应用商店推出的非托管、支持zkRollup的以太坊移动钱包。
* Gitcoin:Gitcoin 是旨在开源的以太坊悬赏平台,区块链项目可以于此用一定的报酬找到需要的开发者。Gitcoin目前主要有六个产品:Bounties(悬赏)、Hackathons(黑客马拉松)、Grants(资助)、Kernel、Quests(任务)和Kudos。
* Golem:Golem是一个着眼于共享电脑闲置CPU和GPU资源的peer-to-peer 网络。
* StablePay:StablePay为去中心化的支付解决方案,使得用户可用代币在线支付以美元计价的产品和服务。

基于zkSync的开发中的相关生态产品有:
* Curve:为类似Uniswap的以太坊上的交易所流动性池,设计用于:1)提供极其高效的稳定币交易;2)为流动性供应商提供低风险补充费用收入,无机会成本。
* Balancer:Balancer池为一个自动做市商,具有某些关键属性,使其能够作为一个自平衡加权投资组合和价格传感器发挥作用。
* Argent:为简单安全的加密货币智能数字钱包。
* MYKEY:是基于KEYID协议开发的,在多个公链(EOS、以太坊和Tron等)上实现的自治身份管理的智能钱包。

### 2.1.2 LoopRing方案相关生态产品
LoopRing:为基于zkRollup的交易和支付协议。

LoopRing的代币为LRC

LoopRing相关产品有:
Loopring交易所手机钱包

LoopRing相关生态产品有:
* Gitcoin:Gitcoin 是旨在开源的以太坊悬赏平台,区块链项目可以于此用一定的报酬找到需要的开发者。Gitcoin目前主要有六个产品:Bounties(悬赏)、Hackathons(黑客马拉松)、Grants(资助)、Kernel、Quests(任务)和Kudos。
* Rails:允许将ETH和任何与ERC20 兼容的token由钱包转移给Loopring L2的任何其他人。
* pNetwork:为pTokens系统的管理层。pTokens支持跨链交易。

### 2.1.3 StarkWare方案相关生态产品
StarkWare:使用STARK技术来提升区块链的可扩展性和隐私性。STARK技术可提供零知识、简洁、透明(无需trusted setup)以及后量子安全的密码学证明。

StarkWare 方案暂无相关代币。

StarkWare 相关生态产品有:【参见StarkWare官方博客 On the Road to StarkNet: A Permissionless STARK-Powered L2 ZK-Rollup
* StarkNet:为以太坊构建的基于STARK构建的L2 zkRollup方案,具有分布式、非许可的、可抵制审查的特征。可采用图灵完备的 Cairo语言 来为general computation 编写相应的 provable programs。

### 2.1.4 zkSwap方案相关生态产品
zkSwap:为基于zkRollup+AMM的去中心化交易所,代币为ERC20 token ZKS
zkSwap已于2021年2月14日在以太坊主网上线。

zkSwap相关产品有:zkSwap 钱包

### 2.1.5 Aztec方案相关生态产品
Aztec:Aztec协议旨在通过使用zk-SNARKs隐私算法来加密区块链数据,从而促进公有链上的隐私保护。

Aztec 方案暂无相关代币和生态产品。

### 2.1.6 Hermez方案相关生态产品
Hermez:为trustless ZK-Rollup,重点关注以太坊各种wings之间的可扩展支付和token交易。

Hermez 代币为 HEZ

2.2 Why zkRollup?

Plasma为构建扩容性方案的统称,它以侧链的形式将第2层区块放置在以太坊区块链的顶部。

Plasma的具体实现为:
将数百个侧链的交易以离线的方式处理,只将侧链区块的单个hash值添加到以太坊区块链中。

由于以下缺陷的存在,使得Plasma无法满足进一步扩容要求:
* side chain中游戏用户的退出,需要用户保留足够大量的数据以满足验证需求;
* lengthy challenge 周期需要用户保持在线,否则会丢失奖励。

为了更友好的用户体验和更少的资源需求,需要更好的Layer 2扩容方案 — — zkRollup就是其中之一。

与Plasma为每个transfer创建一个transaction不同,zkRollup可将数百个transfer 卷为 一个单独的transaction。然后通过智能合约来析构和验证这个transaction中所有transfer的正确性。

2.3 What’s zkRollup?

zkRollup中包含两种类型的用户:
* transactors 交易员:创建transfer并将该transfer广播至网络。
* relayers 转播员:收集大量的transfer然后创建一个rollup。

transfer中包含的数据有:
* 以“to”和“from”索引的地址;(压缩版的地址表示仅需3个字节,可节约处理资源。)
* 交易的金额;(交易金额大于0表示存钱;交易金额小于0表示取钱。)
* 网络费用;
* nonce。

1)智能合约将以上transfer数据以两棵Merkle Tree方式存储:
* 将地址存储在一个Merkle Tree中。
* 将交易金额存储在另一个Merkle Tree中。

2)由relayer来创建SNARK proof。
SNARK proof为区块链状态增量的hash值。此处状态是指:”state of being”。
SNARK proof将 transfers发生之前区块链的快照 与 transfers发生之后的区块链快照进行对比,然后仅对二者之间的差量变化以verifiable hash的方式发送到主网中。

值得注意的是,只要在智能合约中抵押有符合要求的债券,任何人都可以称为relayer。这将激励relayer 既不篡改rollup,也不阻止rollup。

运行zkRollup的dapp用户将支付更少的交易费用。
创建零知识证明需要大量的算力,其implementation为“commit-verify”方法。区块的延迟确认情况将增多,因为SNARK proof将延迟多个区块。直到implementation完成,否则用户无法知道具体将延迟多少个区块。

2.4 zkRollup的优劣势

zkRollup的优势为:
* 降低了每笔用户交易的费用;
* 比 Optimistic Rollup和Plasma都快;
* 区块可以并行计算的模式计算,这将促进去中心化;
* 在每笔交易中包含的数据更少,将有利于增加Layer 2的吞吐量和可扩展性;
* 不需要像Optimistic Rollup那样的fraud game verification,Optimistic Rollup的提款到帐期长达两周。

zkRollup的劣势为:
* 计算零知识证明的难度较高,需要对其进行数据优化以进一步提升吞吐量;
* zkRollup的初始setup需要一种中心化的机制;
* zkRollup的安全机制具有一定程度的unverifiable trust;
* 量子计算可对zkRollup 区块链形成威胁。

3. 为何需要用zinc等专有语言来重写智能合约?

以太坊的智能合约已有Solidity和Vyper语言,为何在ZKSync 中,需要引入Zinc这种语言来重写智能合约?

* 现有的大多数ZKP框架,如Zokrates、Circom、SnarkJS、gNARK等,设计初衷都是用于创建circuits、quadratic arithmetic programs以及internal represetantions。
Zinc是一种新的尝试,它将智能合约引入ZKP框架,为safety和security提供了良好的保证。其设计初衷定位是:为ZKP电路优化的智能合约语言。

参考资料

[1] iden3 团队博客 zkRollup
[2] iden3 2019年12月12日博客 Istanbul, zkRollup, and Ethereum throughput limits: an analysis
[3] 以太坊路线图 EthHub Layer2 扩容方案 ZK-Rollups
[4] idex 2019年11月6日博客 Rollup Rundown
[5] matter labs 2019年11月4日博客 Optimistic vs. ZK Rollup: Deep Dive
[6] Joel Kite 2021年1月28日 medium博客 A Brief Guide to zkRollup Projects and Products — January 2021
[7] Loopring’s zkRollup AMM is Live
[8] matter labs zksync
[9] matter labs zinc
[10] PlasmNetwork ZKRollups
[11] zkRollup 入门培训
[12] 2020年2月12日 Episode 116 zkSync and Redshift: Matter Labs update
[13] 2020年7月15日 Episode 138 Validium with DeversiFi & Starkware
[14] 2020年9月2日 Episode 145 Circom & Hermez with Jordi Baylina
[15] 2020年10月14日 Episode 151 John Adler on Optimistic vs ZK Rollup and the data availability problem
[16] 2020年12月23日 Episode 161 Loopring with Matt & Brecht
[17] John Adler 2019年11月6日medium 博客 The “Why”s of Optimistic Rollup
[18] PANews官方 新闻 ZKSwap提出實用zkrollup協議ZKSpeed,可大幅提高TPS並降低Gas費用
[19] eth research 讨论 DoS attack against zkRollup proof generation?
[20] What is a ZKRollup? And how does it work in scaling a DAPP?
[21] IPFS 报告 Scaling blockchains zkRollup
[22] 新闻 Aztec 2.0:以隐私性为核心的zkRollup Layer 2方案
[23] Alex Gluchowski 2020年6月18日博客 zkSync is Live! Bringing Trustless, Scalable Payments to Ethereum
[24] AztecProtocol rollup 代码实现
[25] Vitalik 2021年1月5日博客 An Incomplete Guide to Rollups

--

--