FestFund:私人捐款与公众认可——一种零知识筹款解决方案
这是为Midnight Network “隐私优先”挑战赛——“保护数据”主题提交的作品。
注意:术语“捐赠者”和“贡献者”可以互换使用,含义相同,即“产生零知识点的价值增值方”。
我建造的
FestFund解决了筹款领域最棘手的难题之一:如何在保护捐赠者隐私和公开表彰之间做出选择。我利用Midnight Network的零知识基础设施,构建了一个平台,该平台能够完全保护捐赠金额、交易记录、钱包地址、姓名等重要参数的隐私,同时保持公开排行榜和里程碑跟踪功能的可验证性。
提出的创新方案:在不泄露个人捐款金额的情况下,通过加密技术证明筹款进度——使隐私和透明度能够协同运作,并确保数字(未显示)有效(使用生成的承诺)。
演示
🌐 在线前端: https://festfund.vercel.app/
📋 注意:在线演示展示了完整的 UI/UX,但智能合约功能通过 Hardhat 在本地运行,以确保项目零成本。完整的区块链功能可在本地开发环境中使用。使用 Hardhat 区块链创建钱包。因此,由于合约尚未部署到真正的区块链上,已部署的服务(Vercel 前端和 Koyeb 后端)目前无法正常工作。它目前仅作为一个高级框架——您需要在本地运行才能获得完整的体验。
🎥 演示视频(两个视频内容相同,请忽略我有时语速较快以及视频中途出现的错误,这些错误已在几分钟内解决,但为了节省时间,相关部分已被剪掉):
📂 GitHub 仓库: ARYPROGRAMMER/FestFund
我如何运用我喜欢的 Midnight's Technology 的功能
性能: Midnight Network 将 ZK 证明生成时间从 418 毫秒缩短到 1 毫秒,提高了 418 倍。
核心集成:
- 午夜测试网-02 RPC:通过实时 ZK 操作
https://rpc.testnet-02.midnight.network - 官方 SDK:
@midnight-ntwrk/zswap用于加密原语的软件包 - 双架构:在 Midnight Network 和自托管模式之间自动切换
高层架构图
实现代码片段:
// Real Midnight Network integration
const zkProof = new ZKProofIntegration();
await zkProof.initialize("midnight-network");
// Generate private commitment (1ms with Midnight vs 418ms self-hosted)
const commitment = await zkProof.generateDonationCommitment(
amount,
donorSecret,
eventId,
minimumAmount
);
Midnight 的预优化电路和生产基础设施简化了设置,同时提供了企业级可靠性和全面的文档。我之前使用的是 PowerSoftAU (8),在相同的零知识证明 (ZKP) 条件下,其延迟为 430 毫秒(最大值)。而 Midnight 的延迟仅为 3 毫秒(最大值极少出现),并且根据我的测试,安全性更高。
平台截图及制作/调试过程:
数据保护作为一项核心功能
FestFund 的基础架构以隐私保护为核心,采用最强大的加密算法,确保:
🔒零知识隐私:
- 使用零知识承诺对个人捐款金额进行加密隐藏。
- 平台管理员无法访问原始捐赠数据。
- 无效化保护可防止双重支付,但不会透露金额(有争议,在这种情况下,每个钱包地址只允许使用一次)。
🏆 透明的问责制:
- 公开排行榜显示捐赠者排名,但不显示捐赠金额(捐赠者在捐赠时可以选择此参数)。
- 里程碑式的进展可通过密码学证明进行验证。
- 竞选组织者在保护个人隐私的同时,可以获得汇总数据。
实际影响:
- 允许对敏感事业(政治、医疗、争议性)进行私人捐赠。
- 通过透明的排名来维护对捐赠者的认可。
- 通过数学上可证明的隐私保护来确保符合监管要求。
设置说明/教程
先决条件:
- Node.js 18+、MongoDB、MetaMask 钱包 / Hardhat
快速入门:
# Clone repository
git clone https://github.com/ARYPROGRAMMER/FestFund.git
cd FestFund
# Hardhat (new terminal, root dir, precompiled in github)
npx hardhat node
npm run deploy
# Backend setup
cd backend && npm install && npm start
# ✅ Backend: http://localhost:3001
# Frontend setup (new terminal)
cd ../frontend && npm install && npm run dev
# ✅ Frontend: http://localhost:3000
环境配置 [开发]:
# Backend .env can be ignored , backend can take from root
root .env:
NODE_ENV=development
APP_URL=http://localhost:3000
USE_MOCK_MODE=true
PORT=3001
BACKEND_URL=http://localhost:3001
CORS_ORIGIN=http://localhost:3000,http://localhost:3001
NEXT_PUBLIC_BACKEND_URL=http://localhost:3001
NEXT_PUBLIC_APP_NAME=FestFund
NEXT_PUBLIC_APP_DESCRIPTION=Privacy-First Donation Platform
NEXT_PUBLIC_USE_MOCK_WALLET=true
NEXT_PUBLIC_ENABLE_ANALYTICS=false
NEXT_PUBLIC_ENABLE_NOTIFICATIONS=true
NEXT_PUBLIC_DEFAULT_THEME=light
MONGODB_URI=&appName=
JWT_SECRET=your-super-secret-jwt-key-change-for-production
BCRYPT_SALT_ROUNDS=12
GEMINI_API_KEY=
NEXT_PUBLIC_BLOCKCHAIN_RPC=http://localhost:8545
NEXT_PUBLIC_CHAIN_ID=31337
PRIVATE_KEY=7c60d2cd7f18a7891ae8b169f2fdf082d44206acf9c331e81113343537b81fd0
NEXT_PUBLIC_FUND_MANAGER_ADDRESS=0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
NEXT_PUBLIC_VERIFIER_ADDRESS=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
NEXT_PUBLIC_MOCK_ERC20_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
ZK_MODE=midnight-network
NEXT_PUBLIC_ZK_MODE=midnight-network
ZK_CIRCUIT_PATH=./zk/circuits
ZK_PROVING_KEY_PATH=./zk/build/proving_key.zkey
ZK_VERIFICATION_KEY_PATH=./zk/build/verification_key.json
ZK_CIRCUIT_WASM_PATH=./zk/build/donation_commitment_v1.wasm
VERIFIER_CONTRACT_PATH=./contracts/Verifier.sol
MIDNIGHT_RPC_URL=https://rpc.testnet-02.midnight.network
MIDNIGHT_INDEXER_URL=https://indexer.testnet-02.midnight.network/api/v1/graphql
MIDNIGHT_INDEXER_WS_URL=wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws
MIDNIGHT_NETWORK_ID=TestNet
MIDNIGHT_WALLET_SEED=your_64_character_hex_seed_here_or_mnemonic_phrase
NEXT_PUBLIC_MIDNIGHT_RPC_URL=https://rpc.testnet-02.midnight.network
NEXT_PUBLIC_MIDNIGHT_NETWORK_ID=TestNet
NEXT_PUBLIC_MIDNIGHT_EXPLORER_URL=https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.testnet-02.midnight.network
ENABLE_LOGGING=true
# My Frontend .env.local
NEXT_PUBLIC_BACKEND_URL=http://localhost:3001
NEXT_PUBLIC_APP_NAME=FestFund
NEXT_PUBLIC_APP_DESCRIPTION=Privacy-First Donation Platform with Zero-Knowledge Proofs
NEXT_PUBLIC_CHAIN_ID=31337
NEXT_PUBLIC_ENABLE_ANALYTICS=false
NEXT_PUBLIC_ENABLE_NOTIFICATIONS=true
NEXT_PUBLIC_BLOCKCHAIN_RPC=http://localhost:8545
NEXT_PUBLIC_FUND_MANAGER_ADDRESS=0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
NEXT_PUBLIC_VERIFIER_ADDRESS=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
NEXT_PUBLIC_MOCK_TOKEN_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
NODE_ENV=development
ZK集成测试:
- 创建活动 → 进行私人捐赠 → 观察 1 毫秒零知识证明生成
- 查看排行榜 → 无需付费即可查看排名
- 验证里程碑式的成就是否已通过密码学方法证实
架构: Next.js 前端,Express.js API,MongoDB 持久化,Circom 电路与 Midnight Network 集成,Hardhat 智能合约。
用心打造,献给午夜网络社区——Arya Singh
更多详情/疑问,请发送电子邮件至arya.2023ug1104@iiitranchi.ac.in
文章来源:https://dev.to/aryprogrammer/festfund-private-contributions-public-recognition-a-zero-knowledge-fundraise-solution-g79






