0.1.40 β’ Published 6 months ago
@zkthings/proof-membership-evm v0.1.40
@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
Trusted Setup
- Multiple participants required
- Secure randomness for contributions
- Verify ceremony completion
Contract Deployment
- Audit generated verifier
- Test thoroughly on testnet
- Monitor gas costs
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