Количество проводов в цепи 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