You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Circom编译NAND复合电路时遇多类错误求助

问题分析与解决办法

1. 版本指定方式错误(include指令参数未识别)

Circom 2.0要求pragma circom必须是文件的第一行语句,不能放在include之后。你的代码先写include再写pragma,导致编译器无法正确识别版本声明,进而引发后续解析混乱。

正确的代码开头顺序:

pragma circom 2.0.0;
include "Nand.circom";

2. 缺失分号/非法表达式误报

这两个错误都是版本声明位置错误引发的连锁问题。编译器因为没正确识别Circom 2.0语法,会用旧版本规则解析代码,导致对正确的signal语法误判。修正pragma的位置后,这两个错误会自动消失。

额外代码问题(避免后续编译失败)

你的代码还有两处需要修正:

  • signal s4未被赋值或约束:Circom要求所有signal必须有明确的约束关系,比如可以添加s4 === s3;将其关联到输入s3。
  • 模板名称大小写:Circom对大小写敏感,若Nand.circom中定义的模板是template Nand(),则代码里的NAND()要改为Nand()。

修正后的完整代码示例:

pragma circom 2.0.0;
include "Nand.circom";

template Composite(){
    signal private s1;
    signal input s2;
    signal input s3;
    signal output s5;
    signal s4;

    // 给s4添加约束关联到输入s3
    s4 === s3;

    component G1 = Nand();
    component G2 = Nand();

    s1 ==> G1.a;
    s2 ==> G1.b;
    G1.out ==> G2.a;
    s4 ==> G2.b;
    G2.out ==> s5;
}

component main = Composite();

重新编译验证

执行你的编译命令即可正常编译:

circom composite.circom --r1cs --wasm --sym --c

内容的提问来源于stack exchange,提问作者Venkata Surya Sundar Vadali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:42:09