Skip to content

Latest commit

Β 

History

History
553 lines (419 loc) Β· 13.9 KB

File metadata and controls

553 lines (419 loc) Β· 13.9 KB

πŸ”— HelixChain Smart Contracts

Zero-knowledge proof circuits for genomic privacy on Midnight blockchain

πŸ’‘ Purpose

In response to the 23andMe breach where millions of genetic profiles were permanently exposed and sold on the dark web, HelixChain's smart contracts ensure that genomic verification happens without ever exposing raw genetic data. Our Midnight blockchain contracts use zero-knowledge proofs to verify genetic traits while keeping the actual genomic sequences private forever.

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Contract Layer                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Compact Language β”‚ ZK Circuits β”‚ ProofSDK                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Verification Circuits                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  BRCA1 Circuit β”‚ BRCA2 Circuit β”‚ CYP2D6 Circuit            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Storage Layer                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Genome Commitments β”‚ Proof Registry β”‚ Access Control      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Event System                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  VerificationComplete β”‚ ProofSubmitted β”‚ AccessGranted     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start

Prerequisites

  • Node.js 20 LTS
  • Midnight Compact Compiler (compactc)
  • Lace Wallet with testnet DUST tokens

Installation

# Navigate to contracts directory
cd contracts

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env
# Edit .env with your configuration

# Compile contracts
npm run build

# Deploy to testnet
npm run deploy:testnet

Environment Configuration

# Network Configuration
MIDNIGHT_NETWORK=testnet
MIDNIGHT_RPC_URL=https://testnet.midnight.network/rpc
MIDNIGHT_EXPLORER=https://explorer.testnet.midnight.network

# Deployment
DEPLOYER_PRIVATE_KEY=your-private-key-here
DEPLOYER_ADDRESS=your-midnight-address

# Contract Settings
MAX_PROOF_SIZE=2048
VERIFICATION_TIMEOUT=30000
CIRCUIT_DEPTH=20

# Development
MOCK_MODE=false
VERBOSE_LOGGING=true

πŸ“ Project Structure

contracts/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ genomic_verifier.compact    # Main contract
β”‚   β”œβ”€β”€ circuits/                   # ZK circuits
β”‚   β”‚   β”œβ”€β”€ brca1.circom           # BRCA1 trait verification
β”‚   β”‚   β”œβ”€β”€ brca2.circom           # BRCA2 trait verification
β”‚   β”‚   β”œβ”€β”€ cyp2d6.circom          # Drug metabolism verification
β”‚   β”‚   └── common/                # Shared circuit components
β”‚   β”‚       β”œβ”€β”€ hash.circom
β”‚   β”‚       β”œβ”€β”€ merkle.circom
β”‚   β”‚       └── range.circom
β”‚   β”‚
β”‚   β”œβ”€β”€ sdk/                        # TypeScript SDK
β”‚   β”‚   β”œβ”€β”€ ProofSDK.ts            # Main SDK interface
β”‚   β”‚   β”œβ”€β”€ EventListener.ts       # Blockchain event monitoring
β”‚   β”‚   β”œβ”€β”€ types.ts               # Type definitions
β”‚   β”‚   └── utils.ts               # Helper functions
β”‚   β”‚
β”‚   └── interfaces/                 # Contract interfaces
β”‚       β”œβ”€β”€ IGenomicVerifier.sol
β”‚       └── IProofRegistry.sol
β”‚
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ deploy.ts                   # Deployment script
β”‚   β”œβ”€β”€ verify.ts                   # Verification helper
β”‚   β”œβ”€β”€ compile.ts                  # Compilation script
β”‚   └── interact.ts                 # Contract interaction
β”‚
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ unit/                       # Unit tests
β”‚   β”‚   β”œβ”€β”€ circuits.test.ts
β”‚   β”‚   └── contract.test.ts
β”‚   β”œβ”€β”€ integration/                # Integration tests
β”‚   β”‚   └── end-to-end.test.ts
β”‚   └── fixtures/                   # Test data
β”‚       └── sample-genomes.json
β”‚
β”œβ”€β”€ build/                          # Compiled artifacts
β”‚   β”œβ”€β”€ genomic_verifier.json      # Contract ABI & bytecode
β”‚   β”œβ”€β”€ circuits/                  # Compiled circuits
β”‚   └── verification_keys/         # ZK verification keys
β”‚
└── deployment.json                # Deployment addresses

