diff --git a/README.md b/README.md index 25812df..1d9378f 100644 --- a/README.md +++ b/README.md @@ -1 +1,39 @@ -# ark-circom +#

ark-circom

+ +Arkworks bindings to Circom's R1CS, for Groth16 Proof and Witness generation in Rust. + +![Github Actions](https://github.com/gakonst/ark-circom/workflows/Tests/badge.svg) + +## Documentation + +Clone the repository and run `cd ark-circom/ && cargo doc --open` + +## Add ark-circom to your repository + +```toml +[dependencies] + +ark-circom = { git = "https://github.com/gakonst/ark-circom-rs" } +``` + +## Running the tests + +Tests require the following installed: +1. [`solc`](https://solidity.readthedocs.io/en/latest/installing-solidity.html). We also recommend using [solc-select](https://github.com/crytic/solc-select) for more flexibility. +2. [`ganache-cli`](https://github.com/trufflesuite/ganache-cli#installation) + +## Features + +- [x] Witness generation using Circom's WASM witness code +- [x] ZKey parsing into Arkworks Proving Key over BN254 +- [x] Compatibility layer for Ethereum types, so that proofs can be used in Solidity verifiers +- [x] Proof generations and verification using Arkworks +- [ ] CLI for common operations + +## Acknowledgements + +This library would not have been possibly without the great work done in: +- [`zkutil`](https://github.com/poma/zkutil/) +- [`snarkjs`](https://github.com/iden3/snarkjs/) + +Special shoutout to [Kobi Gurkan](https://github.com/kobigurk/) for all the help in parsing SnarkJS' ZKey file format. diff --git a/src/lib.rs b/src/lib.rs index 9dfb836..3032da9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,71 +1,6 @@ //! Arkworks - Circom Compatibility layer //! -//! Given a Circom WASM-compiled witness.wasm, it can read it and calculate the corresponding -//! -//! ## WASM Witness Generator -//! -//! ## Types -//! * ZKey -//! * WTNS -//! * R1CS -//! * WASM -//! * Sys? -//! -//! Inputs: -//! * circuit.wasm -//! * input.json -//! -//! Outputs: -//! * witness.wtns -//! -//! Given a circuit WASM and an input.json calculates the corresponding witness -//! -//! ## Proof calculator -//! -//! Inputs: -//! * witness.wtns / witness.json -//! * circuit.zkey -//! -//! Given a witness (and r1cs?) synthesizes the circom circuit -//! And then feeds it to the arkworks groth16 prover -//! -//! Outputs: -//! * public.json -//! * proof.json -//! -//! ## Smart Contract connector class -//! -//! Given an Arkworks proof, it's able to translate it to the Circom-verifier -//! expected arguments -//! -//! (No Dark Forest specific modifications included, these are part of df-snark) -//! -//! ## Binary -//! -//! CLIs for each of the above + logging to stdout -//! -//! witness for the specified inputs -//! -//! ## Commands -//! -//! Compile a circuit: -//! `circom circuit.circom --r1cs --wasm --sym` -//! -//! Phase2 over circuit + PoT -//! `snarkjs zkey new circuit.r1cs powersOfTau28_hez_final_10.ptau circuit_0000.zkey` -//! `snarkjs zkey contribute circuit_0000.zkey circuit_final.zkey` -//! `snarkjs zkey export verificationkey circuit_final.zkey verification_key.json` -//! -//! Witness calculation from inputs: -//! `snarkjs wtns calculate circuit.wasm input.json witness.wtns` -//! `snarkjs wtns export json witness.wtns witness.json` -//! -//! Groth16 proof calculation: -//! `snarkjs groth16 prove circuit_final.zkey witness.wtns proof.json public.json` -//! -//! Groth16 Proof verification: -//! `snarkjs groth16 verify verification_key.json public.json proof.json` - +//! Provides bindings to Circom's R1CS, for Groth16 Proof and Witness generation in Rust. mod witness; pub mod circom;