如何在 Circom 中访问具有 "Unknown" 索引的数组元素?

How to access array element with an "Unknown" index in Circom?

我有以下Circom(电路编译语言)程序:

pragma circom 2.0.0;


template MAIN() {

    signal input array[2512];
    signal output d;

    signal v;
    v <== 168;

    d <== array[v];
}

component main = MAIN();

我想访问任意索引处的数组元素并将其作为信号return。

我收到以下错误:

   ┌─ "/Users/ilia/compiling/main-circom/main.circom":85:11
   │
85 │     d <== array[v];
   │           ^^^^^^^^ Non-quadratic constraint was detected statically, using unknown index will cause the constraint to be non-quadratic

如何访问具有“未知”索引的数组元素?

我要构建的是一个程序,它接受一个字节数组,寻找一个特定的索引,然后获取 array[index:] 的 SHA256 散列。我不知道索引是什么,索引会根据数组的内容在程序内部计算。

我在 crypto.stackexchange.com 上问过我之前的 Circom 问题,但被引导到这里。

我可以这样使用 QuinSelector:

    component quinSelector = QuinSelector(2512);
    for (k=0; k< 2512; k++) {
        quinSelector.in[k] <== array[k];
    }
    quinSelector.index <== v;
    d <== quinSelector.out;