main入口

为了开始执行,必须给出一个初始组件。默认情况下,该组件的名称是“main”,因此需要使用某个模板实例化组件main。

这是创建电路所需的特殊初始组件,它定义了电路的全局输入和输出信号。因此,与其他组件相比,它有一个特殊的属性:公共输入信号列表。创建main组件的语法是:

#![allow(unused)]
fn main() {
component main {public [signal_list]} = tempid(v1,...,vn);
}

其中{public [signal_list]}是可选的。未包含在列表中的模板的任何输入信号都被视为私有。

#![allow(unused)]
fn main() {
pragma circom 2.0.0;

template A(){
    signal input in1;
    signal input in2;
    signal output out;
    out <== in1 * in2;
}

component main {public [in1]}= A();
}

在此示例中,我们有两个输入信号in1和in2。让我们注意,它in1已被声明为电路的公共信号,而由于in2它没有出现在列表中,因此被视为私有信号。最后,输出信号始终被视为公共信号。

不仅在正在编译的文件中,而且在程序中包含的任何其他 circom文件中,只能定义一个main组件,否则,编译失败并显示一条消息:“Multiple main components in the project structure”