Skip to content

Latest commit

 

History

History
390 lines (341 loc) · 13.8 KB

File metadata and controls

390 lines (341 loc) · 13.8 KB

📁 Privacy-Preserving Donation - File Structure

Complete File Tree

stellar-app-os/
│
├── 📄 package.json                              [MODIFIED] - Added ZK dependencies
│
├── 📚 DOCUMENTATION (Root Level)
│   ├── 📄 PRIVACY_IMPLEMENTATION_README.md      [NEW] - Implementation guide
│   ├── 📄 IMPLEMENTATION_SUMMARY.md             [NEW] - What was built
│   ├── 📄 QUICK_START_GUIDE.md                  [NEW] - 5-minute quick start
│   ├── 📄 FINAL_DELIVERY_SUMMARY.md             [NEW] - Complete delivery summary
│   └── 📄 FILE_STRUCTURE.md                     [NEW] - This file
│
├── 📁 docs/
│   ├── 📄 PRIVACY_PRESERVING_DONATIONS.md       [NEW] - Technical deep dive
│   ├── 📄 ARCHITECTURE_DIAGRAM.md               [NEW] - Visual architecture
│   └── 📄 TESTING_GUIDE.md                      [NEW] - Testing strategies
│
├── 📁 lib/
│   │
│   ├── 📁 zk/                                   [NEW FOLDER]
│   │   ├── 📄 types.ts                          [NEW] - ZK proof type definitions
│   │   ├── 📄 crypto.ts                         [NEW] - Cryptographic utilities
│   │   └── 📄 prover.ts                         [NEW] - ZK proof generation
│   │
│   └── 📁 stellar/
│       └── 📄 anonymous-donation.ts             [NEW] - Anonymous transaction builder
│
├── 📁 hooks/
│   └── 📄 useAnonymousDonation.ts               [NEW] - Anonymous donation hook
│
├── 📁 components/
│   │
│   ├── 📁 molecules/
│   │   │
│   │   ├── 📁 AnonymousDonationToggle/          [NEW FOLDER]
│   │   │   └── 📄 AnonymousDonationToggle.tsx   [NEW] - Privacy toggle component
│   │   │
│   │   ├── 📁 ZKProofGenerator/                 [NEW FOLDER]
│   │   │   └── 📄 ZKProofGenerator.tsx          [NEW] - Proof generation UI
│   │   │
│   │   └── 📁 AnonymousPaymentSection/          [NEW FOLDER]
│   │       └── 📄 AnonymousPaymentSection.tsx   [NEW] - Anonymous payment flow
│   │
│   └── 📁 organisms/
│       ├── 📁 DonorInfoStep/
│       │   └── 📄 DonorInfoStep.tsx             [MODIFIED] - Added anonymous toggle
│       │
│       └── 📁 PaymentStep/
│           └── 📄 PaymentStep.tsx               [MODIFIED] - Added anonymous section
│
└── 📁 app/
    └── 📁 api/
        └── 📁 transaction/
            └── 📁 submit-anonymous/              [NEW FOLDER]
                └── 📄 route.ts                   [NEW] - Anonymous donation API

File Categories

🔐 Core ZK Proof System

lib/zk/
├── types.ts       (150 lines) - Type definitions
├── crypto.ts      (180 lines) - Cryptographic operations
└── prover.ts      (280 lines) - Proof generation & verification

Purpose: In-browser zero-knowledge proof generation
Dependencies: snarkjs, @noble/hashes, @noble/curves
Key Functions:

  • generateAnonymousDonationProof() - Generate ZK proof
  • verifyAnonymousDonationProof() - Verify proof validity
  • generateNonce() - Create random nonce
  • generateDonationCommitment() - Create commitment
  • generateNullifier() - Create nullifier

⛓️ Blockchain Integration

lib/stellar/
└── anonymous-donation.ts (220 lines)

Purpose: Build and submit anonymous transactions
Dependencies: @stellar/stellar-sdk
Key Functions:

  • buildAnonymousDonationTransaction() - Build anonymous tx
  • buildNullifierRegistrationTransaction() - Register nullifier
  • isNullifierUsed() - Check nullifier status
  • estimateAnonymousDonationCost() - Calculate costs

🎨 UI Components

components/molecules/
├── AnonymousDonationToggle/
│   └── AnonymousDonationToggle.tsx (180 lines)
├── ZKProofGenerator/
│   └── ZKProofGenerator.tsx (200 lines)
└── AnonymousPaymentSection/
    └── AnonymousPaymentSection.tsx (250 lines)