πŸ” Smart Contract Details

GenomicVerifier Contract

The main contract that manages genomic trait verification using zero-knowledge proofs.

Key Functions

// Submit genome commitment (Patient)
function commitGenome(
    bytes32 commitment,
    bytes32 encryptedIPFSHash
) external returns (uint256 genomeId)

// Request verification (Doctor)
function requestVerification(
    address patient,
    TraitType trait,
    string calldata reason
) external returns (uint256 requestId)

// Submit proof (Patient)
function submitProof(
    uint256 requestId,
    bytes calldata proof,
    bytes32[] calldata publicInputs
) external returns (bool verified)

// Verify proof on-chain
function verifyProof(
    TraitType trait,
    bytes calldata proof,
    bytes32[] calldata publicInputs
) public view returns (bool)

// Grant access (Patient)
function grantAccess(
    address verifier,
    uint256 genomeId,
    uint256 duration
) external

// Revoke access (Patient)
function revokeAccess(
    address verifier,
    uint256 genomeId
) external

Events

event GenomeCommitted(
    address indexed patient,
    uint256 indexed genomeId,
    bytes32 commitment
);

event VerificationRequested(
    address indexed doctor,
    address indexed patient,
    uint256 requestId,
    TraitType trait
);

event ProofSubmitted(
    uint256 indexed requestId,
    address indexed patient,
    bool verified
);

event AccessGranted(
    address indexed patient,
    address indexed verifier,
    uint256 genomeId,
    uint256 duration
);

ZK Circuits

BRCA1 Circuit

Verifies presence of BRCA1 gene mutations associated with breast cancer risk.

template BRCA1Verifier() {
    signal input genome[GENOME_LENGTH];
    signal input mutation_positions[MAX_MUTATIONS];
    signal input threshold;
    signal output is_positive;

    // Circuit logic for BRCA1 verification
    // Checks for known pathogenic variants
    // Returns 1 if mutation detected, 0 otherwise
}

BRCA2 Circuit

Verifies presence of BRCA2 gene mutations.

template BRCA2Verifier() {
    signal input genome[GENOME_LENGTH];
    signal input mutation_positions[MAX_MUTATIONS];
    signal input threshold;
    signal output is_positive;

    // Circuit logic for BRCA2 verification
}

CYP2D6 Circuit

Verifies CYP2D6 gene variants that affect drug metabolism.

template CYP2D6Verifier() {
    signal input genome[GENOME_LENGTH];
    signal input variant_alleles[MAX_VARIANTS];
    signal output metabolizer_type; // 0: Poor, 1: Normal, 2: Rapid

    // Circuit logic for drug metabolism phenotype
}

πŸ› οΈ Development Tools

Compilation

# Compile all contracts
npm run build

# Compile specific contract
npm run build:genomic-verifier

# Compile circuits
npm run build:circuits

# Watch mode for development
npm run build:watch

Testing

# Run all tests
npm test

# Run unit tests
npm run test:unit

# Run integration tests
npm run test:integration

# Test coverage
npm run test:coverage

# Test specific circuit
npm run test:circuit:brca1

Deployment

# Deploy to testnet
npm run deploy:testnet

# Deploy to mainnet (requires confirmation)
npm run deploy:mainnet

# Verify deployment
npm run verify:deployment

# Upgrade contract (if upgradeable)
npm run upgrade:contract

πŸ“Š ProofSDK Integration

TypeScript SDK Usage

import { ProofSDK } from './sdk/ProofSDK';

// Initialize SDK
const sdk = new ProofSDK(
    contractAddress,
    rpcUrl,
    privateKey
);

// Generate BRCA1 proof
const proof = await sdk.generateBRCA1Proof(
    genomeData,
    mutationThreshold
);

// Submit proof to blockchain
const txHash = await sdk.submitProof(
    requestId,
    proof
);

