Skip to content

zkmopro/mopro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Github license GitHub Workflow test Repository top language Commitizen friendly

Mopro: ZK Toolkit for Mobile

Mopro (Mobile Prover) is a toolkit for ZK app development on mobile. Mopro makes client-side proving on mobile simple.

πŸ“– To learn more about mopro, please refer to the documentation at zkmopro.

Repository Structure

This repository contains the following components:

Package Version Description
mopro-ffi Uses UniFFI to generate bindings for ZK provers (currently: Circom, Halo2, and Noir). It includes build scripts that eliminate the need for manual setup when integrating with iOS and Android.
mopro-cli A command-line tool that makes it easy to scaffold ZK projects using selected proving systems and target platforms. Currently supports: Swift (Xcode), Kotlin (Android Studio), React Native, Flutter and Web.
circom-prover A Rust-based Groth16 prover for Circom. It supports multiple witness generators (rust-witness, witnesscalc, and circom-witnesscalc) and provers (arkworks, rapidsnark). It is designed to work across devices including desktop, iOS, and Android.
tests End-to-end test examples for verifying integrations for mopro-ffi.
docs The source for zkmopro.org, containing up-to-date documentation.

🎯 Mopro Kanban board

All tasks related to the Mopro implementation are public. You can track their progress, statuses, and additional details in the Mopro Kanban.

πŸ“± Getting started

To get started with building a mobile app using Mopro, check out the Getting Started guide and ensure you’ve installed all required prerequisites.

πŸ›  Install

Clone this repository:

git clone https://github.com/zkmopro/mopro.git

πŸ“œ Usage

Code quality and formatting

Run Rustfmt to automatically format the code.

cargo fmt --all

Run rust-clippy to catch common mistakes and improve your Rust code.

cargo clippy --all-targets --all-features

circom-prover

To test all witness generators and proof generators:

cd circom-prover
cargo test --all-features

To run with specific witness generator and/or proof generator

cd circom-prover
cargo test --features witnesscalc --features rapidsnark

Important

To learn more about circom-prover, please visit circom-prover

mopro-ffi

To test the wasm bindings with wasm-pack test

wasm-pack test --chrome --headless -- --all-features

Important

To learn more about mopro-ffi, please visit mopro-ffi

mopro-cli

To install the CLI

cd cli
cargo install --path .

Important

To learn more about mopro-cli, please visit cli

tests

iOS

  • Update bindings for iOS

    cargo run --bin ios

    or

    mopro build # with mopro CLI

    and choose iOS.

Android

  • Update bindings for Android

    cargo run --bin android

    or

    mopro build # with mopro CLI

    and choose Android.

Flutter

  • Update bindings for Flutter

    cargo run --bin flutter --no-default-features --features flutter

    or

    mopro build # with mopro CLI

    and choose flutter.

React Native

  • Update bindings for React Native

    cargo run --bin react_native

    or

    mopro build # with mopro CLI

    and choose react-native.

Web

  • Update bindings for wasm

    cargo run --bin web --no-default-features --features wasm

    or

    mopro build # with mopro CLI

    and choose web.

docs

  • Install dependencies
    yarn
  • Build for the website
    yarn build
  • Start a server
    yarn start

Performance

Both native circom witness generation and proof generation are generally faster than snarkjs in the browser, with potential speed improvements of up to 20 times. Check the details for circom, halo2, and noir provers here: performance.

Community

  • X account:
  • Telegram group:

Acknowledgements

This work was initially sponsored by a joint grant from PSE and 0xPARC. It is currently incubated by PSE.

Important

We do not accept minor grammatical fixes (e.g., correcting typos, rewording sentences) unless they significantly improve clarity in technical documentation. These contributions, while appreciated, are not a priority for merging. If there is a grammatical error feel free to message the team.