Removing the witness check with snarkjs
This commit is contained in:
parent
b10d6665f2
commit
2de46d5e0d
37
README.md
37
README.md
@ -321,20 +321,7 @@ Now, we use the Javascript/WASM program created by `circom` in the directory *ci
|
|||||||
circuit_js$ node generate_witness.js circuit.wasm ../input.json ../witness.wtns
|
circuit_js$ node generate_witness.js circuit.wasm ../input.json ../witness.wtns
|
||||||
```
|
```
|
||||||
|
|
||||||
### 15. Debug the final witness calculation
|
### 15. Setup
|
||||||
|
|
||||||
Now, again with snarkjs we can check the generated witness:
|
|
||||||
```sh
|
|
||||||
snarkjs wtns debug circuit.wasm input.json witness.wtns circuit.sym --trigger --get --set
|
|
||||||
```
|
|
||||||
|
|
||||||
And check for any errors in the witness calculation process (best practice).
|
|
||||||
|
|
||||||
|
|
||||||
The `wtns debug` command logs every time a new component starts/ends (`--trigger`), when a signal is set (`--set`) and when it's read (`--get`).
|
|
||||||
|
|
||||||
|
|
||||||
### 16. Setup
|
|
||||||
|
|
||||||
Currently, snarkjs supports 2 proving systems: groth16 and PLONK.
|
Currently, snarkjs supports 2 proving systems: groth16 and PLONK.
|
||||||
|
|
||||||
@ -366,7 +353,7 @@ Note that `circuit_0000.zkey` (the output of the `zkey` command above) does not
|
|||||||
|
|
||||||
*The following steps (15-20) are similar to the equivalent phase 1 steps, except we use `zkey` instead of `powersoftau` as the main command, and we generate `zkey` rather that `ptau` files.*
|
*The following steps (15-20) are similar to the equivalent phase 1 steps, except we use `zkey` instead of `powersoftau` as the main command, and we generate `zkey` rather that `ptau` files.*
|
||||||
|
|
||||||
### 17. Contribute to the phase 2 ceremony
|
### 16. Contribute to the phase 2 ceremony
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey contribute circuit_0000.zkey circuit_0001.zkey --name="1st Contributor Name" -v
|
snarkjs zkey contribute circuit_0000.zkey circuit_0001.zkey --name="1st Contributor Name" -v
|
||||||
```
|
```
|
||||||
@ -376,14 +363,14 @@ The `zkey contribute` command creates a `zkey` file with a new contribution.
|
|||||||
As in phase 1, you'll be prompted to enter some random text to provide an extra source of entropy.
|
As in phase 1, you'll be prompted to enter some random text to provide an extra source of entropy.
|
||||||
|
|
||||||
|
|
||||||
### 18. Provide a second contribution
|
### 17. Provide a second contribution
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey contribute circuit_0001.zkey circuit_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"
|
snarkjs zkey contribute circuit_0001.zkey circuit_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"
|
||||||
```
|
```
|
||||||
|
|
||||||
We provide a second contribution.
|
We provide a second contribution.
|
||||||
|
|
||||||
### 19. Provide a third contribution using third party software
|
### 18. Provide a third contribution using third party software
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey export bellman circuit_0002.zkey challenge_phase2_0003
|
snarkjs zkey export bellman circuit_0002.zkey challenge_phase2_0003
|
||||||
@ -393,7 +380,7 @@ snarkjs zkey import bellman circuit_0002.zkey response_phase2_0003 circuit_0003.
|
|||||||
|
|
||||||
And a third using [third-party software](https://github.com/kobigurk/phase2-bn254).
|
And a third using [third-party software](https://github.com/kobigurk/phase2-bn254).
|
||||||
|
|
||||||
### 20. Verify the latest `zkey`
|
### 19. Verify the latest `zkey`
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_0003.zkey
|
snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_0003.zkey
|
||||||
```
|
```
|
||||||
@ -410,7 +397,7 @@ If everything checks out, you should see the following:
|
|||||||
[INFO] snarkJS: ZKey Ok!
|
[INFO] snarkJS: ZKey Ok!
|
||||||
```
|
```
|
||||||
|
|
||||||
### 21. Apply a random beacon
|
### 20. Apply a random beacon
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey beacon circuit_0003.zkey circuit_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2"
|
snarkjs zkey beacon circuit_0003.zkey circuit_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2"
|
||||||
```
|
```
|
||||||
@ -419,21 +406,21 @@ The `zkey beacon` command creates a `zkey` file with a contribution applied in t
|
|||||||
|
|
||||||
We use it to apply a random beacon to the latest `zkey` after the final contribution has been made (this is necessary in order to generate a final `zkey` file and finalise phase 2 of the trusted setup).
|
We use it to apply a random beacon to the latest `zkey` after the final contribution has been made (this is necessary in order to generate a final `zkey` file and finalise phase 2 of the trusted setup).
|
||||||
|
|
||||||
### 22. Verify the final `zkey`
|
### 21. Verify the final `zkey`
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_final.zkey
|
snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_final.zkey
|
||||||
```
|
```
|
||||||
|
|
||||||
Before we go ahead and export the verification key as a `json`, we perform a final check and verify the final protocol transcript (`zkey`).
|
Before we go ahead and export the verification key as a `json`, we perform a final check and verify the final protocol transcript (`zkey`).
|
||||||
|
|
||||||
### 23. Export the verification key
|
### 22. Export the verification key
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey export verificationkey circuit_final.zkey verification_key.json
|
snarkjs zkey export verificationkey circuit_final.zkey verification_key.json
|
||||||
```
|
```
|
||||||
We export the verification key from `circuit_final.zkey` into `verification_key.json`.
|
We export the verification key from `circuit_final.zkey` into `verification_key.json`.
|
||||||
|
|
||||||
|
|
||||||
### 24. Create the proof
|
### 23. Create the proof
|
||||||
|
|
||||||
#### PLONK
|
#### PLONK
|
||||||
|
|
||||||
@ -455,7 +442,7 @@ We create the proof. this command generates the files `proof.json` and `public.j
|
|||||||
> ```
|
> ```
|
||||||
|
|
||||||
|
|
||||||
### 25. Verify the proof
|
### 24. Verify the proof
|
||||||
|
|
||||||
#### PLONK
|
#### PLONK
|
||||||
```sh
|
```sh
|
||||||
@ -472,14 +459,14 @@ We use the this command to verify the proof, passing in the `verification_key` w
|
|||||||
If all is well, you should see that `OK` has been outputted to your console. This signifies the proof is valid.
|
If all is well, you should see that `OK` has been outputted to your console. This signifies the proof is valid.
|
||||||
|
|
||||||
|
|
||||||
### 26. Turn the verifier into a smart contract
|
### 25. Turn the verifier into a smart contract
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey export solidityverifier circuit_final.zkey verifier.sol
|
snarkjs zkey export solidityverifier circuit_final.zkey verifier.sol
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally, we export the verifier as a Solidity smart-contract so that we can publish it on-chain -- using [remix](https://remix.ethereum.org/) for example. For the details on how to do this, refer to section 4 of [this tutorial](https://blog.iden3.io/first-zk-proof.html).
|
Finally, we export the verifier as a Solidity smart-contract so that we can publish it on-chain -- using [remix](https://remix.ethereum.org/) for example. For the details on how to do this, refer to section 4 of [this tutorial](https://blog.iden3.io/first-zk-proof.html).
|
||||||
|
|
||||||
### 27. Simulate a verification call
|
### 26. Simulate a verification call
|
||||||
```sh
|
```sh
|
||||||
snarkjs zkey export soliditycalldata public.json proof.json
|
snarkjs zkey export soliditycalldata public.json proof.json
|
||||||
```
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user