Skip to content

Zk-Whistleblowing/front-end

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ZkWhistleBlowing πŸ”’

μ°¨μ„ΈλŒ€ 읡λͺ… λ‚΄λΆ€κ³ λ°œ ν”Œλž«νΌ - Zero-Knowledge Proof 기반 μ•ˆμ „ν•œ 제보 μ‹œμŠ€ν…œ

ZkWhistleBlowing은 Zero-Knowledge 증λͺ… κΈ°μˆ μ„ ν™œμš©ν•˜μ—¬ μ™„μ „ν•œ 읡λͺ…성을 보μž₯ν•˜λŠ” ν˜μ‹ μ μΈ λ‚΄λΆ€κ³ λ°œ ν”Œλž«νΌμž…λ‹ˆλ‹€. 블둝체인과 μ•”ν˜Έν•™μ  증λͺ…을 톡해 제보자의 신원을 μ™„λ²½ν•˜κ²Œ λ³΄ν˜Έν•˜λ©΄μ„œλ„ 제보의 μ§„μœ„μ„±μ„ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.

✨ μ£Όμš” νŠΉμ§•

πŸ›‘οΈ μ™„μ „ν•œ 읡λͺ…μ„±

  • Zero-Knowledge Proof: 신원을 λ…ΈμΆœν•˜μ§€ μ•Šκ³ λ„ μ§μ›μž„μ„ 증λͺ…
  • Merkle Tree 기반 인증: μ‚¬μš©μž λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ 관리
  • Nullifier μ‹œμŠ€ν…œ: 쀑볡 제보 λ°©μ§€ 및 κ°œμΈμ •λ³΄ 보호

πŸ” μ΅œμ²¨λ‹¨ λ³΄μ•ˆ

  • Noir Language: κ³ μ„±λŠ₯ ZK-SNARK 회둜 κ΅¬ν˜„
  • UltraHonk Backend: 효율적인 증λͺ… 생성 및 검증
  • Arbitrum 검증: 블둝체인 μƒμ—μ„œ 증λͺ… 검증

πŸ“‘ λΆ„μ‚° μ €μž₯

  • IPFS 톡합: Pinataλ₯Ό ν†΅ν•œ νƒˆμ€‘μ•™ν™” 파일 μ €μž₯
  • λΆˆλ³€μ„± 보μž₯: 제보 λ‚΄μš©μ˜ μœ„λ³€μ‘° λ°©μ§€
  • 영ꡬ 보쑴: κ²€μ—΄ μ €ν•­μ„± 확보

πŸ—οΈ 기술 μŠ€νƒ

Frontend

  • Next.js 15: React 기반 ν’€μŠ€νƒ ν”„λ ˆμž„μ›Œν¬
  • Turbopack: 고속 개발 ν™˜κ²½
  • Tailwind CSS: λͺ¨λ˜ UI μŠ€νƒ€μΌλ§

Zero-Knowledge

  • Noir: ZK 회둜 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • @aztec/bb.js: UltraHonk λ°±μ—”λ“œ
  • Poseidon Hash: μ•”ν˜Έν•™μ  ν•΄μ‹œ ν•¨μˆ˜

Blockchain

  • Ethers.js: 이더리움 블둝체인 μƒν˜Έμž‘μš©
  • Arbitrum: L2 μ†”λ£¨μ…˜μœΌλ‘œ 검증 λΉ„μš© 절감
  • Hardhat: 슀마트 μ»¨νŠΈλž™νŠΈ 개발 ν™˜κ²½

Database & Storage

  • Better-sqlite3: 둜컬 μ‚¬μš©μž λ°μ΄ν„°λ² μ΄μŠ€
  • IPFS/Pinata: λΆ„μ‚° 파일 μ €μž₯
  • Indexed Merkle Tree: 효율적인 멀버십 증λͺ…

πŸš€ μ‹œμž‘ν•˜κΈ°

ν•„μš”μ‚¬ν•­

  • Node.js 18+
  • npm λ˜λŠ” yarn
  • Git

μ„€μΉ˜ 및 μ‹€ν–‰

  1. μ €μž₯μ†Œ 클둠
git clone https://github.com/Zk-Whistleblowing/front-end.git
cd zkwhistle
  1. μ˜μ‘΄μ„± μ„€μΉ˜
npm install
  1. ν™˜κ²½λ³€μˆ˜ μ„€μ •
cp .env.local.example .env.local

ν•„μš”ν•œ ν™˜κ²½λ³€μˆ˜:

ARBITRUM_RPC_URL=https://sepolia-rollup.arbitrum.io/rpc
VERIFIER_CONTRACT_ADDRESS=0x...
PINATA_JWT=your_pinata_jwt_token
PINATA_GATEWAY=your_pinata_gateway_url
  1. λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”
node db/initDB.js
  1. 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000을 μ—΄μ–΄ ν™•μΈν•˜μ„Έμš”.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

