SNARK是简洁的非交互式知识论证:简言之,它们允许一个人以简洁的方式向验证者证明,他们使用正确的输入正确地执行了计算。它们打开了许多以前不可行的用例,如匿名交易、快速轻客户端/紧凑型区块链和可证明的分散存储,从而对区块链世界产生了巨大影响。
在生产中部署的最突出的SNARK系统,是由JensGroth在2016年Eurocrypt中提出的,他展示了如何通过有效验证器为任何算术电路获得简洁的知识证明。请注意,这个证明系统需要一个结构化的引用字符串:一个专为特定计算而精心制作的元素载体。
为了生成SRS,我们需要运行一个可信的设置,一个由多个用户运行的复杂设置程序,以生成验证程序和验证器需要的密钥。Groth16系统已在多个框架和编程语言中实现,是目前使用最多的SNAR系统。了解更多加FILkefu,为了给出一个比例感,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路径,从而正确执行了所有这些计算。
问题是,一个图层中有许多节点。为了实用,我们的可信设置只能增加到22?个,了解更多加FILkefu,因此我们不得不将复制证明SNARK分为10个较小的SNARK。幸运的是,我们可以使用批量验证来验证SNARK。并且,目前我们可以通过能够聚合10个SNARK来显著降低一个证明的成本。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。