自2019年起,ECC团队就在为2021年Zcash的扩展性进行了相关预研,最主要的研究成果就是Halo,作为一种新型的zk-SNARK方案,其解决了Zcash中的2个主要问题:
Halo论文见:《Recursive Proof Composition without a Trusted Setup》,也可参见本人博客:
在Halo的基础上,构建了 Halo2 —— 由Rust语言编写的高性能zk-SNARK实现,在该实现中,在消除了trusted setup的同时保证了Zcash的可扩展性。
在2019年,Sean Bowe 联名发表了《Sonic: Zero-Knowledge SNARKs from Linear-Size Universal and Updateable Structured Reference Strings》论文,在Sonic协议中,两个主要的元素为:【借助这2个元素,Sonic可 use a polynomial commtiment scheme为任意计算创建零知识证明。】
目前polynomial commitment scheme方案中,效率最高的基于pairing group的需要trusted setup,Sonic主要关注的是需要trusted setup的polynomial commitment scheme 方案。
然而,还有一个分支是Bulletproofs 中 基于inner product argument 的polynomial commitment scheme方案。在该方案中,无需trusted setup,具有相对较小的proof size,但是代价是verification性能很差。
在 Halo 论文中,详细介绍了基于inner product argument 构建的polynomial commitment scheme,同时实现了一种前所未有的aggregation技术。借助该aggregation技术,大量独立创建的proofs的验证时间 与 验证一个单独proof的时间 相当。使其成为比Zcash现有zk-SNARK更优的方案。
Halo 论文中描述了递归证明组合(recursive proof composition)的一种具体表现形式,它将Sonic论文中描述的Polynomial IOP剥离出来,用基于inner product argument的polynomial commitment scheme 代替了 基于pairing的polynomial commitment。
所谓recursive proof composition是指:
recursive proof composition是可扩展Zcash的一个基本组件,其不仅支持水平网络扩展,同时允许少量参与者信任网络其余部分的完整性。
在Halo方案之前,为实现recursive proof composition,需要大量的计算开销和trusted setup。
而在Halo中,在上面提及的aggregation技术基础之上构建了“nested amortization”技术,使得:
随后,一组科学家在2020年论文《Proof-Carrying Data from Accumulation Schemes》将Halo中的这种recursive proof composition技术 归纳为 “accumulation scheme”,并对其进行了安全证明。“accumulation scheme” 这个新称呼,表明了Halo中的“nested amortization”技术的实际工作原理——即通过给“accumulator(累加器)”添加proofs(这些proofs是关于累加器的先前状态的),使得我们可以通过检查累加器的当前状态来检查所有先前证明是否正确(通过归纳)。
尽管Halo中实现了无需trusted setup的recursive proof composition,但是其运行速度仍然无法满足要求。
Halo同期,有很多其它团队发现了效率优于Sonic的新的Polynomial IOPs,比如 Marlin。这些 Polynomial IOP 方案中效率最优的是 PLONK。
PLONK为设计基于应用程序特定需求的高效实现提供了极大的灵活性。PLONK的这个特性对于制作更高效的Halo版本至关重要。
Halo2相比于Halo的最大区别是,用Plonk中的效率更优的Polynomial IOP方案替换了Sonic中的Polynomial IOP。
即Halo中使用Sonic方案来验证交易,Halo2中使用Plonk来验证交易。Plonk的效率优于Sonic,Plonk可以更少的gates来表示更复杂的circuit。
Halo背后的新思想已被recursive SNARK项目采用,如Coda(Pickles)和 Mir(Plonky)。
Halo2的目标是:
为接入Zcash协议,建立一些符合社区标准的东西。
在Halo2的实际实现过程中,不仅会采纳往年出现的新想法,还将采纳团队在此过程中发现的积极优化和新技巧,其中一些正在努力形成完善相应的文档以发布到社区。
Halo2 得到了以太坊基金会12万美金的支持,由ECC团队全力开发,计划将于2021年早期移除trusted setup,同时将来recursive proof的支持将为Layer 1 的可扩展性奠定基础。
实现新的前沿技术的过程是一个漫长的过程。它包括科学的同行评审、工程、第三方安全审计和测试,以确保安全。ECC有安全部署创新技术的记录,我们知道这项工作需要协作。从开源Halo,到与以太坊基金会合作,再到研究未来的实现,协作是我们工作的核心。
在Sapling升级中,大幅提升了Zcash的性能,并使得第三方钱包和交易所首次使用了Zcash的shielded技术。
由于Zcash从Bitcoin代码库分叉而来,底层本身不具备可扩展性。
借助Halo2技术,可允许在无需trusted setup的情况下进行电路升级,使得Zcash的shielded协议在未来的改进中更加灵活,如:
支持诸如用户自定义资产(UDAs)之类的附加资产。
同时,也有利于其它项目或tokens也可受益于Zcash的通过加密实现隐私的特征。
借助Halo2,可解锁Zcash在Layer 1层面的可扩展性。
[1] Zcash协议说明书
[2] Zcash Orchard feature 设计说明书 【Orchard 为a feature proposal,而不是network upgrade。Orchard 是伴随着Zcash Canopy升级的feature proposal。】
[3] Zcash Halo2 设计说明书
[4] ECC 2020年9月1日 博客 ECC releases code for Halo 2
[5] ECC 2020年9月1日 博客 Explaining Halo 2
[6] ECC 2021年1月8日 博客 Bringing Halo 2 to Zcash