spawn-zk-snarks 0.1.5

Zero-knowledge proof library with EVM compatibility
Documentation

spawn-zk-snarks

spawn-zk-snarks is a Rust library that provides a robust implementation of Zero-Knowledge Proofs (ZKPs) using the Groth16 proving system. Built on top of the arkworks ecosystem, it offers both high performance and EVM compatibility.

Features

  • Groth16 Proving System

    • Generate proving and verification keys
    • Create verifiable proofs for given witnesses
    • Verify proofs with the generated verification keys
    • Efficient constraint system implementation
  • Circuit Implementation

    • Arithmetic circuit support
    • Constraint generation
    • Witness computation
    • Flexible circuit configuration
  • EVM Compatibility

    • Generate Solidity verifier contracts
    • EVM-compatible proof format
    • Gas cost estimation
    • Optimized for Ethereum deployment
  • Performance

    • Fast proof generation (~1.35ms)
    • Efficient verification (~0.76ms)
    • Quick EVM conversion (~0.29µs)
    • Benchmarked and optimized

Installation

Add this to your Cargo.toml:

[dependencies]
spawn-zk-snarks = "0.1.4"

Quick Start

use spawn_zk_snarks::{Groth16Setup, ArithmeticCircuit};
use ark_bn254::Fr;
use ark_ff::One;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Setup phase
    let setup = Groth16Setup::new(3, 2)?;

    // Generate proof
    let inputs = vec![Fr::one()];
    let witness = vec![Fr::one(), Fr::one()];
    let proof = setup.prove(&inputs, &witness)?;

    // Verify proof
    let is_valid = setup.verify(&proof, &inputs)?;
    assert!(is_valid);

    // Generate Solidity verifier
    let contract = generate_verifier_contract(&setup.verifying_key)?;

    Ok(())
}

Benchmarks

Performance on M1 MacBook Pro:

proof generation    time:   [1.3244 ms 1.3519 ms 1.3931 ms]
proof verification  time:   [760.30 µs 762.93 µs 765.25 µs]
evm conversion     time:   [289.96 ns 291.12 ns 292.43 ns]
  • For detailed benchmark results, analysis and comparisons, see BENCHMARKS.md.
  • Highlights

    • 2x faster verification than generation
    • Sub-millisecond verification time
    • Nanosecond EVM conversion
    • Competitive gas costs

EVM Integration

// Generate Solidity verifier contract
let contract = generate_verifier_contract(&setup.verifying_key)?;

// Convert proof to EVM format
let proof_bytes = Groth16Setup::proof_to_evm_format(&proof)?;

// Estimate gas cost
let gas = Groth16Setup::estimate_verification_gas(
    proof_bytes.len(), 
    inputs.len()
);

Testing

Run unit tests:

cargo test

Run benchmarks:

cargo bench

Security Considerations

  • Uses the battle-tested Groth16 proving system
  • Built on the arkworks cryptographic library
  • Constant-time operations for core cryptographic functions
  • Regular security audits recommended before production use

License

MIT License. See LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Acknowledgments

  • Built on top of the arkworks ecosystem
  • Uses the BN254 curve implementation from ark-bn254
  • Inspired by various ZKP implementations in the blockchain space

Disclaimer

This library is provided as is, without any security guarantees. Please perform your own security audit before using in production.