一般来说,我是 ZoKrates 和 ZK 的新手。我对证人的工作方式感到困惑。如果我计算出无效的证人,验证者仍然会验证证明是正确的。例如(基于 ZoKrates“开始”)。
鉴于此程序:
def main(private field a, field b) -> bool:
return a * a == b
然后运行以下命令:
zokrates compile -i root.zok
zokrates setup
zokrates compute-witness -a 337 113569
zokrates generate-proof
当我跑
zokrates verify
它返回通过。
但是,如果我提供一个不好的价值,compute-witness
它仍然会通过。例如:
zokrates compute-witness -a 1 113569
zokrates generate-proof
zokrates verify // PASSES
我显然在这里误解了一些东西,但是在花了几个小时在线阅读不同的内容之后,我仍然不确定是什么。