Количество проводов в цепи ZKP Circom больше ожидаемого

Я компилирую эту простую схему:

      pragma circom 2.0.0;

template Multiplier2() {
    signal input a;
    signal input b;
    signal output c;
    c <== a*b;
 }

 component main = Multiplier2();

и компилятор говорит 4 провода:

      circom 1.circom --r1cs --wasm --sym --c
template instances: 1
non-linear constraints: 1
linear constraints: 0
public inputs: 0
public outputs: 1
private inputs: 2
private outputs: 0
wires: 4
labels: 4

Я рассчитывал, что количество проводов будет равно количеству сигналов (3), интересно, откуда 4-й провод?

2 ответа

При преобразовании схемы вR1CS, постоянный1рассматривается как дополнительный вход. Я считаю, что это то, что авторы решили сделать для простоты.

В предоставленной вами схеме шаблон имеет 3 сигнала: a, b и c. Однако когда вы создаете экземпляр своего основного компонента, вы также создаете экземпляр сигнала завершения по умолчанию, который генерируется Circcom. Этот сигнал завершения генерируется автоматически, когда для компонентов в Circcom не указан явный выход.

Итак, хотяMultiplier2()В шаблоне есть только 3 сигнала, вы создаете его экземпляр таким образом, что Circcom также генерирует конечный сигнал, в результате чего в общей сложности получается 4 провода.

Очень интересная статья с подробностями: https://medium.com/@yujiangtham/lets-dissect-a-zksnark-part-2-5f92f1d7d2e9

Другие вопросы по тегам