如何在 Circom 中编写依赖于条件的约束?
How to write a constraint that depends on a condition in Circom?
中有以下形式的代码
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 中的 LessThan
和 IsEqual
,其中 return 为 1 或 0,具体取决于它是真还是假,然后将这些条件的输出乘以 return value,最后用 CalculateTotal 将相乘的条件相加,得到所有 if 分支的算术运算结果。
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 中的 LessThan
和 IsEqual
,其中 return 为 1 或 0,具体取决于它是真还是假,然后将这些条件的输出乘以 return value,最后用 CalculateTotal 将相乘的条件相加,得到所有 if 分支的算术运算结果。