zokrates-基于ethereum的zkp-I-介绍

Zokrates

ZoKrates是以太坊上zkSNARKs的工具箱。它可以帮助您在DApp中使用可验证的计算,从高级语言的程序规范到生成计算证明,以及在Solidity中验证这些证明。

闲话少叙,开搞

1.编写 .code 文件

.code 文件是证明的逻辑内容,函数的返回内容为 field、field[n]。

2.1 compile,编译 .code 文件,Zokrates内部生成数字电路,没有指定文件名称的话,默认生成 ./out.code

./zokrates compile -i root.code

2.2 perform the setup phase,进行安装。为 ./out.code 中的已编译程序生成可信设置。在./proving.key和./verifying.key处创建一个证明密钥和一个验证密钥。这些密钥源自随机源,通常称为“有毒废物”。任何有权访问随机源的人都可以生成假证明,该证明将由协议后的验证者接受。

./zokrates setup

2.3 execute the program,执行证明。计算在./out.code中找到的已编译程序的witness和程序的参数。witness是变量的有效分配,包括计算结果。-a 后面跟着程序的参数,用空格分隔。
在./witness创建一个witness文件

./zokrates compute-witness -a 337 113569

2.4 generate a proof of computation,生成 proof(证明)。使用./proving.key中的证明密钥,生成./out.code的证明,从而得到./witness。

./zokrates generate-proof

2.5 export a solidity verifier,使用./verifying.key上的验证密钥,生成一个Solidity合约,其中包含生成的验证密钥和公共函数,以验证./out.code上已编译程序的解决方案。
在./verifier.sol被创建。

./zokrates export-verifier

3.通过验证者合同,可以检查此证明。例如,使用web3,调用将如下所示:

1
Verifier.at(<verifier contract address>).verifyTx(A, A_p, B, B_p, C, C_p, H, K, [...publicInputs, ...outputs])

A, A_p, B, B_p, C, C_p, H, K的值,以及publicInputs和 outputs 均来自于步骤2.4中生成的proof.json文件。