// Listen for events
sdk.on('ProofVerified', (event) => {
    console.log('Proof verified:', event);
});

Event Monitoring

import { EventListener } from './sdk/EventListener';

const listener = new EventListener(contractAddress, rpcUrl);

// Subscribe to verification events
listener.subscribe('VerificationComplete', (event) => {
    const { requestId, patient, verified } = event;
    console.log(`Request ${requestId}: ${verified ? 'Verified' : 'Failed'}`);
});

// Start monitoring
await listener.start();

πŸ” Circuit Specifications

Performance Metrics

Circuit Constraint Count Proof Generation Time Verification Time Proof Size
BRCA1 450,000 12s 50ms 1.8 KB
BRCA2 460,000 13s 52ms 1.8 KB
CYP2D6 320,000 8s 35ms 1.5 KB

Security Parameters

  • Field Size: 254-bit prime field
  • Hash Function: Poseidon
  • Merkle Tree Depth: 20 levels
  • Commitment Scheme: Pedersen
  • Proof System: Groth16

🚒 Production Deployment

Pre-deployment Checklist

  • Audit smart contracts
  • Verify circuit constraints
  • Test with real genomic data
  • Set up monitoring infrastructure
  • Configure access control
  • Deploy multi-sig wallet
  • Set up emergency pause mechanism

Deployment Steps

  1. Compile and verify contracts
npm run compile:production
npm run verify:bytecode
  1. Deploy to mainnet
npm run deploy:mainnet -- --network mainnet
  1. Verify on explorer
npm run verify:explorer -- --address CONTRACT_ADDRESS
  1. Initialize access control
npm run init:access-control
  1. Set up monitoring
npm run setup:monitoring

πŸ”„ Upgrade Process

Upgrading Circuits

# Update circuit code
vim src/circuits/brca1.circom

# Recompile circuit
npm run compile:circuit:brca1

# Generate new verification key
npm run generate:vkey:brca1

# Deploy new verifier
npm run deploy:verifier:brca1

# Update contract to use new verifier
npm run upgrade:verifier -- --circuit brca1

Contract Upgrades

# Deploy new implementation
npm run deploy:implementation

# Propose upgrade (multi-sig)
npm run propose:upgrade -- --new-impl NEW_ADDRESS

# Execute upgrade (after approval)
npm run execute:upgrade -- --proposal-id ID

πŸ› Troubleshooting

Common Issues

Circuit compilation fails

# Check Circom version
circom --version

# Clear build cache
rm -rf build/circuits
npm run build:circuits

Proof generation timeout

# Increase timeout in config
export PROOF_GENERATION_TIMEOUT=60000

# Use optimized witness generation
npm run optimize:witness

Contract deployment fails

# Check account balance
npm run check:balance

# Verify network connection
npm run test:rpc

# Use manual gas settings
npm run deploy:testnet -- --gas-price 20 --gas-limit 8000000

πŸ“ˆ Gas Optimization

Gas Costs (Testnet)

Operation Gas Used Cost (DUST)
Commit Genome 85,000 0.0085
Submit Proof 280,000 0.028
Verify Proof 185,000 0.0185
Grant Access 45,000 0.0045

Optimization Strategies

  • Batch proof verifications
  • Use events instead of storage where possible
  • Optimize circuit constraints
  • Implement proof aggregation

πŸ”’ Security Considerations

Best Practices

  • Never expose private inputs to circuits
  • Use secure randomness for commitments
  • Implement rate limiting for proof submissions
  • Regular security audits
  • Monitor for unusual activity
  • Implement circuit-breaking mechanisms

Audit Reports

🀝 Contributing

See CONTRIBUTING.md for development guidelines.

Development Workflow

  1. Fork the repository
  2. Create feature branch
  3. Write tests first (TDD)
  4. Implement changes
  5. Run full test suite
  6. Submit pull request

πŸ“š Resources

Documentation

Examples

πŸ“„ License

MIT License - see LICENSE for details.


Built on Midnight blockchain to ensure genetic data never gets exposed again

Zero-knowledge proofs for permanent genomic privacy