You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
mmagician 79a070f38a
fix groth16 tests
11 months ago
.github/workflows Upgrade to wasmer 4.3 (#64) 11 months ago
benches Upgrade to wasmer 4.3 (#64) 11 months ago
src remove n_vars, no longer used as its implicit 11 months ago
test-vectors remove the test case as we no longer have circom to reproduce it 11 months ago
tests fix groth16 tests 11 months ago
.gitignore gitignore ptau files 11 months ago
Cargo.lock move to 0.5 alpha release 11 months ago
Cargo.toml deprecate circom1 11 months ago
LICENSE-APACHE chore: add mit/apache dual license 2 years ago
LICENSE-MIT chore: add mit/apache dual license 2 years ago
README.md Fix CI by fixing version + add toolchain file (#52) 1 year ago
rust-toolchain.toml Upgrade to wasmer 4.3 (#64) 11 months ago

README.md

ark-circom

Arkworks bindings to Circom's R1CS, for Groth16 Proof and Witness generation in Rust.

Github Actions

Documentation

Clone the repository and run cd ark-circom/ && cargo doc --open

Add ark-circom to your repository

[dependencies]

ark-circom = { git = "https://github.com/gakonst/ark-circom.git" }

Example

// Load the WASM and R1CS for witness and proof generation
let cfg = CircomConfig::<Bn254>::new(
    "./test-vectors/mycircuit.wasm",
    "./test-vectors/mycircuit.r1cs",
)?;

// Insert our public inputs as key value pairs
let mut builder = CircomBuilder::new(cfg);
builder.push_input("a", 3);
builder.push_input("b", 11);

// Create an empty instance for setting it up
let circom = builder.setup();

// Run a trusted setup
let mut rng = thread_rng();
let params = generate_random_parameters_with_reduction(circom, &mut rng)?;

// Get the populated instance of the circuit with the witness
let circom = builder.build()?;

let inputs = circom.get_public_inputs().unwrap();

// Generate the proof
let proof = prove(&params, circom, &mut rng)?;

// Check that the proof is valid
let pvk = process_vk(&params.vk)?;
let verified = verify_with_processed_vk(&pvk, &inputs, &proof)?;
assert!(verified);

Running the tests

Tests require the following installed:

  1. solc. We also recommend using solc-select for more flexibility.
  2. ganache-cli

Features

Known limitations

Currently, due to an issue in our upstream (https://github.com/wasmerio/wasmer/issues/4072), this crate works as expected only up to Rust version 1.67.0; in newer Rust versions, wasmer is currently unsound.

Acknowledgements

This library would not have been possibly without the great work done in:

Special shoutout to Kobi Gurkan for all the help in parsing SnarkJS' ZKey file format.