在准备在zkSnark中使用的逻辑时,首先需要将代码“扁平化”,以便将其编写为一系列约束。
我发现很难找到这样做的例子。例如,如何将以下逻辑转换为一系列约束:
if ((input_1 && input_2) || input_3) {
result = input_1 + input_2
} else {
result = input_3
}您将如何将其转换为一个算术语句,然后再将其重写为一系列约束?或者,是否有这样的过程的例子,有人可以借鉴?
发布于 2020-05-15 09:01:24
这类用于zkSNARKs系统的编程逻辑可以用佐克拉底开发成算术电路,这是一种在Ethereum上开发zkSNARKs的工具箱。它帮助您在分散的应用程序中使用可验证的计算,从高级语言中的程序规范到生成计算证明,到验证那些可靠的证明,这就是智能合同Langauge for Ethereum。请在下面找到为Zokrate编写的示例编程逻辑。
一旦编译了代码,就可以继续进行电路设置。它创建一个证明密钥和验证密钥。这些密钥来源于随机性,通常被称为“有毒废物”。一旦生成它,您就可以继续生成一个包含生成的验证键和一个公共函数来验证已编译程序的解决方案的实体契约。然后,您可以为编译的程序计算一个见证。见证是变量的有效分配,包括计算结果。
def main(field a, field b, field c) -> (field):
field result = 0
result = if a + b > c then a + b else 1 fi
result = if a + b < c then c else 1 fi
return resulthttps://crypto.stackexchange.com/questions/80017
复制相似问题