【发布时间】:2022-10-15 13:51:24
【问题描述】:
ZKsnarks 非常新。我正在尝试构建一个简单的应用程序来检查输入数字是否与某个预定义的数字匹配。 我已按照SnarkJs doc 中提到的所有步骤进行操作。
这是我的用例的电路:
pragma circom 2.0.0;
template IsZero() {
signal input in;
signal output out;
signal inv;
inv <-- in!=0 ? 1/in : 0;
out <== -in*inv +1;
in*out === 0;
}
template verifier() {
signal input a;
signal output b;
signal c <== 9429723347216097781814234269377894115729242880998740711935743712243189718113;
component isz = IsZero();
a - c ==> isz.in;
isz.out ==> b;
}
component main = verifier();
但是,当我尝试验证不正确的证人时,验证者合约仍会对其进行验证。
这就是我正在做的事情:
首先获取 calldata 参数
proof = await snarkjs.plonk.fullProve( { a: 5}, "circuit_js/circuit.wasm", "circuit_final.zkey");
await snarkjs.plonk.exportSolidityCallData(proof["proof"], proof["publicSignals"]);
然后尝试使用verifier.sol 合约进行验证。但是它仍然验证它。我做错了什么?
【问题讨论】: