zk-SNARKs 是一种比较难掌握的技术,我们需要将大量的部件组合在一起,才能使整个系统正常工作,因此,想要深入学习这项技术,我决定将各项部件拆解,分别学习并理解它。zk-SNARKs 不能直接应用于任何计算问题,我们需要将计算问题一步步的转化为正确的“形式”,以便问题可以在zk-SNARKs的体系中顺利运行,其流程如下图:
这其中就包含了这篇博客要讲的两个重要流程,R1CS 和 QAP:
- R1CS 的全称是 Rank-1 Constraint System,一阶约束系统,其本质是一个方程组。
- QAP 全称 Quadratic Arithmetic Problem, 二次算术问题。QAP 转换不仅可以将函数的代码转换为 QAP,还可以在转换的同时构建一个对应于代码输入的解(又称为 QAP 的 Witness),之后再基于这个 witness 构建一个实际的零知识证明系统。
后文将以Vitalik的文章Quadratic Arithmetic Programs: from Zero to Hero 为参照,详细展开解释R1CS和QAP转换的流程。
zk-SNARKs 是一种比较难掌握的技术,我们需要将大量的部件组合在一起,才能使整个系统正常工作,因此,想要深入学习这项技术,我决定将各项部件拆解,分别学习并理解它。zk-SNARKs 不能直接应用于任何计算问题,我们需要将计算问题一步步的转化为正确的“形式”,以便问题可以在zk-SNARKs的体系中顺利运行,其流程如下图:
这其中就包含了这篇博客要讲的两个重要流程,R1CS 和 QAP: - R1CS 的全称是 Rank-1 Constraint System,一阶约束系统,其本质是一个方程组。 - QAP 全称 Quadratic Arithmetic Problem, 二次算术问题。QAP 转换不仅可以将函数的代码转换为 QAP,还可以在转换的同时构建一个对应于代码输入的解(又称为 QAP 的 Witness),之后再基于这个 witness 构建一个实际的零知识证明系统。
后文将以Vitalik的文章Quadratic Arithmetic Programs: from Zero to Hero 为参照,详细展开解释R1CS和QAP转换的流程。