前言
想学习zk-snark算法的读者可能大多都读过V神的文章(https://medium.com/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649)总共分为三个部分,细致而全面的讲解了zk-snark算法的基本数学原理及思想,想要看懂还是需要花费一些时间和心思的;同时,可能也有一部分读者会从zcash的官网上找到zk-snark算法原理的介绍(https://z.cash/technology/zksnarks/)。虽然两者阐述zk-snark算法的方式不一样,但是其算法核心还是一致的。
本人以V神文章中的例子为模板(x^3 +x +5 = 35),总结了一下两者产生QAP的过程,方便读者理解R1CS->QAP的具体过程。
建议
建议阅读本篇文章的读者应先熟悉以下几个知识点:
1. 算术电路的概念及生成规则
2. R1CS的概念
3. QAP的概念
4. 零知识证明的基本思想
5. 拉格朗日多项式插值
**并结合第一小节给的链接来理解两者各自的QAP计算过程及其异同点**
总结&对比
图中:淡青色部分为Zcash的处理过程;淡蓝色部分为V神讲解的处理过程,淡橙色部分为两者的公共部分。
**需要注意的是**:
1. 算术环路的线条的序号标记方式不是唯一的,图中的标记方式是对应了V神版本里的多项式的生成结果
2. 两者的关系可以这么理解:V神的介绍描述的是如何把多个线性约束绑定再一起,变成一个约束,这其实是GGPR13论文的主要思想,即QAP\QSP算法的由来;Zcash官网上的介绍是直接使用了QAP算法。
欢迎读者留言交流_