Source: https://rareskills.io/zh-cn/post/circom-intro
Circom 是一种用于创建一阶约束系统(R1CS)并填充该 R1CS 见证向量(witness vector)的编程语言。
R1CS 格式之所以备受关注,是因为该格式在构建 SNARKs(尤其是 Groth16 )方面非常有用。借助 SNARKs,我们能够实现可验证计算,从而允许我们证明计算的正确性。在验证时,利益相关方为了确认正确性所消耗的计算量,要比他们亲自执行该计算所需的计算量少得多。而且还可以生成证明而不泄露底层数据,在这种情况下,我们将其称为 zkSNARKs。
我们 ZK 书籍的第一部分重点介绍了如何证明给定 R1CS 的见证(witness)的有效性。而本资源则侧重于如何以编程方式生成 R1CS,以及如何设计它们以模拟真实的算法,例如虚拟机或密码学哈希函数。
我们希望读者已经熟悉我们 ZK 书籍中的以下章节:
我们将假设读者知道 R1CS 是什么及其代表的含义。上述四章已对此进行了全面解释。
使用 Circom 并不需要完全理解 ZK 背后的数学原理,但必须完全掌握某些核心原则,否则 Circom 将变得难以理解。
尽管如此,如果读者确实希望在 ZK 领域发展职业生涯,学习 ZK 的基础知识是必不可少的。为此,我们强烈建议通读 ZK book 的前两部分,并从零开始构建 Groth16 证明系统以巩固所学。
然而,如果读者的目标是快速了解 ZK 应用程序,那么我们建议先阅读上面列出的四章内容,然后再使用本资源。
Circom 的创建是为了解决为 SNARKs 开发约束系统时的两个主要问题。
因此,Circom 实现了:1) 简化约束设计;2) 自动填充见证。