Purpose: User interface for anonymous donations
Features:

  • Beautiful purple-themed UI
  • Real-time progress indicators
  • Expandable information panels
  • Dark mode support
  • Fully accessible (WCAG AA)

🪝 React Hooks

hooks/
└── useAnonymousDonation.ts (220 lines)

Purpose: Manage anonymous donation state and flow
Provides:

  • Proof generation state
  • Transaction submission
  • Error handling
  • Cost estimation
  • Nullifier checking

🌐 API Endpoints

app/api/transaction/submit-anonymous/
└── route.ts (150 lines)

Purpose: Server-side proof verification and submission
Endpoints:

  • POST /api/transaction/submit-anonymous - Submit donation
  • GET /api/transaction/submit-anonymous - Check nullifier

📚 Documentation

Root Level:
├── PRIVACY_IMPLEMENTATION_README.md    (500 lines)
├── IMPLEMENTATION_SUMMARY.md           (400 lines)
├── QUICK_START_GUIDE.md               (350 lines)
├── FINAL_DELIVERY_SUMMARY.md          (450 lines)
└── FILE_STRUCTURE.md                  (This file)

docs/:
├── PRIVACY_PRESERVING_DONATIONS.md    (600 lines)
├── ARCHITECTURE_DIAGRAM.md            (400 lines)
└── TESTING_GUIDE.md                   (500 lines)

File Relationships

Dependency Graph

UI Components
    ↓
useAnonymousDonation (hook)
    ↓
lib/zk/prover ←→ lib/stellar/anonymous-donation
    ↓                    ↓
lib/zk/crypto      @stellar/stellar-sdk
    ↓
@noble/hashes
@noble/curves

Data Flow

User Input
    ↓
AnonymousDonationToggle
    ↓
DonorInfoStep (stores anonymous flag)
    ↓
PaymentStep
    ↓
AnonymousPaymentSection
    ↓
useAnonymousDonation
    ↓
lib/zk/prover (generate proof)
    ↓
lib/stellar/anonymous-donation (build tx)
    ↓
API: /submit-anonymous (verify & submit)
    ↓
Stellar Blockchain

Lines of Code Summary

┌─────────────────────────────────────────────────────┐
│              LINES OF CODE BREAKDOWN                 │
├─────────────────────────────────────────────────────┤
│                                                      │
│  Core Logic (lib/):                                 │
│    ├── lib/zk/types.ts              ~150 lines     │
│    ├── lib/zk/crypto.ts             ~180 lines     │
│    ├── lib/zk/prover.ts             ~280 lines     │
│    └── lib/stellar/anonymous-donation.ts ~220 lines│
│                                      ─────────      │
│                                      ~830 lines     │
│                                                      │
│  UI Components (components/):                       │
│    ├── AnonymousDonationToggle.tsx  ~180 lines     │
│    ├── ZKProofGenerator.tsx         ~200 lines     │
│    └── AnonymousPaymentSection.tsx  ~250 lines     │
│                                      ─────────      │
│                                      ~630 lines     │
│                                                      │
│  Hooks (hooks/):                                    │
│    └── useAnonymousDonation.ts      ~220 lines     │
│                                                      │
│  API (app/api/):                                    │
│    └── submit-anonymous/route.ts    ~150 lines     │
│                                                      │
│  Integration (modified files):                      │
│    ├── DonorInfoStep.tsx            +30 lines      │
│    └── PaymentStep.tsx              +50 lines      │
│                                      ─────────      │
│                                      +80 lines      │
│                                                      │
│  ═══════════════════════════════════════════════   │
│  TOTAL IMPLEMENTATION:               ~1,910 lines   │
│  ═══════════════════════════════════════════════   │
│                                                      │
│  Documentation:                                     │
│    ├── PRIVACY_IMPLEMENTATION_README.md ~500 lines │
│    ├── IMPLEMENTATION_SUMMARY.md        ~400 lines │
│    ├── QUICK_START_GUIDE.md            ~350 lines │
│    ├── FINAL_DELIVERY_SUMMARY.md       ~450 lines │
│    ├── FILE_STRUCTURE.md               ~300 lines │
│    ├── PRIVACY_PRESERVING_DONATIONS.md ~600 lines │
│    ├── ARCHITECTURE_DIAGRAM.md         ~400 lines │
│    └── TESTING_GUIDE.md                ~500 lines │
│                                         ─────────   │
│                                         ~3,500 lines│
│                                                      │
│  ═══════════════════════════════════════════════   │
│  TOTAL PROJECT:                      ~5,410 lines   │
│  ═══════════════════════════════════════════════   │
└─────────────────────────────────────────────────────┘

