时间:2023-07-30|浏览:180
用戶喜愛的交易所
已有账号登陆后会弹出下载
最突出的SNARK系统是由JensGroth于2016年提出的,他展示了如何通过有效验证器为任何算术电路获得简洁的知识证明。然而,这个证明系统需要一个结构化的引用字符串。
为了生成SRS,我们需要运行一个可信的设置,由多个用户运行的复杂设置程序,以生成验证程序和验证器需要的密钥。Groth16系统已在多个框架和编程语言中实现,是目前使用最多的SNARK系统。事实上,Filecoin网络每天验证超过200万个Groth16SNARK!
由于SNARK的快速和大规模采用,使用SNARK的系统面临着可扩展性挑战。因为网络中的所有节点必须单独处理每个证明以达成一致,这限制了一个网络每天可以验证的证明数量。
目前已开发出多种解决方案来解决SNARK的这一挑战。其中最新和有效的方法是基于证明携带数据的概念,它是完全递归的证明系统。一个证明可以验证另一个证明,并且递归的级别是无限的。这种方法已经在Mina协议和Halo2中采用。不幸的是,这种方法需要一个完整的新的证明系统,与目前的Groth16证明系统不兼容。因此,我们希望能够扩展目前已经在生产中使用的现有证明系统。
幸运的是,2019年Bünz、Maller、Mishra、Tyagi和Vesely展示了一个相当优雅的解决方案,可以将Groth16证明聚合在一起,生成一个对数大小的证明,并且不需要对证明系统本身进行任何更改!换句话说,可以在不发生重大更改的情况下聚合现有的证明,为当前系统带来可扩展性!
在发现这篇论文之后,我们开始研究它是否可以应用于Filecoin,并对它可能带来的潜在可扩展性感到非常兴奋。
Filecoin矿工需要证明他们已经正确编码了32GiB存储扇区,即他们保留了32GiB的存储空间。为了做到这一点,矿工需要运行一个特殊的编码功能(复制证明),连续工作步骤。在每一步中,矿工使用来自前一层和当前层的节点来编码由2个节点组成的层,每个节点为32GiB。在每一步之后,它生成一个包含所有这些节点的Merkle树。最后,验证者必须创建一个证明,通过给每个层中的随机节点提供Merkle路径,证明他们正确执行了所有这些计算。
问题是,一个图层中有很多节点。出于实用的考虑,我们的可信设置只能增加到2²⁷个,因此我们不得不将复制证明SNARK分为10个较小的SNARK。幸运的是,我们可以使用批量验证来验证SNARK。目前,我们可以通过聚合10个SNARK来显著降低一个证明的成本。