在前一篇博文Pinocchio: Nearly Practica Verifable Computationh之circuit compiler的基础上,对所生成的.arith文件进行相应的qap转换及prove/verify操作。
Pinocchio源码中的msbignum.h等内容暂未开源,目前无法直接编译通过,直接使用其中的pinocchio-v0.5.3.exe可执行文件进行相应操作。
一、pinocchio相关参数说明
pinocchio中使用Boost program_options库来进行参数解析。所有参数可pinocchio-v0.5.3.exe -h来查看。

二、qap转换
在前一篇博文Pinocchio: Nearly Practica Verifable Computationh之circuit compiler中,outsource的是判断output->x = (input->a) == (input->b);,需要创建相应的eqtest-p0-b32.in输入文件,该文件格式为wireID wireValue以16进制形式展现所有input信息。如wireID 0->变量a, wireID 1->变量b, 若变量a的值取10(对应16进制为a),变量b的值取11(对应16进制为b),最后一行以const-1 input wire(即eqtest-p0-b32.arith中的one-input)结束,对应的eqtest-p0-b32.in内容为:
0 a
1 b
2 1
eqtest-p0-b32.arith内容为:
total 11
input 0 # input
input 1 # input
input 2 # one-input
const-mul-0 in 1 <2> out 1 <3> # zero
const-mul-neg-1 in 1 <1> out 1 <4> # zerop subtract negative
add in 2 <0 4> out 1 <5> # zerop diff
zerop in 1 <5> out 2 <7 6> # zerop <ArithBuses.ArithmeticInputBus instance at 0x7ff566a263f8>
const-mul-neg-1 in 1 <6> out 1 <8> # zerop inverse
add in 2 <2 8> out 1 <9> # zerop result
mul in 2 <2 9> out 1 <10> # output-cast
output 10 #
执行qap转换:
pinocchio-v0.5.3.exe --qap --dv --file circuit/eqtest-p0-b32.arith --input circuit/eqtest-p0-b32.in --mem 4
对应的输出为:

三、qap结果输出
pinocchio-v0.5.3.exe --qap --dv --file circuit/eqtest-p0-b32.arith --input circuit/eqtest-p0-b32.in --mem 4 --output circuit/eqtest-p0-b32.out
对应的eqtest-p0-b32.out内容(格式为wireID wireValue,其中的10即为output对应的wireID)为:[a!=b时,output为0]
10 0000000000000000000000000000000000000000000000000000000000000000
修改eqtest-p0-b32.in中的值,将其中的wireID 0和1的值设置为相同。再次运行上述命令,对应的eqtest-p0-b32.out内容为:[a==b时,output为1]
10 0000000000000000000000000000000000000000000000000000000000000001
符合预期!
本文详细介绍了如何使用Pinocchio工具进行QAP转换,包括参数解析、qap转换流程及验证操作。通过具体实例,展示了如何创建输入文件,执行qap转换,并解析输出结果,验证计算正确性。


被折叠的 条评论
为什么被折叠?



