如何在 Circom 中编写依赖于条件的约束?

How to write a constraint that depends on a condition in Circom?

我在Circom circuit compiler

中有以下形式的代码
template DecodeUint(len) {
    signal input x;
    signal input pos;
    signal output value;
    signal output nextpos;

    component getV = GetV(len);

    if (x <= 23) {
        value <== x;
        pos ==> nextpos;
    }
    else if(x == 24) {
        value <== 255;
        pos + 1 ==> nextpos;
    }
}

我收到此错误:

error[T2005]: Typing error found
   ┌─ "/Users/ilia/compiling/main-circom/main.circom":93:13
   │
93 │     else if(x == 24) {
   │             ^^^^^^^ There are constraints depending on the value of the condition and it can be unknown during the constraint generation phase

如何将条件重写为可以生成电路的形式?是否有类似 Quin Selector 的东西,但对于 if 条件?

我使用了 circomlib 中的 LessThanIsEqual,其中 return 为 1 或 0,具体取决于它是真还是假,然后将这些条件的输出乘以 return value,最后用 CalculateTotal 将相乘的条件相加,得到所有 if 分支的算术运算结果。