如何在 Circom 中 运行 一个迭代次数未知的循环?

How to run a loop with unknown number of iterations in Circom?

我在Circom cicuit compiler中有以下电路:

pragma circom 2.0.0;

template MAIN() {

    signal len;
    len <== 32;

    for (k = 0; k < maplen; k++) { 
        // do something
    }

}

component main = MAIN();

我遇到一个错误:

error[T2005]: Typing error found
    ┌─ "/Users/ilia/compiling/main-circom/circuits/main.circom":118:17
    │
118 │     for (k = 0; k < len; k++) {
    │                 ^^^^^^^ There are constraints depending on the value of the condition and it can be unknown during the constraint generation phase

如何以一种可以迭代 len 次的方式编写此循环,其中 len 是一个信号?

您需要决定您的循环可以有多少次最大迭代(迭代预算),然后使用 LessThan 组件丢弃您不需要的所有迭代。您还可以 select 使用 QuinSelector

迭代所需的结果