@orbinum/circuits
v0.4.4
Published
Zero-Knowledge circuits for Orbinum privacy blockchain
Maintainers
Readme
@orbinum/circuits
Zero-Knowledge circuits for Orbinum privacy blockchain. This package contains compiled circuit artifacts for proof generation and verification.
🚀 Installation
npm install @orbinum/circuits📦 Package Contents
This package includes 20 files for 4 circuits (disclosure, transfer, unshield, private_link):
For Each Circuit (disclosure, transfer, unshield, private_link):
{circuit}.wasm- Witness calculator (4 files){circuit}.r1cs- R1CS constraint system — for custom provers / verification (4 files){circuit}_pk.zkey- Proving key for snarkjs (4 files){circuit}_pk.ark- Proving key for arkworks/Rust (4 files)verification_key_{circuit}.json- Verification key for on-chain verification (4 files)
🔧 Usage
With snarkjs (JavaScript/TypeScript)
import { join } from "path";
import { readFileSync } from "fs";
import { getCircuitPaths } from "@orbinum/circuits";
// Get all paths for a circuit
const paths = getCircuitPaths("transfer"); // 'disclosure' | 'transfer' | 'unshield' | 'private_link'
// Load WASM witness calculator
const wasmBuffer = readFileSync(paths.wasm);
// Load proving key (.zkey)
const zkeyBuffer = readFileSync(paths.zkey);
// Load R1CS (e.g. for custom prover or constraint inspection)
const r1csBuffer = readFileSync(paths.r1cs);
// Use with snarkjs for proof generation
// ... snarkjs proof generation code ...With arkworks (Rust)
use std::fs::File;
use ark_circom::read_zkey;
// Load proving key (.ark format)
let mut ark_file = File::open("transfer_pk.ark")?;
let proving_key = read_proving_key(&mut ark_file)?;
// Use for proof generation
// ... arkworks proof generation code ...Verification Keys (On-chain)
import verificationKey from "@orbinum/circuits/verification_key_transfer.json";
// Use for on-chain verification in Substrate runtime
// The JSON contains the verification key in a format ready for the runtime📋 Available Circuits
1. Disclosure (disclosure_*)
Selective disclosure circuit for privacy-preserving attribute revelation.
2. Transfer (transfer_*)
Private token transfer circuit with 2 inputs and 2 outputs.
3. Unshield (unshield_*)
Withdrawal circuit from private pool to public account.
4. Private Link (private_link_*)
Proves linkage between two commitments without revealing their values.
🔗 Related Packages
- @orbinum/proof-generator - High-level proof orchestrator
- @orbinum/groth16-proofs - Arkworks WASM proof generator
💡 Usage Example with @orbinum/proof-generator
import { generateProof, CircuitType } from "@orbinum/proof-generator";
// Proof generator automatically loads circuits from @orbinum/circuits
const result = await generateProof(CircuitType.Transfer, witnessInputs, numPublicSignals);
console.log("Proof:", result.proof);
console.log("Public signals:", result.publicSignals);📄 File Sizes
- WASM files: ~1-3 MB each (witness calculators)
- R1CS files: ~1-5 MB each (constraint systems)
.zkeyfiles: ~0.5-20 MB each (snarkjs proving keys).arkfiles: ~0.2-9 MB each (arkworks proving keys)- Verification keys: ~3-4 KB each (JSON)
Total package size: ~80-90 MB
🔒 Security Notice
⚠️ Important: These circuit artifacts are for testing and development only.
For production deployment, a multi-party trusted setup ceremony is required to generate secure proving/verification keys.
📖 Circuit Specifications
For detailed circuit specifications, constraints, and integration guides:
🐛 Issues
Report issues at: https://github.com/orbinum/circuits/issues
📄 License
GPL-3.0 - See LICENSE
