我对ZoKrates和ZK的东西一般都是新手。我对证人的工作方式感到困惑。如果我计算出一个无效的证人,验证者仍然会验证这个证据是正确的。例如(基于ZoKrates "get started")。
鉴于这一方案:
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我显然是在想念--在这里理解了一些东西,但在花了几个小时在线阅读不同的信息之后,我仍然不确定是什么。
发布于 2021-05-28 21:39:44
我已经意识到我错过了,这是相当简单的。本例中的证明不是验证a * a是否等于b,而是证明我已经运行了计算。
例如,下面将生成一个证据,证明我已经使用a = 337和b = 113569运行了这个程序,并且返回值是true。
zokrates compute-witness -a 337 113569
zokrates generate-proof如果更改输入以使计算返回false;例如,a = 1和b = 113569。下面将生成一个证据,证明我已经使用a和b的这些值运行了这个程序,并且返回的是false。
zokrates compute-witness -a 1 113569
zokrates generate-proof感谢ZoKrates Gitter上的Darko帮助我理解这一点。
https://stackoverflow.com/questions/67743830
复制相似问题