1. 引言
公有链的扩容方案,需考虑以下维度:
- 高的交易吞吐量 (Bitcoin为7tps,以太坊为15tps,而VISA为2k+ tps)
- 满足数百万用户需求的同时,不牺牲去中心性
- 同时具有高速、低成本、流畅的用户体验和隐私性
之前由于缺少技术性突破,当前的扩容方案需在以上一个或多个维度进行妥协。而 零知识证明 技术的出现,使得同时满足以上要求成为可能。
Matter Labs提供的zkSync方案,为:
trustless scaling and privacy solution for Ethereum based on ZK Rollup
zkSync的设计目标是:
- 为以太坊实现VISA 2k+ tps级别的交易吞吐量
- 保证资金的安全性,安全级别与底层的L1安全性相当
- 实现 high degree of censorship-resistance
- 超低的延时,zkSync中的交易可实现即时economic finality
zkSync采用渐进式设计理念,逐步实现以下内容:
- 基础设施层(安全性)
- 基本扩展功能层(可交易性)
- 智能合约层 (可编程性,如账号恢复、多重签名、花费限制等)
- 隐私层(隐私性)
其中可编程性和隐私性是zkSync中最难的部分,需要一个合适的zero-knowledge proof system和smart contract可编程框架,并做相应的可靠设计和实现。
zkSync的主要特性为:
- trustless
- confidential
- fast
zkSync的相关代码实现见:
- https://github.com/matter-labs/zksync
2. zkSync的安全性——ZKRollup
zkSync的安全性依赖于ZKRollup。
zkRollup为L2扩容方案:
- 所有的资金都由主网上的智能合约控制。
- 计算和存储由链下进行。
- 为每个Rollup 区块,生成一个state transition的零知识证明,该证明中包含单独每笔交易的validity proof,主网上的智能合约可验证该证明。
- 每个区块中的public data update以便宜的cheap calldata的方式发送到主网上。
以上机制,可提供以下保护:
- Rollup validator(s)既不能corrupt the state,也无法steal funds。(优于SideChains)
- 即使validators(s)停止服务了,用户仍然可从Rollup中取回资金,因为数据是available的。(优于Plasma)
- 借助validity proofs,不需要用户 或 任何可信第三方 保持在线来监督Rollup 区块以防止欺诈。(优于fraud-proof systems,如payment channels 或 optimistic rollups)。Validity proof 相比于 Fraud proof的优势,详细可参见博客 Validity Proofs vs. Fraud Proofs Strike Back。
换句话说,ZK Rollup严格继承底层L1的安全保证。基于此,再加上以太坊社区和现有基础设施的丰富性,是我们决定专注于L2解决方案而不是尝试构建自己的L1的决定性因素。
更多资料可参看:
- 2019年4月 播客 zkSNARKs for Scale with Matter Labs
- 2019年1月 博客 Introducing Matter Testnet —— SNARK-driven Plasma with up to 500 tx/sec goes live on testnet
- 2019年11月 博客 Optimistic vs. ZK Rollup: Deep Dive
- 2019年6月 视频 ZK Rollup: Ethereum Scalability with ZKPs - Alex Gluchowski
- 2019年9月 视频 DAPPCON 2019: How Zero-Knowledge Proofs can Help your Dapp - Alex Glochowski (Matter Labs)
zkRollup的主要特性为:
- Completely trustless
- Same security gurantees as in undelying L1 (Ethereum)
- Hard Ethereum-backed finality after the first confirmation
3. zkSync的可用性——实时交易
希望:
- 对zkRoll区块生成证明的时间控制在1分钟之内。
- 一旦区块证明被提交到主网上,并由Rollup智能合约验证通过后,该区块内的所有证明就被finalized 且 受L1 reorg-resistance保护。
而在零售和在线支付领域,即使以太坊15秒的数据块延迟也可能太长。我们怎样才能做得更好?
由此在zkSync中引入了 instant tx receipts。
- 参与生成zkSync区块选举的validators 需向 主网上的zkSync智能合约 提交足够的安全保证金。
- validators之间的共识可向用户提供subsecond confirmation,其交易将被包含在下一个zkSync区块中,且由(按股权加权的)绝大多数(2/3)的共识参与方签名。
- 当有新的zkSync区块生成并提交到主网上,则无法reverted撤回。若该区块中不包含promised transaction,则将大幅削减 ”the intersection of the signers of the original receipt 和 the signers of the new blocks“ 的安全保证金。该intersection的保证金要求不低于1/3 of the stake,这就保证了至少1/3的安全保证金是可削减的,且只有恶意用户才会收到惩罚。
削减的一部分资金可用于补偿the tx recipient,剩余的将销毁(burn)。
削减动作可由用户自己触发,或者由共识中的参与签名该原始tx receipt的任何honest参与者触发。对于后者来说,其有动机来举报欺诈,因为若其参与后续的的区块生成,他们也会被削减保证金。因此,共识中至少有一个诚实的参与者就足以进行欺诈检测。
将zkSync区块中具有instant receipt的交易称为:
对zero-confirmation tx进行双花的时间窗口很短,只有几分钟,当区块证明发送到主网之后,就不再有双花问题。
同时除非zero-confiramtion tx 价值超过其安全保证金的1/6,恶意validators才有动机诱骗用户。
从买卖双方的角度来看,zero-confirmation tx的特性有:
- Instant
- Potentially reversible,but only within a few minutes【双花窗口期有几分钟】
- 只有同时攻击成千卖方时可reversible,而一对一攻击不可实现reversible。
相比于信用卡支付,zkSync在用户体验和安全性上做了大幅改进,主要体现在:
- 具有实体商品的网店:可能会立即向用户确认购买,但不会受到攻击,因为他们会在发货前等待完全确认。
- 实体店:在处理小额交易时几乎不会受到攻击。即使是向instant tx receipt售卖Macbook,除非 在同步的地点同时又输钱个协同的物理攻击者 与 大多数validators 合谋,才能让你赔钱。
为了量化风险,可将由 保证金提供的economic guarantee 与 由POW提供的settlement assurance 进行对比,具体见博客 It’s the settlement assurances, stupid 。
如,Coinbase要求35个tx confirmations来final a deposit on Ethereum。撤销该交易的代价为,从AWS租用GPU持续进行10分钟的51%攻击,相应的费用约为6万美金。假设在安全保证金中有数百万美金,则revert an instant zkSync receipt的代价更高。因此,instant receipts通常会更喜欢类似ETH这样的方案,其具有更好的economic finality 属性。
需要注意的是,instant tx receipts也可防止ETH区块reorgs,因为他们的有效性与以太坊无关。此外,以太坊的结算保证是与zkSync的结算保证相结合的。
zkSync的可用性——实时交易 的主要特征有:
- 相比于以太坊,具有subsecond tx confirmations with economic finality。
- Hard Ethereum-backed finality after a few minutes。
4. zkSync的liveness——抗cencorship和抗DoS
任何扩容方案的一个不可避免的特性是:
这就导致在L2库容方案中需引入特定的角色(如Plasma或Rollup中的validators、Lightning中的hubs 等等)。这些新角色带来安全和性能提升的同时,也带来了集中化和审查的风险。
为此,zkSync中设计了2种不同的角色:
zkSync的liveness主要特点有:
- 具有Validators和Guardians两种角色,均受tx fees激励
- Validators运行共识并生成proofs
- Guardians监控cencorship with ordinary hardware
4.1 zkSync中的Validators
Validators主要负责:
- 打包交易到区块
- 为区块中的交易生成零知识证明
- 参与共识,且必须为instant tx receipts提供一部分安全保证金
- 其节点必须运行在安全环境且具有良好的网络带宽
- 根据需要可选择在不安全的云上生成ZK proofs
- 获得交易费用激励,这些费用在交易中以任意token支付(为最终用户提供最大便利)
为了保证zkSync共识的速度,任何时候仅允许有限数量的validators(在30~100之间,具体取决于profiling)。
注意,zkRollup validators是complettely trustless的,恶意的validators既不会危害系统的安全性,也不能欺骗诚实的validator使其陷入被削减惩罚状态。
但是,与optimistic rollup不同,Guardians可频繁地轮换一小部分validators,同时,只要有超过2/3的提名validators是honest和operational的,即可保证共识的活跃性。
4.2 zkSync中的Guardians
Guardians包含 持有zkSync token的 大多数,他们可以其持有的token质押来提名validators。
Guardians的主要目的是:
- 监控p2p交易流量
- 发现censorship行为
- 确保审查中发现的validators不被提名。
Guardians的主要动机是通过确保zkSync是抗Dos和抗审查的,以保护其质押token的价值。
仅保持voting key 在线,Guardians永远不会面临被削减或被盗风险,其ownership keys可保存在冷介质中。
Guardians也可选择仅监控一小部分流量,因此,其节点可在普通笔记本电脑或云服务器上运行,即,不需要专门的validator services。
Guardians从提名的Validators中获取费用激励,费用以zkSync native token形式来支付。其收益和质押将被长期锁定,以激励长期zkSync token 价值 而不是短期回报。
5. zkSync的可编程性——RedShift (transparent universal SNARK)
实现ZK-based smart contracts(无论是transparent还是privacy-preserving),最大的障碍是:
- 缺少efficient generic ZK proof systems with recursive composition
Groth16,作为当前效率最高的ZKNARK:
- 需要application-specific trusted setup
- 若实现recursion,将大幅降低其效率
而FRI-based STARKs:
- 需要highly specialized skills来构建
- 缺少efficient recursive composition of arbitrary generic circuits。
为此,提出了 RedShift :
- 为 transparent的,无需trusted setup
- 基于FRI-based polynomial commitment scheme构建的efficient and fully succinct SNARK
- 为universal SNARK,可将任意program转为provable ZK circuits。(优于STARKs)
- Heterogenous异构circuits(如,不同的智能合约)可recursively composed in one SNARK。
- 基于battle-teste cryptography,不依赖于collision-restant hash函数,具有事实而非的post-quantum secure。
RedShift将作为zkSync的核心组成。
6. zkSync的可编程序——Zinc (framework for zero-knowledge smart contracts)
zkSync可编程性模型设计时,主要考虑以下几个目标:
- 高扩展性
- 同时支持公开智能合约和隐私智能合约
- 最重要的是:平滑的学习曲线和易于部署
目前的零知识智能合约相关框架有:
- ZkVM:为generic confidential smart contracts提供了虚拟机,但其基于bulletproofs,不支持succinct proof aggregation。
- ZEXE:具有优秀的隐私保护设计,但其要求深入理解零知识ciruit specifics和trade-offs,学习门槛较高。
于是,设计了Zinc:
- safe、simple and efficient programming framework
- VM-based runtime-environment (即 Sandboxed VM for the delegated generation of zero-knowledge proofs)
- 为ZKP-based smart contracts特别设计的
Zinc的关键设计在于:
为此Zinc中采用类似Rust的语法来定义智能合约,同时借鉴了Solidity和Libra的Move中的smar-contract programming elements。
Zinc不要求开发者了解ZKP领域知识,即可写出efficient and secure programs。
对于具有Rust、Solidity、C++或类似开发背景的开发者,可在1天内掌握Zinc。
以下为采用Rust编写的Bellman framework 与 Zinc的实现对比:
参考资料
[1] 以太坊扩容方案之zkRollup
[2] zkSync Mainnet Block Explorer
[3] Introducing zkSync: the missing link to mass adoption of Ethereum
[4] zkSync project architecture
[5] Introduction to zkSync for Developers