This crate contains the implementation of two circuits that build a Zero Knowledge Proof:
- Given a public witness
bthat is a Sudoku board, the circuit is a proof that the prover knows a solutionsfor the Sudoku puzzle. - Given a public witness
wand a public constantk, the prover knows a secret witness such thatw = n * (n + 1) * (n + 2) * ... * (n + k). Whenn = 1, the circuit is a proof thatwis a factorial number.
We wrote this crate to get a first-hand feeling of the user friendlyness of the Halo2 proving system.
To run the tests, run the command cargo test --release.
The command cargo test works too, but in that case you may want
to give your computer a couple of minutes to compute the test results.
The option -- --nocapture --test-threads=1 can be used to print the execution times for proof generation and verification. The threads number must be set as 1, as the default parallel execution may interfere with the timing.
The single circuits can be tested by matching the test name with sudoku, permutation or factorial.
The tests that match the mock pattern are written using the MockProver struct, while the others use the custom real-world provers.
To run the tests via Docker, the simplest way is to use the image published by CI:
docker run --rm --network host ghcr.io/libecciolabs/halo2-playground:mainYou can always build the docker image yourself:
git clone https://github.com/LibeccioLabs/Halo2-Playground/
docker build -t halo2-playground ./Halo2-Playground/
docker run --rm halo2-playgroundSince the Docker image will run cargo test --release, you can append any other flag, including a match for the tests you want to run.
For example, to run only the tests in the sudoku module, you can run:
docker run --rm halo2-playground sudoku