0.1.40 β€’ Published 6 months ago

@zkthings/proof-membership-evm v0.1.40

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

@zkthings/proof-membership-evm

Zero-Knowledge Merkle Trees implementation using circom circuits and snarkjs, designed for EVM chains.

πŸš€ Part of the zkSDK ecosystem - Simplified ZK development

⚠️ Early Stage Project: This package is under active development. APIs may change as we improve the implementation.

πŸ”— Need Mina Integration? Check out our Mina Protocol implementation at zkSDK.io

Features

  • 🌳 ZK Merkle Tree with native EVM integration
  • 🌲 Fast off-chain proof generation
  • πŸŽ‹ On-chain verification
  • 🌴 Custom trusted setup support
  • πŸ“¦ Built on circom & snarkjs

Installation

bun add @zkthings/proof-membership-evm
# or
npm install @zkthings/proof-membership-evm

Quick Start

import { ZkMerkleTree } from '@zkthings/proof-membership-evm'

// Create a new ZK Merkle Tree
const zkMerkle = new ZkMerkleTree();

// Add data and generate proof
const values = [β€˜Dragon Tree’, β€˜Olive’ , β€˜Linden’]

const { proof, publicSignals } = await zkMerkle.generateMerkleProof(
  values,
  'Olive'
);

// Verify off-chain (for testing)
const isValidOffChain = await zkMerkle.verifyProofOffChain(proof, publicSignals);

// Export and deploy verifier contract
const verifierContract = await zkMerkle.exportVerifierContract();

Production Usage

Trusted Setup

import { PowerOfTau } from '@zkthings/proof-membership-evm'

// Initialize ceremony
const ceremony = new PowerOfTau(15);  // For trees up to depth 15
const ptauFile = await ceremony.initCeremony();

// Generate production parameters
await ceremony.finalizeCeremony();
await ceremony.finalizeCircuit('MerkleTreeProof');

Production Deployment

// Use custom ceremony output
const zkMerkle = new ZkMerkleTree({
  baseDir: './production-zkconfig',
});

// Deploy verifier contract
const verifierContract = await zkMerkle.exportVerifierContract();

Architecture

πŸ“¦ @zkthings/merkle-evm
β”œβ”€β”€ core/             # Core Merkle Tree implementation
β”œβ”€β”€ circuits/         # Circom circuit definitions
β”œβ”€β”€ contracts/        # Solidity verifier contracts
└── ceremony/         # Trusted setup utilities

Best Practices

Local Development

// Fast local testing
const zkMerkle = new ZkMerkleTree();
const isValid = await zkMerkle.verifyProofOffChain(proof, publicSignals);

Production Setup

// Secure production configuration
const zkMerkle = new ZkMerkleTree({
  baseDir: './production-zkconfig',
  maxDepth: 20
});

Security Considerations

  1. Trusted Setup

    • Multiple participants required
    • Secure randomness for contributions
    • Verify ceremony completion
  2. Contract Deployment

    • Audit generated verifier
    • Test thoroughly on testnet
    • Monitor gas costs
  3. Verification

    • Always verify on-chain in production
    • Use off-chain for testing only
    • Validate all proof components

API Reference

ZkMerkleTree

class ZkMerkleTree {
  constructor(config?: ZkConfig);
  generateMerkleProof(values: string[], valueToProve: string): Promise<ProofData>;
  verifyProofOffChain(proof: Proof, publicSignals: PublicSignals): Promise<boolean>;
  exportVerifierContract(): Promise<string>;
}

PowerOfTau

class PowerOfTau {
  constructor(depth: number);
  initCeremony(): Promise<string>;
  finalizeCeremony(): Promise<void>;
  finalizeCircuit(name: string): Promise<void>;
}

Contributing

PRs welcome! Check our Contributing Guide.

Support

License

MIT Β© zkThings