Skip to content

【session 2】有推荐或者规范的circom写法么 #21

Discussion options

You must be logged in to vote

我认为这个代码是有问题的。<--的语句是pre-prove提供的witness,但是电路并没有约束a的具体数值。这样的话即使a为任意一个{0,1} (跟in独立的),该电路都可以通过验证的。也就是电路等价于:

pragma circom 2.1.2;
include "circomlib/poseidon.circom";
// include "https://github.com/0xPARC/circom-secp256k1/blob/master/circuits/bigint.circom";
template IsZero () {
    signal input in;
    signal output out;
    signal input a;
    out <== a;
    out * (out -1) === 0;
}

回到原来的代码:

template IsZero() {
    signal input in;
    signal output out;

    signal inv;

    inv <-- in!=0 ? 1/in : 0;

    out <== -in*inv +1;
    in*out === 0;
}

其中inv也是pre-prove的一个witness,但是inv不满足in!=0 ? 1/in : 0,电路是无法通过的。可以简单的演算如下:

  • 如果in > 0,那么out必须为0,否则 in * out === 0无法成立,又因为 out === -in * inv + 1 使得 in …

Replies: 2 comments 6 replies

Comment options

You must be logged in to vote
6 replies
@qizhou
Comment options

@lkiversonlk
Comment options

@LowLowCoder-Mel
Comment options

@lkiversonlk
Comment options

@qwang98
Comment options

Answer selected by lkiversonlk
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
4 participants