groth16-proofs 2.1.0

High-performance Groth16 proof generator using arkworks for Orbinum privacy protocol
Documentation

groth16-proofs

High-performance Groth16 proof generator using arkworks for Orbinum privacy protocol

npm version Crates.io License

Efficient Groth16 zero-knowledge proof generator for Orbinum's privacy protocol. Compiles to both native Rust and WebAssembly for maximum flexibility.

🚀 Quick Start

Install

npm/yarn/pnpm (WASM for JavaScript/TypeScript):

npm install @orbinum/groth16-proofs

Rust (Native binary):

[dependencies]
groth16-proofs = "2.0"

Use

JavaScript/TypeScript:

import * as groth16 from '@orbinum/groth16-proofs';
import * as snarkjs from 'snarkjs';

// Initialize WASM
await groth16.default();
groth16.init_panic_hook();

// Calculate witness with snarkjs
const witnessArray = await snarkjs.wtns.exportJson('witness.wtns');

// Generate proof (no conversion needed!)
const result = groth16.generate_proof_from_decimal_wasm(
  5,  // number of public signals
  JSON.stringify(witnessArray),  // direct from snarkjs
  provingKeyBytes
);

const { proof, publicSignals } = JSON.parse(result);

Rust:

use groth16_proofs::generate_proof_from_witness;

let proof = generate_proof_from_witness(&witness, "proving_key.ark")?;

📖 Full guides:

What Is This?

This crate generates 128-byte compressed Groth16 proofs from witness data using the arkworks library. It supports:

  • Performance: ~5-8 seconds per proof
  • Curves: BN254 (Ethereum-compatible)
  • Targets: Native (Rust) + WebAssembly
  • Circuits: Unshield, Transfer, Disclosure
  • WASM Input Format: Decimal witness (snarkjs native)

For interoperability with snarkjs-generated proofs, the WASM API also exposes compress_snarkjs_proof_wasm() to convert pi_a/pi_b/pi_c JSON into arkworks canonical compressed proof bytes (0x..., 128 bytes).

Architecture

┌────────────────────────────────────────────────┐
│ groth16-proofs                                 │
├────────────────────────────────────────────────┤
│                                                │
│  ┌──────────────────────────────────────────┐  │
│  │ Core (src/proof.rs)                      │  │
│  │ - Groth16 proof generation               │  │
│  │ - Arkworks constraint system             │  │
│  └──────────────────────────────────────────┘  │
│                                                │
│  ┌──────────────────┐  ┌───────────────────┐   │
│  │ Native Binary    │  │ WASM Module       │   │
│  │ (Rust)           │  │ (JavaScript)      │   │
│  │ - CLI tool       │  │ - Browser support │   │
│  │ - Fastest        │  │ - Portable        │   │
│  └──────────────────┘  └───────────────────┘   │
│                                                │
│  ┌──────────────────────────────────────────┐  │
│  │ Dependencies (arkworks ecosystem)        │  │
│  │ - ark-bn254, ark-groth16, ark-serialize  │  │
│  └──────────────────────────────────────────┘  │
│                                                │
└────────────────────────────────────────────────┘

Components

Component Location Purpose
proof.rs src/ Core Groth16 generation using arkworks
circuit.rs src/ Circuit wrapper implementing ConstraintSynthesizer
utils.rs src/ Format conversions (decimal ↔ hex ↔ field elements)
wasm.rs src/ WASM FFI bindings and public API re-exports
wasm/snarkjs_proof.rs src/wasm/ snarkjs proof parsing/validation and compression
binary src/bin/ CLI tool for Node.js integration

Features

Multiple Targets: Native + WASM
Fast: 5-8 second proof generation
WASM Decimal-Only API: Direct snarkjs witness input
Type-Safe: Memory-safe cryptography
Well-Tested: 21+ tests included
Automated Release: CI/CD pipeline ready
Zero External Calls: Everything bundled

Development

Quick Commands

make help              # Show all commands
make dev              # Format → Lint → Test
make build            # Build native
make build-wasm       # Build WASM
make build-all        # Build both

See Makefile for all available targets.

Documentation

Performance

Metric Value
Proof Size 128 bytes (compressed)
Generation Time 5-8 seconds
Curve BN254
WASM Bundle 3-5 MB
Native Binary 10-15 MB

Native is 20-30% faster than WASM. Choose based on your deployment target.

Publishing

This crate is published to both registries:

License