引介 | ZK Sync :以太坊普及的关键一环
概要
要想成功解决公链的可扩展性问题,不只是要提高交易吞吐量。所谓的可扩展性,就是系统要能够在 满足数百万用户的需求的同时不以去中心化为代价 。而密码学货币能大规模普及的前提条件是速度快、费用低、用户体验流畅,并且能保护隐私。在没有技术突破的情况下,现有的可扩展性解决方案不得不在一个或多个条件上做出重大妥协。幸运的是, 零知识证明技术 的最新进展为我们带来了更多新的解决方案。
如今,我们 Matter Labs 团队要满怀激动地宣告 ZK Sync 的愿景:基于 ZK Rollup 的免信任型可扩展性和隐私性解决方案, 旨在带来绝佳的用户和开发者体验。我们还要骄傲地宣布 ZK Sync 的 开发者测试网络 已上线。
ZK Sync 旨在将以太坊上的吞吐量提高到像 VISA 那样每秒可达几千笔交易,同时又能确保资金像存储在底层账户那样安全,并维持较高水平的抗审查性。该协议的另一个重要方面是延迟性极低: ZK Sync 上的交易具有 即时经济确定性 。
我们认同精益设计理念,并支持以循序渐进的方式推进协议,按顺序逐一引入各个功能,让每个步骤都能为用户带来最实际的价值。这就是为什么我们从最基础的部分(安全性)开始,首先聚焦于基础可扩展性(代币转移),然后是可编程性(智能合约),最后是隐私性。
ZK Sync 特性一览:
- 严格持平于 L1 的安全性
- VISA 级别的吞吐量
- 亚秒级交易确认速度
- 抗审查,抗 DoS 攻击
- 隐私保护型智能合约
区块链扩容的最大挑战
实际上,密码学货币的最主要用途依然是投机。在没有得到真正的普及之前,互联网货币、DeFi 、Web 3.0 等区块链概念的价值主张在很大程度上都无法实现。
可扩展性指的不仅是交易吞吐量,还有区块链系统是否能够满足数百万用户的需求。
我们来看一看将区块链革命推向大众所面临的三大挑战。
挑战一:保持去中心化
要想在现实生活中推广区块链,目前去中心化程度最高的区块链的交易处理量还差了一个数量级。比特币网络每秒能处理 7 笔交易,以太坊网络每秒能处理 15 笔交易——而 VISA 平均每秒能处理 2000 笔交易之多。但是,对于比特币和以太坊而言,低效是一种特色,而非缺陷! 只要减少验证者的数量,就能轻而易举地加快交易处理速度。作为两大顶尖区块链网络,比特币和以太坊上大量的全节点是它们最重要的资产。因此,这就为区块链带来了强韧性,从根本上将其与现有金融机构区别开来。
另一个热门的扩容方案就是,要求每个验证者只验证一部分相关的区块链流量,而非全部流量。但这难免会引入另外的信任假设,系统所依据的博弈论基础也会变得极为脆弱。
挑战二:实现隐私性
大多数人都不会喜欢在众目睽睽之下转移大量财富。如果会立马暴露自己拥有多少钱的话,动荡地区——例如,委内瑞拉——的居民不可能愿意用密码学货币来付钱。如果付款之时有可能暴露自己的真实身份,生产或消费成人内容(如,小黄书)的人就不可能使用加密货币来 代替 Paypal 。此外,在不具备链上保密性的情况下,《通用数据保护条例》(GDPR)和《 2018 年加州消费者隐私法案》(CCPA)之类的隐私条例会促使普通企业从公链转向更加中心化的支付和金融中心,让我们这个日益无现金化的社会变成一场监视噩梦。
隐私性是普及区块链的必备条件。
但是在公链上很难实现隐私性,原因如下:
- 隐私性必须是协议的默认配置。引用 Vitalik Buterin 的话来说,“如果隐私模型的匿名集是中等大小,实际上就只有很小。如果隐私模型的匿名集很小,实际上就约等于没有 。只有全球化的匿名集才是真正强健可靠的。”
- 要让隐蔽交易成为大家的默认选择,隐蔽交易的交易费用必须非常低,但是,在技术上,隐蔽交易必将带来高昂的计算成本。
- 隐私模型必须具有可编程性,因为现实世界的用例不仅限于转账:还需要账户恢复、多签和消费限额,等等。
挑战三:达到预期的用户体验
现实是很残酷的:产品经理都很清楚,用户向来喜欢更轻松、更轻量级的体验,能够立即带来满足感,却 会忽略长尾风险 。要想诱使用户从熟悉的事物切换到新事物,这需要 非常强大的力量 。对于一些人来说,密码学货币的价值主张(彻底的自主产权、抗审查性和健全货币)就已经足够有吸引力了。但是这部分人很可能已经入场了。密码学货币若要实现当初的承诺,其用户群体的规模就算不用数十亿,也要有数百万才行。如果要吸引数百万的主流用户,我们需要为他们提供符合乃至超出这些期望的用户体验。我们必须一面提供全新的功能,一面保留人们已经习惯的传统互联网产品的所有便利属性,即,快速、简单、直观且具有容错性。
ZK Sync 的承诺:免信任、保密、快速
本文会向大家解释我们的架构、设计原则以及我们所提议的协议的良好特性。当然解释过程少不了对技术做一番说明。1. 安全性:扎根于 ZK Rollup
ZK Sync 是基于 ZK Rollup 的概念搭建的。简而言之,ZK Rollup 是一种二层扩展方案,所有资金都存储在主链上的智能合约内,计算和存储则在链下执行。每创建一个新的 Rollup 区块,就会生成一个状态转换的零知识证明(SNARK),并提交给主链上的合约进行验证。这个 SNARK 包含了对 Rollup 区块中所有交易有效性的证明。此外,每个区块的公开数据更新都会作为便宜的 calldata 发布到主链上。
这个架构提供以下保证:
- Rollup 验证者永远不能破坏状态或窃取资金(不同于侧链)。
- 即使验证者不配合,用户也可以追回 Rollup 上的资金,因为 Rollup 具备数据可用性(不同于 Plasma ) 。
- 得益于有效性证明,无论是用户还是可信第三方都不需要通过在线监视 Rollup 区块来防止诈骗(不同于使用错误性证明的系统,例如,支付通道或 optimistic rollup )。这里有一篇 优质文章 (编者注:中译本见文末超链接《有效性证明 vs. 错误性证明》),深入探讨了有效性证明相比错误性证明的压倒性优势。
为了更好地理解这一概念,请参阅我们在 ZCon1 和 Dappcon 上的演讲,zeroknowledge.fm 上关于 Matter Labs 的 播客 ,以及我们早期发布的 技术解释帖 。好奇心旺盛的读者也可以阅读 这篇文章 (编者组:超链接见文末《Optimistic vs ZK rollup,一探究竟》),来了解 ZK Rollup 和 Optimistic Rollup 之间的区别。
在以太坊基金会的资助下 ,Matter Labs 在过去的一年以来都在研究 ZK Rollup 技术。自首个原型发布以来,我们已经全部重写了架构和 ZK 电路。最新的版本融合了我们从社区获得的反馈,并实现了各种可用性和性能改进。
总结:ZK Rollup
- 完全的免信任性
- 具备与底层链(以太坊)同样的安全保障
- 第一次确认之后就具有由以太坊背书的确定性
2. 可用性:实时交易
我们预计 ZK 证明技术的最新发展成果将缩短证明时间,将 ZK Rollup 区块的出块时间控制在一分钟之内。一旦区块证明被提交到主链上,并在 Rollup 智能合约中验证通过,这个区块内的所有交易都会得到最终确定,并且受到 Layer-1 抵御链重组的能力保护。然而,就零售和线上支付领域而言,以太坊上仅仅 15 秒的区块延迟也有些久了。我们如何才能做得更好?
这个办法就是:在 ZK Sync 中引入 即时交易收据(instant tx receipts) 。
选择参加 ZK Sync 区块生产的验证者必须向主网上的 ZK Sync 智能合约提交一笔可观的安全保证金。由验证者达成的共识会为用户提供 亚秒级确认 ,确保其交易包含在下一个 ZK Sync 区块内,并由绝大多数(2/3)的共识参与方签署(按权益加权)。
如果一个新的 ZK Sync 区块被创建出来并提交到主链上,它是无法被撤回的。但是,如果这个区块不包含已承诺的交易,则签署过原始收据和新区块的验证者的安全保证金会被罚没。这部分验证者所质押的保证金必定超过总金额的 1/3 以上。也就是说,惩罚会覆盖 1/3 乃至以上的安全保证金,而且只有恶意验证者会遭受惩罚。
被罚没的金额中有一部分会用来补偿交易接收者,剩下的会被销毁。
罚没机制既可由用户自己触发,也可由任意签署过原始交易收据的诚实共识参与方触发。后者天生就有触发罚没机制的动机:如果他们参加下一轮区块生产,可能也会遭到惩罚。因此,共识参与者中只要有一个是诚实的就足以检测欺诈了。
我们再细说一遍:在 ZK Sync 中,我们设计了一种零确认的交易模式,也就是让一笔交易附带一个即时交易数据,该收据会指向一个尚未发布到链上的 ZK Sync 区块。
在区块证明发布到主链之前,只有短短几分钟的时间可以对 ZK Sync 上的零确认交易发起双花攻击。此外,恶意验证者要想诱使用户相信自己的交易已成为零确认交易,得做好 1/6 的安全准备金被罚没的打算。
从买卖双方的角度来看,零确认交易是:
- 即时的
- 存在逆转的可能性,不过只在短短的几分钟之内
- 只有在同时而非逐个对上千个卖方发起攻击的情况下才可逆
现在让我们站在不同参与者的角度来看:
- 出售实物商品的线上商店 会立即向用户确认订单,但是不会遭受攻击,因为卖家会等到完全确认之后再发货。
- 实体店 在交易量较少之时是几乎不可能遭受攻击的。即使你是以即时收据的形式来出售一台 Macbook ,也要有数千名协调一致的攻击者在不同的地点发起攻击,还要依靠大多数验证者串谋才能成功。
要注意的是,即时交易数据不会受到 ETH 区块重组的影响,因为这些收据的有效性与以太坊无关。此外,以太坊的结算保证与 ZK Sync 的结算保证是结合在一起的。
总结:实时交易
- 亚秒级交易确认的经济确定性堪比以太坊
- 几分钟之后就具有由以太坊背书的确定性
3. 活性:抗审查性和抗 DoS 攻击
扩展方案必然具备的一个属性是,大多数用户都无法参与所有交易的验证。因此,所有二层扩展方案都需要专门设置一个角色(Plasma 和 Rollup上的验证者、Lightning hub,等等)。这类角色对于安全性和性能的要求较高,带来了中心化和审查的风险。为了解决这一问题,ZK Sync 在设计上引入了两种不同的角色:验证者和守护者。
验证者(Validitor)
验证者负责将交易打包到区块内,并为这些区块生成零知识证明。他们要参与共识机制,因此必须缴纳一笔安全保证金,才能创建即时交易收据。验证者节点必须在网络带宽良好的安全环境中运行。或者,他们也有可能按自己心意在不安全的云平台上生成零知识证明。
验证者将获得交易费作为奖励,是用被交易代币来支付的(为终端用户提供最大程度上的便利)。
为了快速达成 ZK Sync 共识,验证者的人数是有限制的(根据我们的分析,在 30 到 100 人之间比较合适)。但是别忘了,ZK Rollup 验证者是完全免信任的。在 ZK Sync 上,恶意验证者既不能破坏系统的安全性,也不能欺骗诚实的验证者触发罚没机制。因此,不同于 optimistic rollup ,系统的守护者(Guardian)可以频繁更换一小部分验证者。与此同时,只要有 2/3 的提名验证者是诚实且可进行操作的,就能确保满足活性要求(liveness)。
守护者(Guardian)
大部分通过质押代币份额来提名验证者的 ZK Sync 持币者会成为守护者。守护者的目的是监控点对点交易流量,探测审查行为,并确保不会提名那些有审查行为的验证者。为了保护自己的质押物不被罚没,守护者必须确保 ZK Sync 可以抵御 DoS 攻击、不会实施审查。
虽然投票密钥通常来说都是在线保存的,但是这不会给 ZK Sync 上的守护者带来罚没或盗窃的风险(所有权密钥是冷存储的)。守护者就可以选择只监控一小部分流量。因此,守护者节点可以运行在普通的手提电脑或云服务器上,也就是说,不需要提供专门的验证者服务。
守护者会获得验证者的费用作为奖励,是以 ZK Sync 原生代币的形式发放的。其收益和押金会被锁定较长一段时间,以此促进 ZK Sync 代币的长期升值。
总结:活性
- 两种角色:验证者和守护者,都受到交易费的激励
- 由验证者运行共识机制并生成证明
- 由运行在普通硬件上的守护者防止审查
4.1 RedShift:透明的通用 SNARK
要实现基于零知识证明的智能合约(无论是透明的还是保护隐私的),最大的障碍就是缺乏一种通过递归组合实现的高效且通用的零知识证明系统(efficient generic ZK proof systems with recursive composition)。Groth16 曾是最高效的 ZK SNARK ,但它需要为每一个应用专门启动一套受信任初始化设置,而且在采用递归方式之时会很低效。另一方面,基于 FRI 的 STARK 需要高度专业化的构建技能,而且缺乏针对任意通用电路的高效递归组合。这也是我们开发 RedShift 的主要动机之一:从基于 FRI 协议的多项式承诺方案(polynomial commitment scheme)中衍生出一个透明、高效且简洁的新型 SNARK 。我们目前正在进行同行评议和社区反馈,之后会将 RedShift 作为一个核心部分部署在 ZK Sync 上。
Redshift 是一种通用的 SNARK ,能让我们将任意程序转换为可证明的 ZK 电路。异构电路(例如,不同的智能合约)可以通过递归的方式在一个 SNARK 中构成。RedShift 仅依赖于抗碰撞的哈希函数,因此可被认为具有后量子安全性。
总结:Redshift
- 透明的:不需要可信的设置
- 可被认为具有后量子安全性:基于久经考验的密码学
- 通用的:适用于通用程序(这点与 STARK 相反)
4.2 Zinc:零知识智能合约框架
在 ZK Sync 的可编程模型的设计上,我们致力于实现以下几大目标:- 高度可扩展性
- 支持公开的智能合约和私密的智能合约
- 最重要的一点:平缓的学习曲线和简单的开发过程
因此,我们决定创建 Zinc ——一种安全、简单且高效的编程框架和基于虚拟机的运行时环境,专为基于零知识证明的智能合约而设计。
SyncVM 的设计优先级主要是安全性和开发者友好性。定义合约的编程语言严格遵循简化的 Rust 语法,并从 Solidity 和 Libra 的 Move 中借鉴了智能合约的编程元素。开发者并不需要深入了解零知识证明领域的技术细节即可编写出高效且安全的程序。实际上,凡是具备 Rust、Solidity 和 C++ 等编程语言背景的开发者只需要一天时间就可以弄懂 Zinc 。
用 Rust 为 Bellman 框架编写一部分程序(ZEXE 采用类似的应用程序界面)和为 Zinc 编写同样的程序对比如下:
Zinc 的 0.1 版本将在 2020 年 1 月上线。
总结:Zinc
- 具备安全性和表达性的编程框架
- 以委托的方式生成零知识证明的沙盒式虚拟机
- 聚焦于易开发性:Solidity 程序员只需要花一天时间学习
ZK Sync 0.1 版本开发者网络上线!
ZK Sync 0.1 版本的开发者网络上线。该版本仅限于在单个运营者环境中进行 ETH 和 ERC20 的代币转账。上线 0.1 版本的开发者网络是实现 ZK Sync 愿景的第一步。未来还需要进行很多研究、实验和开发工作。在我们了解并吸收反馈的过程中,一些设计部分可能会发生变化。但是我们保证,ZK Sync 会将数百万用户引入密码学货币世界,这一愿景是不会改变的。我们为设定了很高的用户体验标准,并将证明零知识证明技术能够在不牺牲区块链价值观的情况下提供类似于 Web 的体验。
你可以关注 Matter Labs 的 推特 、公开的 Telegram 频道 或是订阅我们偶尔更新的 新闻推送 。
如果你想要为 ZK Sync 的开发做贡献的话,请与我们联系。我们正在 寻找优秀的工程师和密码学家 加入我们的团队。
原文链接: https://medium.com/matter-labs/introducing-zk-sync-the-missing-link-to-mass-adoption-of-ethereum-14c9cea83f58 作者: Alex Gluchowski 翻译&校对: 闵敏 & 阿剑