首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Zokerates接受错误的证据?

为什么Zokerates接受错误的证据?
EN

Ethereum用户
提问于 2020-12-04 22:13:46
回答 1查看 234关注 0票数 3

我试着用Zokrate测试一个非常简单的例子。因此,我在文档中使用了第一个例子,即:

代码语言:javascript
复制
// This is an example from https://zokrates.github.io/gettingstarted.html
def main(private field a, field b) -> (field):
field result = if a * a == b then 1 else 0 fi
return result  

在部署了验证器智能契约之后,我尝试测试不同的数字来验证这一点。例如,a=2和b=4以及我正确地得到了以下消息:bool:r true。

但问题是,对于任何错误的证明,我得到的反应和正确的证明是一样的。例如,a=3和b=19,我再次得到0:bool: r true。

为什么错误的证据有真实的反应?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-12-06 00:32:20

在ZoKrates中生成一个证明时,它总是有效的。您可能混淆了返回0/1的程序和有效/无效的证明。您可以通过修改它(更改proof点或inputs字段中的元素)来使证明无效。

让我举一个例子:

如果使用参数a = 2b = 4计算程序的见证,则输出将是1。当您使用计算证人生成一个证据时,您会得到如下内容:

代码语言:javascript
复制
{
  "proof": {
    "a": [
      "0x11ceea6848d6f4bb17fbe01e2f37a7f50aa5ea4da8aa6e4e364c3202dbb35deb",
      "0x04991e94bc0ae3718a464aecd3c351cadb9c779d8acf9601ac87245b7a5cec76"
    ],
    "b": [
      [
        "0x099a674ea974d7421b96a617635ac38939775ce47916487edaf5d384ddd401bf",
        "0x18b754e9665ee861740aa1ccb4def4ed4eb945d0f26be1dced2656004ea59111"
      ],
      [
        "0x022b35cca41f73cee44819184e9c0054e1553f3a31310e53581d90e526c93073",
        "0x22450d6b21830786c87e94131fbaaf9f6eaa93e6d526a827b42b706bee7654ff"
      ]
    ],
    "c": [
      "0x07405e6618cd88e94e44ceeade27f44d9dc362cf8f4de882b0d8905906d3daea",
      "0x1c8e8f412dfab3243f232fa9da9b1705bf99b05952819160d69c64ede0794fab"
    ]
  },
  "inputs": [
    "0x0000000000000000000000000000000000000000000000000000000000000004",
    "0x0000000000000000000000000000000000000000000000000000000000000001"
  ]
}

如果在证明中检查inputs字段,它包含程序的公共参数(在本例中是b的值,即4)和程序的输出(即1)。

如果您验证此证据,合同将返回{ "0": "bool: r true" }。如果你要改变证据中的某些东西的话。将inputs数组中的第一个元素更改为0x0000000000000000000000000000000000000000000000000000000000000003并再次运行验证,证明无效,因此验证器输出将是{ "0": "bool: r false" }。您还可以尝试更改abc组中的值,这也会使证明无效。

换句话说,在计算步骤中传递将使程序生成0的输入仍然会生成有效的证据,因为在这种情况下,您正在验证程序是否导致了0

票数 4
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/90798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档