2020 年 6 月 18 日更新:zkSync v1 主网上线!!!
公共区块链扩容问题的成功解决方案不仅仅是高交易吞吐量。它还必须定义为系统在不牺牲去中心化的情况下满足数百万用户需求的能力。大规模采用加密货币的先决条件包括高速、低成本、流畅的用户体验和隐私。
在没有技术突破的情况下,现有的扩展解决方案不得不对这些要求中的一项或多项做出重大妥协。幸运的是,零知识证明的最新进展为解决这个问题开辟了全新的可能性。
今天,我们Matter Labs很高兴地展示我们对zkSync的愿景:基于 ZK Rollup 的以太坊去信任扩展和隐私解决方案,强调卓越的用户和开发人员体验。我们也很自豪地宣布推出 zkSync 测试网。
ZKSync 旨在为以太坊带来每秒数千笔交易 (TPS) 的 VISA 规模吞吐量,同时保持资金与底层 L1 账户一样安全**,并保持高度的抗审查性。该协议的另一个重要方面是其超低延迟:ZKSync 中的交易将提供即时的经济终结性**。
我们赞同精益设计理念,并支持渐进式协议演进,即按顺序逐个引入功能,从而在每一步为用户带来最切实的价值。这就是为什么我们从基础(安全)开始,首先关注基本的可扩展性(代币转移),然后关注可编程性(智能合约),最后关注隐私。
今天,在实践中,加密仍然主要用于投机。如果没有真正的大规模采用,神奇的互联网货币、DeFi、Web 3.0 和所有其他有前途的区块链理念的价值主张将在很大程度上无法实现。
可扩展性不仅仅是交易吞吐量,而是区块链系统满足数百万用户需求的整体准备情况。
让我们考虑将区块链革命扩展到大众的三个最困难的问题。
实际采用需要比当今最分散的区块链可以处理的交易吞吐量高一个数量级。比特币能够达到 7 TPS,以太坊管理 15 - 而仅 VISA 就平均处理了令人生畏的 2000 TPS。
但是比特币和以太坊的缓慢是一个特点,而不是一个错误!通过减少验证者的数量来提高速度是很容易的。两个领先的区块链网络都可以吹嘘的大量完整节点是他们最关键的资产。这提供了弹性,并且实际上使这些区块链与现有金融机构有根本不同。
另一种流行的可扩展性方法是要求每个验证者只检查部分相关的区块链流量,而不是全部。但这不可避免地会引入额外的信任假设,并将此类系统置于非常不稳定的博弈论基础上。
大多数人都不愿意将大部分财富转移到一个公开的玻璃盒子里。如果收款人可以立即知道他们有多少钱,那么危险地方的居民(例如委内瑞拉)就不太可能用加密货币向当地商人付款。如果这些付款可能与他们的真实身份相关联,那么创建或消费淫秽内容(例如色情内容)的人不太可能使用加密货币作为Paypal 的替代品
此外,在缺乏链上保密性的情况下,GDPR 和 CCPA 等隐私法规将推动普通企业从公共区块链转向更集中的支付和金融中心,将我们日益无现金的社会变成监控的噩梦。
隐私是大规模采用的绝对先决条件。
由于以下几个因素,在公共区块链中实现隐私尤其困难:
现实是残酷的:产品经理清楚地知道,用户通常更喜欢更简单、更轻量级的即时满足体验,而不是替代方案,往往忽略了长尾风险。诱使用户从熟悉的事物切换到新事物需要非凡的力量
对于某些人来说,加密货币的价值主张(激进的自我所有权、抗审查、稳健的货币)就足够了。但那些人可能已经在船上了。我们需要数百万甚至数十亿,才能达到加密货币兑现承诺所需的规模。
为了吸引数以百万计的主流用户,我们需要为他们提供不仅符合这些期望,而且还要超越它们的用户体验。我们必须这样做,提供全新的可能性,同时保留人们已经习惯的传统 Web 产品的所有便利属性。一切都必须快速、简单、直观和容错。
在这篇技术文章中,我们将探讨所提议协议的高级架构、设计选择和属性。
ZKSync 建立在 ZK Rollup 的概念之上。
简而言之,ZK Rollup 是一种 L2 扩展解决方案,其中所有资金都由主链上的智能合约持有,而计算和存储则在链下执行。对于每个 Rollup 块,都会生成状态转换零知识证明 (SNARK),并由主链合约进行验证。这个 SNARK 包括 Rollup 块中每笔交易的有效性证明。此外,每个区块的公共数据更新都通过主链网络作为廉价调用数据发布。
此架构提供以下保证:
也就是说,ZK Rollup 严格继承了底层 L1 的安全保障。这与丰富的以太坊社区和现有基础设施一起,是我们决定专注于 L2 解决方案而不是尝试构建我们自己的 L1 的决定性因素。
为了更好地理解这个概念,请参阅我们在ZCon1和Dappcon上的演讲视频解释器,在 zeroknowledge.fm 上以 Matter Labs 为特色的播客,或我们之前的技术解释器帖子。好奇的读者还可以在这篇文章中探索 ZK Rollup 和 Optimistic Rollup 的区别。
在获得以太坊基金会的资助后,Matter Labs 过去一年一直致力于 ZK Rollup 技术。自第一个原型推出以来,我们已经完全重写了架构和 ZK 电路。最新版本整合了我们从社区收到的反馈,并实现了各种可用性和性能改进。
我们预计 ZK 证明者技术的当前发展将达到证明时间,这将使 ZK Rollup 块能够在一分钟内生成。一旦区块证明提交到主链并由 Rollup 智能合约验证,该区块中的所有交易都将最终确定,并且现在受到 L1 抗重组保证的约束。
但在零售和在线支付中,即使是以太坊的 15 秒块延迟也可能太长。我们怎样才能做得更好?
方法如下:在 ZKSync 中,我们引入了即时 tx 收据。
被选为参与 ZKSync 区块生产的验证者必须向主网上的 ZKSync 智能合约发布重要的安全保证金。验证者运行的共识向用户提供亚秒级确认,即他们的交易将包含在下一个 ZKSync 块中,由 2/3 的绝大多数共识参与者(按权益加权)签署。
如果一个新的 ZKSync 区块产生并提交到主链,它就不能被还原。但是,如果它不包含承诺的交易,则原始收据的签名者和新区块的签名者的交集的保证金将被削减。这个交叉点保证有超过 1/3 的股份。这保证了至少 1/3 的安全保证金是可罚没的,并且只有恶意用户才会受到惩罚。
部分削减的资金将用于补偿 tx 接收者。其余的将被烧毁。
削减可以由用户自己触发,也可以由共识中任何已签署原始 tx 收据的诚实参与者触发。后者将有一种天然的诱因来称为欺诈:如果他们参与后续的区块生产,他们也可以被削减。因此,共识中至少有一个诚实的参与者就足以进行欺诈检测。
让我们检查一下这个协议的属性。我们将零确认 tx 称为具有即时收据的交易,该交易是尚未发布到以太坊的 ZKSync 块的即时收据。
ZKSync 上的零确认交易的双花只有在几分钟的非常短的时间窗口内才有可能被利用,直到区块证明在主链上发布。此外,恶意验证者将不得不诱使用户接受价值超过 1/6 安全保证金的零确认交易。
从买家和商家的角度来看,零确认交易是:
这是对信用卡支付的巨大用户体验和安全性改进!让我们从不同演员的角度来看:
但让我们更深入地挖掘。为了量化风险,可以将债券提供的经济保证与工作量证明区块链提供的结算保证进行比较(参见Nic Carter 的这篇精彩文章)。例如,Coinbase 在考虑在以太坊上进行最终存款之前需要 35 次交易确认。通过在从 AWS 租用的 GPU 上运行 51% 攻击 10 分钟来恢复此交易的成本约为 60,000 美元。假设有数百万美元的保证金,恢复即时 ZKSync 收据的成本要高得多。因此,即时收据通常可能具有类似 ETH 甚至更好的经济确定性属性。
重要的是要注意即时 tx 收据还可以防止 ETH 块重组,因为它们的有效性独立于以太坊。此外,以太坊的结算保证与 ZKSync 的结算保证相结合。
任何扩展解决方案的一个不可避免的属性是大多数用户无法参与验证所有交易量。这导致在所有 L2 可扩展性解决方案(Plasma 或 Rollups 中的验证器、Lightning hubs 等)中都需要专门的角色。这些角色提出的更高的安全性和性能要求带来了集中化和审查的风险。
从长远来看,ZKSync 设计通过引入两个不同的角色来解决这个问题:验证者和守护者。
验证者负责将交易打包成块并为其生成零知识证明。他们参与共识,因此必须为即时 tx 收据贡献一部分保证金。他们的节点必须在具有良好互联网带宽的安全环境中运行。或者,他们可以选择在不安全的按需云中生成 ZK 证明。
验证者获得交易费用奖励,可以以任何正在交易的代币支付(为了最终用户的最大便利)。
为了快速保持 ZKSync 共识,任何时候都只允许有限数量的验证者(30 到 100 之间,视情况而定)。然而,回想一下,ZK Rollup 验证器是完全不信任的。在 ZKSync 中,恶意验证者既不能危害系统的安全性,也不能欺骗诚实的验证者进入罚没条件。因此,与乐观汇总不同,监护人可以频繁轮换一小部分验证人。同时,只要超过 2/3 的提名验证者是诚实且可操作的,就可以保证共识的活跃性。
监护人包括大多数 ZKSync 代币持有者,他们用他们的代币份额来提名验证者。Guardians 的目的是监控点对点交易流量,检测审查行为,并确保不会提名被审查的验证者。Guardians 的动机是通过确保 ZKSync 保持 DoS 和抗审查性来保护其股份的价值。
尽管保持投票密钥在线,但 ZKSync 中的监护人永远不会面临削减或盗窃的风险(所有权密钥可以保存在冷存储中)。他们也可能选择只监控一小部分流量。因此,它们的节点可以在普通笔记本电脑或云服务器上运行,即不需要专门的验证器服务。
监护人会从验证者那里获得以 ZKSync 原生代币计价的费用作为奖励。他们的收入和股份被锁定了很长一段时间。
实现高效的可编程性和隐私性是 ZKSync 愿景中最困难的部分。它需要对适当的零知识证明系统和智能合约编程框架进行可靠的设计和实施。
实施基于 ZK 的智能合约(无论是透明的还是保护隐私的)的最大障碍是缺乏具有递归组合的高效通用 ZK 证明系统。Groth16 是当时最高效的 ZK SNARK,需要特定于应用程序的可信设置,并且在应用递归时会损失很多效率。另一方面,基于 FRI 的 STARK 需要高度专业化的技能来构建并且缺乏任意通用电路的有效递归组合。
这是我们在RedShift上工作的主要动机之一:一种新的透明、高效且完全简洁的 SNARK,源自我们基于 FRI 的多项式承诺方案。我们目前正在整合同行评审和社区反馈,然后将 RedShift 部署为 ZKSync 的核心部分。
Redshift 是一个通用的 SNARK,它允许我们使用它方便地将任意程序转换为可证明的 ZK 电路。异构电路(例如不同的智能合约)可以递归地组合在一个 SNARK 中。RedShift 似乎是后量子安全的,因为它完全依赖于抗碰撞哈希函数。
在 ZKSync 的可编程性模型的设计中,我们承诺了几个正交目标的雄心勃勃的组合:
许多杰出的项目共享其中的一些目标,但没有一个能同时实现所有这些目标。例如,ZkVM为通用机密智能合约提供了虚拟机,但基于防弹,不支持简洁证明聚合。ZEXE具有出色的隐私保护设计,但需要深入了解零知识电路的细节和取舍,从而为更广泛的程序员圈子提高了进入门槛。其他更简单的 ZK 编程框架缺乏安全智能合约开发所需的表现力或功能。
这导致我们决定创建 Zinc:一个安全、简单和高效的编程框架和基于 VM 的运行时环境,专为基于 ZKP 的智能合约而设计。
SyncVM 的关键设计优先级是安全性和开发人员友好性。用于定义合约的编程语言严格遵循简化的 Rust 语法,智能合约编程元素借鉴自 Solidity 和 Libra 的 Move。它不需要开发人员深入了解 ZKP 域的细节来编写高效且安全的程序。事实上,具有 Rust、Solidity、C++ 或类似编程语言背景的开发人员可以在一天内学会 Zinc。
考虑用 Rust 为 Bellman 框架编写的程序的一部分(ZEXE 有类似的 API)和 Zinc 中的相同部分:
Zinc v0.1 将于 2020 年 1 月发布
ZKSync v0.1 的测试网已经上线。此版本的范围仅限于单运营商设置中的 ETH 和 ERC20 代币转移。
v0.1 devnet 的发布是实现 ZKSync 愿景的漫长旅程的第一步。这将需要大量的研究、实验和开发工作。随着我们学习和整合反馈,某些设计方面可能会发生变化。但我们保证愿望将保持不变:ZKSync 将成为将数百万用户带入加密货币的桥梁。我们正在为用户体验设定一个高标准,并将证明 zk 技术能够在不牺牲区块链革命价值的情况下提供类似 Web 的体验。
您可以在 Matter Labs 的Twitter、公共Telegram 频道或订阅我们的(非常偶尔的时事通讯上关注我们的进展。
如果您想为 ZKSync 开发做出贡献,请与我们联系。我们一直在寻找有才华的工程师和密码学家加入我们的团队。