mirror of
https://github.com/logos-blockchain/logos-blockchain-rust-rapidsnark.git
synced 2026-06-07 11:49:32 +00:00
93 lines
2.8 KiB
Markdown
93 lines
2.8 KiB
Markdown
# Rust Rapidsnark
|
|
|
|
<!-- [](https://crates.io/crates/witnesscalc-adapter) -->
|
|
|
|
This project provides a Rust adapter for compiling and linking [Rapidsnark](https://github.com/iden3/rapidsnark) into a native library for target platforms (e.g., mobile devices). It includes macros and functions to facilitate the integration of proof generation into Rust codebases.
|
|
|
|
## Usage
|
|
|
|
Include the crate in your `Cargo.toml`:
|
|
|
|
```toml
|
|
[dependencies]
|
|
rust-rapidsnark = "0.1.0"
|
|
|
|
[build-dependencies]
|
|
rust-rapidsnark = "0.1.0"
|
|
```
|
|
|
|
It doesn't include the witness generation functions, you need to use one of the following crates to generate the witness:
|
|
|
|
- [rust-witness](https://github.com/chancehudson/rust-witness)
|
|
- [witnesscalc-adapter](https://github.com/zkmopro/witnesscalc_adapter)
|
|
- [circom-witnesscalc](https://github.com/iden3/circom-witnesscalc)
|
|
- [wasmer](https://github.com/wasmerio/wasmer)
|
|
|
|
For example, building witness with `witnesscalc-adapter`:
|
|
|
|
```rust
|
|
witnesscalc_adapter::witness!(multiplier2);
|
|
let json_input_string = "{\"a\": [\"2\"], \"b\": [\"3\"]}";;
|
|
let wtns_buffer = multiplier2_witness(json_input_string).unwrap();
|
|
```
|
|
|
|
### Calculate the proof
|
|
|
|
Calculate the proof by using the `groth16_prover_zkey_file_wrapper` function.
|
|
It will take a `wtns` bytes array like the output of [witnesscalc](https://github.com/0xPolygonID/witnesscalc) or [snarkjs](https://github.com/iden3/snarkjs).
|
|
|
|
```rust
|
|
let zkey_path = "./test-vectors/multiplier2_final.zkey".to_string();
|
|
let proof = rust_rapidsnark::groth16_prover_zkey_file_wrapper(&zkey_path, wtns_buffer).unwrap();
|
|
```
|
|
|
|
### Verify the proof
|
|
|
|
Verify the proof by using the `groth16_verifier_zkey_file_wrapper` function.
|
|
|
|
```rust
|
|
let vkey = std::fs::read_to_string("./test-vectors/keccak256_256_test.vkey.json")?;
|
|
let valid = rust_rapidsnark::groth16_verify_wrapper(
|
|
&proof.proof,
|
|
&proof.public_signals,
|
|
&vkey,
|
|
)?;
|
|
```
|
|
|
|
## Supported platforms
|
|
|
|
### Linux
|
|
|
|
- x86_64 linux
|
|
- arm64 linux
|
|
|
|
### MacOS
|
|
|
|
- aarch64-apple-darwin
|
|
- x86_64-apple-darwin
|
|
|
|
### iOS
|
|
|
|
- aarch64-apple-ios
|
|
- aarch64-apple-ios-sim
|
|
- x86_64-apple-ios
|
|
|
|
### Android
|
|
|
|
- aarch64-linux-android
|
|
- x86_64-linux-android
|
|
|
|
## Uploaded binaries
|
|
|
|
- Rapidsnark artifacts are uploaded [here](https://github.com/vivianjeng/rapidsnark/actions/runs/13075683259)
|
|
|
|
## Community
|
|
|
|
- Website: [zkmopro.com](https://zkmopro.com)
|
|
- X account: <a href="https://twitter.com/zkmopro"><img src="https://img.shields.io/twitter/follow/zkmopro?style=flat-square&logo=x&label=zkmopro"></a>
|
|
- Telegram group: <a href="https://t.me/zkmopro"><img src="https://img.shields.io/badge/telegram-@zkmopro-blue.svg?style=flat-square&logo=telegram"></a>
|
|
|
|
## Acknowledgements
|
|
|
|
- The project is sponsored by [PSE](https://pse.dev/).
|