Rust开发环境和Node.js开发环境。$HOME/.cargo/bintarget/release中生成二进制文件git clone https://github.com/iden3/circom.gitcargo build --releasecargo install --path circomcircom --helpnpm install -g snarkjsp = 21888242871839275222246405745257275088548364400416034343698204186575808495617s_1,...,s_n为算术电路的信号:(a_1*s_1 + ... + a_n*s_n) * (b_1*s_1 + ... + b_n*s_n) + (c_1*s_1 + ... + c_n*s_n) = 0multiplier2.circom pragma circom 2.0.0;
/*这个电路检验c是a与b的乘积*/
template Multiplier2 () {
// 信号声明
signal input a;
signal input b;
signal output c;
// 约束
c <== a * b;
}
/*创建模板的一个实例*/
component main = Multiplier2();
circom multiplier2.circom --r1cs --wasm --sym --c--r1cs : 生成multiplier2.r1cs,包含电路R1CS约束系统的二进制文件--wasm:生成multiplier2_js文件夹,包括multiplier2.wasm--c:生成multiplier2_cpp文件夹,包括multiplier2.cpp等用来生成证据的文件--sym:生成multiplier2.sym,调试打印约束系统的符号文件input.json: {"a": 3, "b": 11}multiplier2_js中:node generate_witness.js multiplier2.wasm input.json witness.wtnsmultiplier2_cpp中:make ; ./multiplier2 input.json witness.wtnsnlohmann-json3-dev, libgmp-dev , nasmsnarkjs powersoftau new bn128 12 pot12_0000.ptau -vsnarkjs powersoftau contribute pot12_0000.ptau pot12_0001.ptau --name="First contribution" -vsnarkjs powersoftau prepare phase2 pot12_0001.ptau pot12_final.ptau -vsnarkjs groth16 setup multiplier2.r1cs pot12_final.ptau multiplier2_0000.zkeysnarkjs zkey contribute multiplier2_0000.zkey multiplier2_0001.zkey --name="1st Contributor Name" -vsnarkjs zkey export verificationkey multiplier2_0001.zkey verification_key.jsonsnarkjs groth16 prove multiplier2_0001.zkey witness.wtns proof.json public.jsonsnarkjs groth16 verify verification_key.json public.json proof.json