File Status Legend

  • [NEW] - Newly created file
  • [MODIFIED] - Existing file with additions
  • [NEW FOLDER] - New directory created

Quick Navigation

Want to understand the system?

→ Start with QUICK_START_GUIDE.md

Want technical details?

→ Read docs/PRIVACY_PRESERVING_DONATIONS.md

Want to see the architecture?

→ Check docs/ARCHITECTURE_DIAGRAM.md

Want to test it?

→ Follow docs/TESTING_GUIDE.md

Want to deploy?

→ See PRIVACY_IMPLEMENTATION_README.md

Want to review code?

→ Start with lib/zk/prover.ts

File Sizes (Approximate)

Small (< 100 lines):
  - None

Medium (100-200 lines):
  ├── lib/zk/types.ts
  ├── lib/zk/crypto.ts
  ├── lib/stellar/anonymous-donation.ts
  ├── AnonymousDonationToggle.tsx
  ├── ZKProofGenerator.tsx
  ├── useAnonymousDonation.ts
  └── submit-anonymous/route.ts

Large (200-300 lines):
  ├── lib/zk/prover.ts
  └── AnonymousPaymentSection.tsx

Documentation (300-600 lines):
  ├── PRIVACY_IMPLEMENTATION_README.md
  ├── IMPLEMENTATION_SUMMARY.md
  ├── QUICK_START_GUIDE.md
  ├── FINAL_DELIVERY_SUMMARY.md
  ├── FILE_STRUCTURE.md
  ├── PRIVACY_PRESERVING_DONATIONS.md
  ├── ARCHITECTURE_DIAGRAM.md
  └── TESTING_GUIDE.md

Dependencies Added

{
  "dependencies": {
    "snarkjs": "^0.7.5",           // ZK proof generation
    "circomlibjs": "^0.1.7",       // Circom utilities
    "@noble/curves": "^1.7.0",     // Elliptic curve crypto
    "@noble/hashes": "^1.6.1"      // Cryptographic hashing
  }
}

Import Paths

For Components

import { AnonymousDonationToggle } from '@/components/molecules/AnonymousDonationToggle/AnonymousDonationToggle';
import { ZKProofGenerator } from '@/components/molecules/ZKProofGenerator/ZKProofGenerator';
import { AnonymousPaymentSection } from '@/components/molecules/AnonymousPaymentSection/AnonymousPaymentSection';

For Hooks

import { useAnonymousDonation } from '@/hooks/useAnonymousDonation';

For ZK Proof System

import { generateAnonymousDonationProof, verifyAnonymousDonationProof } from '@/lib/zk/prover';
import { generateNonce, generateDonationCommitment } from '@/lib/zk/crypto';
import type { AnonymousDonationProof, ZKProof } from '@/lib/zk/types';

For Stellar Integration

import { buildAnonymousDonationTransaction, isNullifierUsed } from '@/lib/stellar/anonymous-donation';

Git Status

# New files (18 total)
git add lib/zk/types.ts
git add lib/zk/crypto.ts
git add lib/zk/prover.ts
git add lib/stellar/anonymous-donation.ts
git add hooks/useAnonymousDonation.ts
git add components/molecules/AnonymousDonationToggle/AnonymousDonationToggle.tsx
git add components/molecules/ZKProofGenerator/ZKProofGenerator.tsx
git add components/molecules/AnonymousPaymentSection/AnonymousPaymentSection.tsx
git add app/api/transaction/submit-anonymous/route.ts
git add docs/PRIVACY_PRESERVING_DONATIONS.md
git add docs/ARCHITECTURE_DIAGRAM.md
git add docs/TESTING_GUIDE.md
git add PRIVACY_IMPLEMENTATION_README.md
git add IMPLEMENTATION_SUMMARY.md
git add QUICK_START_GUIDE.md
git add FINAL_DELIVERY_SUMMARY.md
git add FILE_STRUCTURE.md

# Modified files (3 total)
git add package.json
git add components/organisms/DonorInfoStep/DonorInfoStep.tsx
git add components/organisms/PaymentStep/PaymentStep.tsx

# Commit
git commit -m "feat: implement privacy-preserving donations with zero-knowledge proofs

- Add ZK proof generation system (Groth16)
- Implement anonymous transaction builder
- Create privacy-preserving UI components
- Add API endpoint for anonymous donations
- Integrate with existing donation flow
- Add comprehensive documentation (7 guides)
- Zero TypeScript errors
- WCAG AA accessible
- Dark mode support
- Responsive design"

📁 File Structure Complete!

Use this guide to navigate the implementation and understand how all pieces fit together.