【问题标题】:ZoKrates Invalid witness produces valid proofZoKrates 无效证人产生有效证据
【发布时间】:2021-05-28 18:19:01
【问题描述】:

总的来说,我是 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

它返回 PASSED。

但是,如果我向 compute-witness 提供了错误的值,它仍然会通过。例如:

zokrates compute-witness -a 1 113569
zokrates generate-proof
zokrates verify // PASSES

我显然在这里误解了一些东西,但是在花了几个小时在线阅读不同的内容之后,我仍然不确定是什么。

【问题讨论】:

    标签: ethereum solidity evm


    【解决方案1】:

    我已经意识到我缺少的理解,这很简单。这种情况下的证明不是验证a * a 等于b,而是证明我已经运行了计算。

    例如,下面生成一个证明,证明我已经使用a = 337b = 113569 运行了这个程序,返回值为true

    zokrates compute-witness -a 337 113569
    zokrates generate-proof
    

    如果我更改输入以使计算返回 false;例如a = 1b = 113569。 下面生成了一个证明,证明我已经使用 ab 的这些值运行了这个程序,并且返回是 false

    zokrates compute-witness -a 1 113569
    zokrates generate-proof
    

    感谢ZoKrates Gitter 上的 Darko 帮助我理解这一点。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多