| Crates.io | rust-witness |
| lib.rs | rust-witness |
| version | 0.1.6 |
| created_at | 2024-07-22 20:49:44.588455+00 |
| updated_at | 2025-08-13 10:11:09.067407+00 |
| description | Build a circom witness in Rust |
| homepage | https://github.com/chancehudson/rust-witness |
| repository | https://github.com/chancehudson/rust-witness.git |
| max_upload_size | |
| id | 1311927 |
| size | 921,681 |
A crate to natively generate circom witnesses in Rust. This crate transpiles the wasm witness generator to C then provides macros to easily invoke the C functions.
rust-witness as a dependency and a build dependency. Add paste as a dependency.build.rs that looks like the following:use rust_witness::transpile::transpile_wasm;
fn main() {
// This function will recursively search the target directory
// for any files with the `wasm` extension and compile
// them to C and link them
transpile_wasm("my/path/to/wasm/");
}
use rust_witness::witness;
// Use this macro to generate a function that can be
// used to build a witness for the target circuit
//
witness!(circuitname);
// The name should be the name of the wasm file all lowercase
// with all special characters removed
//
// e.g.
// multiplier2 -> multiplier2
// keccak_256_256_main -> keccak256256main
// aadhaar-verifier -> aadhaarverifier
//
fn build_proof() {
let inputs: HashMap<String, Vec<BigInt>>;
// The generated function will be the name of the circuit
// followed by _witness
let witness = circuitname_witness(inputs);
}
Clone the repo then run the following command in the repo directory:
cargo test
By default this package will build w2c2 from source if the binary is not in your $PATH. This can be slow when developing and rebuilding frequently. To install w2c2 to your cargo bin run the following:
sh ./install_w2c2.sh
transpile_wasm will automatically use the w2c2 in your $PATH if possible.