zkwhistle/
β”œβ”€β”€ app/                    # Next.js μ•± λΌμš°ν„°
β”‚   β”œβ”€β”€ api/               # API μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ auth/          # 인증 μ‹œμŠ€ν…œ
β”‚   β”‚   β”œβ”€β”€ generate-zk-proof/ # ZK 증λͺ… 생성
β”‚   β”‚   └── submit-report/ # 제보 제좜
β”‚   β”œβ”€β”€ dashboard/         # λŒ€μ‹œλ³΄λ“œ νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ sign-in/          # 둜그인 νŽ˜μ΄μ§€
β”‚   └── page.js           # 메인 ν™ˆνŽ˜μ΄μ§€
β”œβ”€β”€ circuit/              # Noir ZK 회둜
β”‚   └── circuit.json      # 컴파일된 회둜
β”œβ”€β”€ db/                   # λ°μ΄ν„°λ² μ΄μŠ€
β”‚   └── initDB.js         # DB μ΄ˆκΈ°ν™” 슀크립트
β”œβ”€β”€ utils/                # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚   β”œβ”€β”€ calculate_nullifier.js # Nullifier 계산
β”‚   └── merkleProof.js    # Merkle 증λͺ… 생성
β”œβ”€β”€ public/               # 정적 파일
└── package.json          # ν”„λ‘œμ νŠΈ μ„€μ •

πŸ”§ μ‚¬μš© κ°€λŠ₯ν•œ 슀크립트

개발

npm run dev          # 개발 μ„œλ²„ μ‹œμž‘ (Turbopack)
npm run build        # ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run start        # ν”„λ‘œλ•μ…˜ μ„œλ²„ μ‹€ν–‰
npm run lint         # ESLint 검사

Hardhat (슀마트 μ»¨νŠΈλž™νŠΈ)

npm run hardhat:compile          # μ»¨νŠΈλž™νŠΈ 컴파일
npm run hardhat:test             # ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm run hardhat:node             # 둜컬 λ„€νŠΈμ›Œν¬ μ‹€ν–‰
npm run hardhat:deploy           # μ»¨νŠΈλž™νŠΈ 배포
npm run hardhat:deploy:arbitrum  # Arbitrum에 배포

Noir (Zero-Knowledge)

npm run noir:compile    # ZK 회둜 컴파일

πŸ”„ μž‘λ™ 원리

1. μ‚¬μš©μž 인증

  • 직원이 이메일과 직원 ID둜 둜그인
  • μ‹œμŠ€ν…œμ΄ Merkle Treeμ—μ„œ μ‚¬μš©μž μœ„μΉ˜ 확인
  • μ„Έμ…˜ 생성 및 μΏ ν‚€ μ €μž₯

2. Zero-Knowledge 증λͺ… 생성

// 1. Merkle Proof 생성
const proofData = await generateMerkleProofs(user);

// 2. Noir 회둜둜 증λͺ… 생성
const noir = new Noir(circuitJSON, backend);
const proof = await backend.generateProof(witness);

// 3. Arbitrumμ—μ„œ 검증
const verified = await contract.verify(proof.proof, proof.publicInputs);

3. 제보 제좜

  • IPFS에 제보 λ‚΄μš© μ—…λ‘œλ“œ (Pinata)
  • ZK 증λͺ…κ³Ό ν•¨κ»˜ 제좜
  • λΈ”λ‘μ²΄μΈμ—μ„œ 검증 ν›„ μ €μž₯

4. 읡λͺ…μ„± 보μž₯

  • Nullifier: 동일인 재제보 λ°©μ§€ν•˜λ˜ 신원 λΉ„κ³΅κ°œ
  • Merkle Tree: 전체 직원 λͺ©λ‘ 없이 멀버십 증λͺ…
  • Zero-Knowledge: 신원 정보 μ™„μ „ 뢄리

πŸ” λ³΄μ•ˆ νŠΉμ§•

Privacy by Design

  • 신원 정보와 제보 λ‚΄μš© μ™„μ „ 뢄리
  • ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ μ•”ν˜Έν™”
  • 메타데이터 μ΅œμ†Œν™”

Cryptographic Guarantees

  • Soundness: κ±°μ§“ 증λͺ… λΆˆκ°€λŠ₯
  • Zero-Knowledge: 신원 정보 λˆ„μΆœ μ—†μŒ
  • Completeness: μ •λ‹Ήν•œ μ§μ›μ˜ 증λͺ… 항상 성곡

Blockchain Security

  • λΆˆλ³€μ˜ 검증 기둝
  • νƒˆμ€‘μ•™ν™”λœ 증λͺ… μ €μž₯
  • κ²€μ—΄ μ €ν•­μ„±

🀝 κΈ°μ—¬ν•˜κΈ°

  1. Fork ν”„λ‘œμ νŠΈ
  2. Feature 브랜치 생성 (git checkout -b feature/AmazingFeature)
  3. 변경사항 컀밋 (git commit -m 'Add some AmazingFeature')
  4. λΈŒλžœμΉ˜μ— Push (git push origin feature/AmazingFeature)
  5. Pull Request 생성

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.

πŸ“ž 지원

🎯 λ‘œλ“œλ§΅

  • 닀쀑 μ„œλͺ… 검증 μ‹œμŠ€ν…œ
  • λͺ¨λ°”일 μ•± 개발
  • λ‹€κ΅­μ–΄ 지원
  • κ³ κΈ‰ 뢄석 λŒ€μ‹œλ³΄λ“œ
  • 톡합 μ‹ κ³  μ›Œν¬ν”Œλ‘œμš°

ZkWhistleBlowing: 진싀을 λ³΄ν˜Έν•˜λŠ” 기술, μ•ˆμ „μ„ 보μž₯ν•˜λŠ” μ•”ν˜Έν•™

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors