1
1
all : multiplier2
2
2
3
- .PHONY : verify/% contracts test
3
+ .PHONY : contracts test
4
+
5
+ CIRCUITS := multiplier2 advent2
4
6
5
7
# Build verifying contracts
6
- contracts : contracts/multiplier2 .sol
8
+ contracts : $( foreach circuit, $( CIRCUITS ) , contracts/$( circuit ) .sol)
7
9
8
10
# Build circuit, create witness, create proof, and verify it
9
11
multiplier2 : verify/multiplier2
12
+ advent2 : verify/advent2
10
13
11
14
# Do not delete intermediate files
12
15
.SECONDARY :
@@ -15,8 +18,9 @@ multiplier2: verify/multiplier2
15
18
build/% .r1cs : circuits/% .circom
16
19
@echo Building $@ ...
17
20
mkdir -p build/
18
- circom $< --r1cs --wasm --sym --c -o build/
19
- @echo
21
+ circom $< --r1cs --wasm --sym --c -l ../node_modules/circomlib/circuits -o build/
22
+ yarn -s snarkjs r1cs export json build/$* .r1cs build/$* .r1cs.json
23
+ @echo
20
24
21
25
# Creates a witness out of the circuit and input
22
26
inputs/% .wtns : build/% .r1cs inputs/% .json
@@ -25,35 +29,39 @@ inputs/%.wtns: build/%.r1cs inputs/%.json
25
29
build/$* _js/$* .wasm \
26
30
inputs/$* .json \
27
31
inputs/$* .wtns
32
+ yarn -s snarkjs wtns export json inputs/$* .wtns inputs/$* .wtns.json
33
+ @echo
28
34
29
35
# General phase 1 ceremony of powers of tau (trusted setup)
30
36
proofs/pot12_0001.ptau :
31
37
@echo Powers of tau ceremony phase 1...
32
38
mkdir -p proofs
33
- yarn snarkjs powersoftau new bn128 12 proofs/pot12_0000.ptau -v
34
- yarn snarkjs powersoftau contribute proofs/pot12_0000.ptau proofs/pot12_0001.ptau --name=" First contribution"
39
+ yarn -s snarkjs powersoftau new bn128 12 proofs/pot12_0000.ptau -v
40
+ yarn -s snarkjs powersoftau contribute proofs/pot12_0000.ptau proofs/pot12_0001.ptau --name=" First contribution"
35
41
@echo
36
42
37
43
# Circuit-specific phase 2 ceremony of powers of tau (trusted setup)
38
44
proofs/% /verification_key.json : proofs/pot12_0001.ptau build/% .r1cs
39
45
@echo Phase two of the ceremony...
40
46
mkdir -p proofs/$*
41
- yarn snarkjs powersoftau prepare phase2 proofs/pot12_0001.ptau proofs/$* /pot12.ptau
42
- yarn snarkjs groth16 setup build/multiplier2 .r1cs proofs/$* /pot12.ptau proofs/$* /key_0000.zkey
43
- yarn snarkjs zkey contribute proofs/$* /key_0000.zkey proofs/$* /key_0001.zkey --name=" First contribution"
44
- yarn snarkjs zkey export verificationkey proofs/$* /key_0001.zkey proofs/$* /verification_key.json
47
+ yarn -s snarkjs powersoftau prepare phase2 proofs/pot12_0001.ptau proofs/$* /pot12.ptau
48
+ yarn -s snarkjs groth16 setup build/$* .r1cs proofs/$* /pot12.ptau proofs/$* /key_0000.zkey
49
+ yarn -s snarkjs zkey contribute proofs/$* /key_0000.zkey proofs/$* /key_0001.zkey --name=" First contribution"
50
+ yarn -s snarkjs zkey export verificationkey proofs/$* /key_0001.zkey proofs/$* /verification_key.json
45
51
@echo
46
52
47
53
# Create a verifier contract out of a verification key
48
54
contracts/% .sol : proofs/% /verification_key.json
49
55
@echo Generating verifier contract...
50
56
mkdir -p contracts/
51
- yarn snarkjs zkey export solidityverifier proofs/$* /key_0001.zkey contracts/$* .sol
57
+ yarn -s snarkjs zkey export solidityverifier proofs/$* /key_0001.zkey contracts/$* .sol
52
58
53
59
# Create proof for a given witness, given the verification key generated in phase 2
54
60
proofs/% /proof.json : proofs/% /verification_key.json inputs/% .wtns
55
61
@echo Generating proof...
56
- yarn snarkjs groth16 prove proofs/$* /key_0001.zkey inputs/$* .wtns proofs/$* /proof.json proofs/$* /public.json
62
+ yarn -s snarkjs groth16 prove proofs/$* /key_0001.zkey inputs/$* .wtns proofs/$* /proof.json proofs/$* /public.json
63
+ @echo Output:
64
+ @jq -c ' .' proofs/$* /public.json
57
65
@echo
58
66
59
67
# Create proof to be fed into verifier contract
@@ -65,11 +73,11 @@ proofs/%/solidity-args.json: proofs/%/proof.json
65
73
# Verify the proof
66
74
verify/% : proofs/% /proof.json
67
75
@echo Verifying proof for $* ...
68
- yarn snarkjs groth16 verify proofs/$* /verification_key.json proofs/$* /public.json proofs/$* /proof.json
76
+ yarn -s snarkjs groth16 verify proofs/$* /verification_key.json proofs/$* /public.json proofs/$* /proof.json
69
77
@echo
70
78
71
79
# Test verifying contracts
72
- test : proofs/multiplier2 /solidity-args.json
80
+ test : $( foreach circuit, $( CIRCUITS ) , proofs/$( circuit ) /solidity-args.json)
73
81
@echo Running hardhat tests...
74
- yarn hardhat test
82
+ yarn -s hardhat test
75
83
@echo
0 commit comments