2月26日21:00,BlockMania AMA 51期继续进行,本期主题为《零知识证明如何解决以太坊性能问题》,分享嘉宾为安比实验室工程师p0n1,他为大家解读了零知识证明在以太坊扩容问题上的发展现状和未来方向,以下为本次分享的文字整理。
关于安比实验室
安比(SECBIT)实验室专注于区块链与智能合约安全问题,全方位监控智能合约安全漏洞、提供专业合约安全审计服务,在智能合约安全技术上开展全方位深入研究,致力于参与共建共识、可信、有序的区块链经济体。
当我们谈论区块链性能时,我们谈些什么?
很多人喜欢用「不可能三角」这种模型来讨论一个系统面临的设计难题。区块链也不例外,大家一定听过关于安全、去中心化、高效这三个方面的不可能三角或者说三元悖论吧。
在这个很流行的说法中,「高效」其实就是我们常说的「性能」,也叫「可扩展性」或者 Scalability。可以认为,以太坊和比特币从设计上更侧重于「安全」和「去中心化」这两点,因此不可避免地显得不是很「高效」。
尤其是以太坊,作为拥有最多开发者和应用的区块链平台,越来越多的人在上面尝试开发好玩有用的应用,但平台能提供的性能支撑极其有限,因此大家长期以来都在高喊「以太坊需要扩容」!!!
这也是为什么在以太坊之后,市场上又出现了很多「以太坊杀手」——许多想从性能层面超越以太坊的项目。
怎么超越以太坊呢?
其实超越的方法其实也不难,「只需要」牺牲不可能三角中的另外两点即可。
但可能大部分人还是觉得「安全」和「去中心化」是不能放弃的,选择继续留在以太坊。这导致「以太坊杀手们」冷冷清清凄凄惨惨无人问津,能开飞机的公路上却没有车,性能「优势」完全没有空间展现。
所以当我们谈论区块链性能时,我们还是希望区块链的两大根基不动摇——「安全」和「去中心化」尽量少受影响。
以太坊性能到底怎么样?
以太坊目前性能十分有限。对于普通区块链用户来说,手续费和交易确认时间很大程度决定了使用体验。而以太坊目前的使用体验波动非常大。打个比方,整个网络空闲的时候就好比最近疫情期间的高速,而拥堵的时候就像国庆黄金周时候的旅游景点。
从性能参数 TPS 上看,国际信用卡 Visa 交易处理速度至少 2000 笔/秒,而以太坊则不超过 30 笔/秒,这个数值只能说比老大哥比特币 7 笔/秒好了一些。
并且,造成以太坊网络拥堵的成本非常低。
大多数时候,一个热门 dApp 就会让整个网络变得拥堵不堪。说实话目前这个 TPS 水平让以太坊很难真正大规模应用。随着更多的人使用,以太坊网络交易手续费注定会越来越高,并且普通交易的确认时间会越来越久。
以太坊社区在可扩展性上做了哪些努力?
以太坊令人尴尬的性能现状让其核心开发团队和社区一直在探索各类扩容方案。于是大家经常听到一系列花哨的名词:分片(Sharding)、支付通道、状态通道、Plasma、Truebit、ZK-Rollup、Optimistic Rollup 等等,以及一个概念 Layer-2。
上面提到的大部分方案都属于二层扩容方案。其中 ZK-Rollup 和 Optimistic Rollup 则是最近最热门的。我们今天要重点讨论的就是 ZK-Rollup,而它的核心就是零知识证明技术。
零知识证明为什么有用?
零知识证明,可能是目前最具应用前景和想象力的密码学黑科技,可以在不泄露任何其他信息的前提下证明一个命题的正确性。两个关键词——「不泄漏」和「证明」,一结合可以说威力无穷,可以实现很多反直觉的炫酷特性。
在扩容方向上,我们并不需要太关注零知识证明技术的「不泄露」特性,这个往往跟隐私保护相关,我们重点关注其「证明」的能力。
简而言之,链上资源或者说带宽是有限的,我们需要把大量计算迁移到链下进行,因此需要技术能够「证明」这些计算在区块链链下真正发生过。
关于零知识证明的更多背景知识和技术细节这里就不再展开介绍了,欢迎大家关注我们安比实验室的系列文章,如《初识「零知识」与「证明」》https://mp.weixin.qq.com/s/XQL_taBhPkCHGZOBc24MyQ。真正要理解零知识证明可能会有些烧脑,但真心很有趣,大家感兴趣不妨试试。
好了,回到今天的主题上来。
为什么说基于零知识证明扩容方案可能是更好的方向?
我们不妨回顾一下开始的第一个问题,当我们谈论区块链性能时,我们还是希望区块链的两大根基——「安全」和「去中心化」尽量少受影响。如果有扩容方案能做到这个,就是真的是非常难能可贵的。
基于零知识证明的二层扩容方案 ZK-Rollup,就居然真的可以在不牺牲「安全」和「去中心化」这两点的前提下,很好地解决区块链性能问题!
不熟悉的同学可能会问:零知识证明扩容代表方案 ZK-Rollup 到底是什么?
首先我们最好来理解下什么是 Rollup。
Rollup 顾名思义,有「卷起」和「汇总」的意思,可认为是一大类 Layer-2 扩容方案的统称。
Rollup 特指先在链下进行复杂的计算和状态维护,再将与状态更改相关的数据通过合约调用的方式,利用更便宜的 CALLDATA 在链上保存数据,将大量交易「卷起/汇总」打包成一个交易,最终在保证了「数据可用性」的前提下提高 TPS。
Rollup 方案的共同点是强调链上「数据可用性」,即任何人都能根据链上保存的数据,复原出全局的状态,从而消除数据可用性问题带来的安全风险。
这一特点让Rollup 方案(data onchain)相对于 Plasma 这类 data offchain 的方案设计更简洁且更易实现。
Layer-2 这个概念其实特别好,因为这类方案的设计思路就是以太坊的底层几乎不需要任何改动,底层还是向往常一样处理交易,所以不会影响底层的安全性,让各种各样的海量交易在二层来处理,从而减轻底层链的压力。
Plasma 是前两年最火的以太坊二层扩容概念,整个社区花费了非常多的精力来讨论和实现,过程中演变出来一系列方案,比如 Plasma MVP、Plasma Cash、Plasma Debit、Plasma Prime…
Plasma 家族的中间方案非常多,理论上都可行,但是就是迟迟不能落地。这里面的核心原因就在于 Plasma 各类方案都没有保证「数据可用性」,从而使协议变得比较复杂,实现难度很大,显得很不实用。
而 ZK-Rollup 方案起源于 18 年下半年,由 Barry Whitehat 和 Vitalik 先后提出。
其关键就在于 ZK(Zero Knowledge),每一次的状态转变都需要提供零知识证明,由主链上的合约进行验证,只有验证通过才能更改状态。即每一次状态转变都严格依赖密码学证明。
ZK-Rollup 方案利用了目前最流行的零知识证明技术 zkSNARK 在压缩链上计算量的同时保障了数据正确性。
利用一棵 Merkle Tree 存储账户状态,合约只保存 Merkle Root。Operator(运营者)收集用户的交易,批量打包这些交易,并生成 zkSNARK 证明,具体会证明交易的合法性(比如验证签名),以及前后状态下的 Merkle Root。
Operator 把 Merkle Root 连同各交易数据和 zkSNARK 证明提交至合约,合约验证通过才将新的状态写入。
由于所有交易的计算过程不用在合约中执行,无需将大量状态写入合约 storage,并且 zkSNARK 证明大小(很小)与验证时间(很快)是常数,不跟随交易数量增长,因此 ZK-Rollup 可以极大地提高交易 TPS。
ZK-Rollup 的链上性能限制仅依赖于 CALLDATA 存储数据的成本。随着以太坊 Istanbul 升级,CALLDATA 使用成本降为原来的 1/4,ZK-Rollup 的性能则获得 4 倍提升,TPS 可达到近 2000!
TLDR,ZK-Rollup的原理其实可以用一句话讲清:链下进行复杂的计算和证明的生成,链上进行证明的验证和关键状态的维护。
上面提到 Rollup,可能有同学会问:ZK-Rollup 与其他 Rollup 方案的核心区别是什么?
的确还有其他多个Rollup 方案,比如 Optimistic Rollup 就是当中较为热门的一个,它与 ZK-Rollup 的核心区别在于具体如何保证状态更改的正确性。
Optimistic Rollup 方案形成于 19 年下半年,由 John Adler 首次提出,后面主要由 Plasma Group 从 Plasma、ZK-Rollup、shadow chain 等方案中借鉴,进一步完善和扩展。
与 ZK-Rollup 的最大区别在于,每次状态转变无需严格验证,先乐观地假设每次转变都是正确的,这就是 Optimistic 一词的由来。然后在一定时限内可以对某次转变进行挑战,如果挑战成功就证明了之前的提交有问题,会惩罚提交者并将状态回滚。可以认为 Optimistic Rollup 最终依赖经济激励和博弈来约束状态正确转变。
两种方案的差别还可以从证明模型角度来对比:ZK-Rollup 为 Validity Proof(正确性证明),只有提供了「正确性证明」的状态才会被写入主链合约;而 Optimistic Rollup 为 Fraud Proof(欺诈证明),用户需要在挑战期内对异常提供「欺诈证明」,负责举报不正确的状态。
关注以太坊的同学对 Plasma 一定不会陌生。
Alex Gluchowski 和 Ryuya Nakamura 这两位研究人员分别提出了在 PoW 和 PoS 共识下,对 Optimistic Rollup 或基于 Fraud Proof 的二层扩容协议的攻击模型, 且攻击成本并不高:这类二层方案必须在挑战期内进行投诉举报,而当合约中聚集了大量资产时,则有希望构造一个场景(配合者分享攻击收益),让矿工配合做恶,在挑战期内拒绝掉所有提交 Fraud Proof 的投诉交易,这样不正确的状态转变会被确认,最终可从合约中盗取所有资金。这种攻击对 ZK-Rollup 无效,因为合约中始终有正确性校验做保障。
ZK-Rollup的发展现状究竟如何?
目前已有多个团队基于 ZK-Rollup 方案开发新一代产品,毫无疑问 ZK-Rollup 是目前落地速度最快、最有前景的二层扩容方案,在众多扩容方案中独占鳌头。
例如 Loopring 团队已经率先上线了基于 ZK-Rollup 的去中心化交易所(DEX),无需用户抵押资产,在性能上却能媲美中心化交易所(CEX),不再受底层链性能制约,订单交易 TPS 达到了惊人的 2025!
另外 Matter Labs 发布了无需信任的扩容和隐私方案 ZK Sync。
ZK Sync 底层也依赖 ZK-Rollup,目标在确保安全性的前提下提升交易性能。产品路线为先专注提高简单转账的性能和易用性,再实现通用智能合约的扩容,最后再加上隐私保护。目前扩容的目标也接近达成,至于隐私保护则依旧是凭借零知识证明技术。
ZK Sync 中还包含一个新的 SNARK 方案 Redshift,和零知识证明合约编程框架 Zinc,这两者或是其未来实现通用隐私智能合约的关键。
可以说 ZK-Rollup 目前在以太坊发展的劲头十足。
零知识证明在以太坊扩容方向上具体有哪些发展趋势?
我们再次回顾一下,零知识证明二层扩容方案最大的优势在于不牺牲「安全」和「去中心化」,也不需要对以太坊底层做任何改动,却能获得巨大的性能提升。
这一切源于零知识证明技术近年来的快速发展,以及以太坊团队大概在四五年前就在底层链层面为这一切做好了技术准备,提供了必要的密码学运算支持。
零知识证明技术真正让以太坊扩容从理论走向了实际,我相信未来这个方向还会有更多新的突破。
而以太坊社区很可能会从解决智能合约通用性问题、降低零知识证明应用开发难度、尝试更多类型的应用等方面来进一步探索扩容。
二层扩容概念下,各类普通的或者追求性能的交易可以在高效地跑在二层,享受更快的响应速度和低廉的使用成本,而一层也就是主链则专门负责承载更高价值的交易,并为此付出更高的成本。
另外,零知识证明还是解决区块链隐私问题的唯一解决方案。这一方面以太坊社区也有着很棒的进展。
我觉得 ZK-Rollup 在安全性上更有优势。
所以我觉得以太坊即使不升级 2.0 也能再战好几年。