Skip to content

signal defined within a Block causes panics #394

@tim-hoffman

Description

@tim-hoffman

Version: ad44e91

Input file (test.circom):

pragma circom 2.2.0;

template B() {
  signal input in;
  {
    signal input in;
    signal input in2;
    signal output out;
    out <== in + in2;
  }
  signal output out;
  out <== in + 5;
}

component main {public [in,in2]} = B();

Run command 1: target/debug/circom -c test.circom
Output Log 1:

thread 'main' (12809912) panicked at compiler/src/circuit_design/build.rs:423:9:
assertion failed: st == io.start && sz == io.size
stack backtrace:
   0: __rustc::rust_begin_unwind
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/std/src/panicking.rs:698:5
   1: core::panicking::panic_fmt
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/core/src/panicking.rs:80:14
   2: core::panicking::panic
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/core/src/panicking.rs:150:5
   3: compiler::circuit_design::build::main_input_list
             at ./compiler/src/circuit_design/build.rs:423:6
   4: compiler::circuit_design::build::initialize_wasm_producer
             at ./compiler/src/circuit_design/build.rs:247:32
   5: compiler::circuit_design::build::build_circuit
             at ./compiler/src/circuit_design/build.rs:643:29
   6: compiler::circuit_design::circuit::Circuit::build
             at ./compiler/src/circuit_design/circuit.rs:570:9
   7: compiler::compiler_interface::run_compiler
             at ./compiler/src/compiler_interface.rs:21:19
   8: circom::compilation_user::compile
             at ./circom/src/compilation_user.rs:35:23
   9: circom::start
             at ./circom/src/main.rs:68:5
  10: circom::main
             at ./circom/src/main.rs:13:18

Run command 2: target/debug/circom --r1cs test.circom
Output Log 2:

thread 'main' (12811151) panicked at [...]/circom_algebra/src/algebra.rs:1259:27:
Unknown signal: 5
stack backtrace:
   0: __rustc::rust_begin_unwind
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/std/src/panicking.rs:698:5
   1: core::panicking::panic_fmt
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/core/src/panicking.rs:80:14
   2: core::panicking::panic_display
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/core/src/panicking.rs:264:5
   3: core::option::expect_failed
             at /rustc/695857bc3f72ec4f59c79f323460fe488c38a53f/library/core/src/option.rs:2183:5
   4: core::option::Option<T>::expect
             at [...]/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:970:21
   5: circom_algebra::algebra::apply_raw_correspondence
             at ./circom_algebra/src/algebra.rs:1259:27
   6: circom_algebra::algebra::Constraint<C>::apply_correspondence
             at ./circom_algebra/src/algebra.rs:1046:17
   7: constraint_list::r1cs_porting::port_r1cs
             at ./constraint_list/src/r1cs_porting.rs:25:17
   8: <constraint_list::ConstraintList as constraint_writers::ConstraintExporter>::r1cs
             at ./constraint_list/src/lib.rs:170:9
   9: circom::execution_user::generate_output_r1cs
             at ./circom/src/execution_user.rs:60:38
  10: circom::execution_user::execute_project
             at ./circom/src/execution_user.rs:48:9
  11: circom::start
             at ./circom/src/main.rs:48:19
  12: circom::main
             at ./circom/src/main.rs:13:18

Run command 3: target/debug/circom test.circom
Output Log 3:

template instances: 1
Everything went okay

This last one shows no error reported if output type is not specified. It's surprising that there is no error from declaring signals within an inner block. It introduces several ambiguities.

  • Which definition of in is the one marked as a public input?
  • How could both versions of in be assigned by an input.json file when computing the witness?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions