https://github.com/chancehudson/rust-witness
Generate circom witnesses natively in Rust
https://github.com/chancehudson/rust-witness
circom rust witness zk
Last synced: 5 months ago
JSON representation
Generate circom witnesses natively in Rust
- Host: GitHub
- URL: https://github.com/chancehudson/rust-witness
- Owner: chancehudson
- Created: 2024-06-27T07:28:19.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-02T01:01:43.000Z (6 months ago)
- Last Synced: 2025-04-28T14:05:43.011Z (5 months ago)
- Topics: circom, rust, witness, zk
- Language: Rust
- Homepage:
- Size: 304 KB
- Stars: 9
- Watchers: 2
- Forks: 4
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# rust-witness
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.
## Usage
1. Add `rust-witness` as a dependency and a build dependency. Add `paste` as a dependency.
2. Write a `build.rs` that looks like the following:
```rust
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/");
}
```
3. Compute a witness like the following:
```rust
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>;
// The generated function will be the name of the circuit
// followed by _witness
let witness = circuitname_witness(inputs);
}
```## Setup
Clone the repo then run the following command in the repo directory:
```sh
cargo test
```## Speeding up builds
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
sh ./install_w2c2.sh
````transpile_wasm` will automatically use the `w2c2` in your `$PATH` if possible.