ZKP Circom电路导线数超出预期:第4根导线来源咨询
Circom电路中第4根导线的来源解释
你的乘法电路代码:
pragma circom 2.0.0; template Multiplier2() { signal input a; signal input b; signal output c; c <== a*b; } component main = Multiplier2();
编译输出显示wires: 4,你预期是3根(对应a、b、c三个信号),这第4根是Circom处理乘法时自动生成的隐藏中间导线。
原因是Circom在处理非线性约束(比如a*b这种乘法)时,会引入一个临时的中间信号来拆解约束逻辑:
- 首先创建一个隐藏信号(比如命名为
t),用它来承载a*b的结果,形成非线性约束t = a*b - 再通过线性约束把这个中间信号的值赋值给输出
c,也就是c = t
这就额外多了一根导线,加上你定义的a、b、c,总共有4根导线。
你可以打开编译生成的.sym符号文件,里面会列出所有导线的标签,能看到这个隐藏导线的命名(通常类似main.Multiplier2.c$mul),对应乘法操作的中间信号。
内容的提问来源于stack exchange,提问作者egor10_4
相关产品推荐
相关产品推荐

