aptos-keyless-prove
input->prove
看起来你提到的路径 /home/rex_fernando_aptoslabs_com/devnet-groth16-keys/main_c_cpp 指向一个包含 C++ 生成 witness 的文件夹。通常情况下,Circom 电路可以生成多种语言的 witness 生成器,包括 JavaScript 和 C++。
使用 C++ witness 生成器
如果你使用的是 C++ witness 生成器,步骤会稍有不同。以下是如何使用 C++ witness 生成器生成 witness 的详细步骤:
步骤 1:编译电路生成 C++ 文件
假设你已经用 Circom 编译了电路并生成了 C++ 文件和 Makefile。你可以使用以下命令来编译生成的 C++ 文件:
cd /home/rex_fernando_aptoslabs_com/devnet-groth16-keys/main_c_cpp
make
这将生成一个可执行文件,通常是 witness_calculator。
步骤 2:准备 input.json
你仍然需要准备一个 input.json 文件,包含电路的输入数据。例如:
{
"a": 3,
"b": 11
}
步骤 3:生成 witness
使用生成的 C++ 可执行文件来生成 witness。假设可执行文件名为 witness_calculator,你可以使用以下命令:
./witness_calculator input.json witness.wtns
步骤 4:验证生成的 witness
你可以使用 snarkjs 工具来验证生成的 witness。例如:
snarkjs wtns debug /path/to/main.r1cs witness.wtns /path/to/main.sym
步骤 5:生成证明和验证
一旦你生成并验证了 witness,你可以继续生成零知识证明并进行验证。这通常包括以下步骤:
-
生成证明:
snarkjs groth16 prove /path/to/main.zkey witness.wtns proof.json public.json -
验证证明:
snarkjs groth16 verify /path/to/verification_key.json public.json proof.json
总结
如果你使用的是 C++ witness 生成器,步骤和使用 JavaScript witness 生成器类似,但需要先编译生成的 C++ 文件,然后使用生成的可执行文件来生成 witness。确保你的 input.json 文件格式正确,并按照上述步骤生成和验证 witness。