You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
$6.3 trillion is lost to corporate fraud annually. Yet 84% of whistleblowers face retaliation, and traditional reporting systems offer zero privacy guarantees.
Current "anonymous" hotlines are fundamentally broken:
Current Solutions
The Reality
📞 Hotlines
Caller ID, voice recognition, IP logging
📧 Anonymous Emails
Metadata exposure, server-side access
🌐 Blockchain
All data permanently public
🏢 Internal Reporting
HR has full access, retaliation risk
Whistleblowers need more than anonymity—they need cryptographic certainty.
✨ The Solution: Bounzy
Bounzy leverages Fully Homomorphic Encryption (FHE) to create the first truly confidential whistleblower bounty system where:
🔒 For Whistleblowers
Evidence hashes encrypted before submission
Severity ratings hidden from everyone
Bounty amounts revealed only to claimant
Burner wallet support for maximum anonymity
🏢 For Compliance Officers
Create fraud reporting campaigns
Review encrypted evidence metadata
Approve/decline with on-chain audit trail
Fund bounty pools in ETH
What Makes Bounzy Different
Traditional Blockchain Bounzy with FHE
═══════════════════════ ═══════════════════
📝 Submit Evidence 📝 Submit Evidence
↓ ↓
[Data visible to ALL] [Data encrypted with FHE]
↓ ↓
Anyone can see: Only authorized parties see:
• Who submitted • Campaign owner: severity
• Evidence contents • Submitter: their bounty
• Bounty amounts • Contract: nothing (it computes
on encrypted data!)
🎬 Demo
Complete User Journey
Step
Actor
Action
FHE Magic
1
🏢 Compliance Officer
Creates campaign with encrypted minimum severity threshold
euint8 threshold stored
2
🕵️ Whistleblower
Submits encrypted evidence hash + severity rating
euint256 + euint8 encrypted client-side
3
🏢 Compliance Officer
Requests decryption, reviews severity
KMS reveals severity only to campaign owner
4
🏢 Compliance Officer
Validates evidence, sets encrypted bounty
euint64 bounty stored
5
🕵️ Whistleblower
Claims bounty with KMS proof
ETH transferred, identity never revealed
🏗️ How It Works
sequenceDiagram
participant W as 🕵️ Whistleblower
participant F as 🌐 Frontend
participant C as 📜 Bounzy Contract
participant K as 🔐 Zama KMS
participant V as 🏢 Validator
rect rgb(40, 40, 60)
Note over W,V: Phase 1: Campaign Creation
V->>F: Set name, threshold, duration, fund pool
F->>F: Encrypt threshold (euint8)
F->>C: createCampaign(encryptedThreshold, ETH)
C->>K: Store encrypted threshold with permissions
end
rect rgb(40, 60, 40)
Note over W,V: Phase 2: Evidence Submission
W->>F: Upload file, set severity, add description
F->>F: Hash file (SHA-256) → encrypt hash + severity + desc
F->>C: submitEvidence(euint256, euint8, euint256, proof)
C->>K: Grant decrypt permissions to campaign owner
end
rect rgb(60, 40, 40)
Note over W,V: Phase 3: Validation
V->>C: requestSeverityDecryption(evidenceId)
C->>K: Flag handle as publicly decryptable
V->>K: publicDecrypt(severityHandle)
K-->>V: clearValue + decryptionProof
V->>F: Set bounty amount
F->>F: Encrypt bounty (euint64)
V->>C: validateEvidence(severity, proof, encryptedBounty)
C->>C: Verify KMS signature ✓
end
rect rgb(60, 60, 40)
Note over W,V: Phase 4: Bounty Claim
W->>C: requestBountyDecryption(evidenceId)
W->>K: publicDecrypt(bountyHandle)
K-->>W: bountyAmount + decryptionProof
W->>C: claimBounty(amount, proof)
C->>C: Verify proof, transfer ETH 💰
C-->>W: Bounty received!
end
Loading
🔬 FHE Implementation
Encrypted Data Types
Bounzy uses 4 distinct FHE types for comprehensive privacy:
Type
Size
Usage
Why Encrypted?
euint8
8-bit
Severity rating (1-10)
Prevents gaming the system
euint8
8-bit
Minimum threshold
Hidden bounty criteria
euint64
64-bit
Bounty amount (wei)
Private rewards
euint256
256-bit
Evidence file hash
Proof without exposure
euint256
256-bit
Description preview
Encrypted context
Client-Side Encryption
// Using @zama-fhe/relayer-sdk for browser encryptionimport{createInstance,SepoliaConfig,initSDK}from"@zama-fhe/relayer-sdk/web";// Initialize FHE instanceawaitinitSDK();constfhevm=awaitcreateInstance(SepoliaConfig);// Create encrypted input with multiple valuesconstinput=fhevm.createEncryptedInput(contractAddress,userAddress);input.add256(fileHash);// Evidence hashinput.add8(severity);// Severity ratinginput.add256(descriptionBigInt);// Encrypted descriptionconst{ handles, inputProof }=awaitinput.encrypt();// Submit to smart contractawaitcontract.submitEvidence(campaignId,handles[0],// bytes32: encrypted hash handlehandles[1],// bytes32: encrypted severity handle handles[2],// bytes32: encrypted description handleinputProof// bytes: ZK proof of valid encryption);
On-Chain Verification
// Bounzy.sol - Validate evidence with KMS prooffunction validateEvidence(
uint32evidenceId,
uint8severityClear, // Decrypted value from KMS
externalEuint64 bountyInput, // New encrypted bountybytescalldatainputProof,
bytescalldata decryptionProof // KMS signature
) external {
Evidence storage e = evidences[evidenceId];
// Verify the decryption came from Zama KMSbytes32[] memory handles =newbytes32[](1);
handles[0] = FHE.toBytes32(e.severity);
FHE.checkSignatures(handles, abi.encode(severityClear), decryptionProof);
// Set encrypted bounty amount
e.bountyAmount = FHE.fromExternal(bountyInput, inputProof);
e.status = EvidenceStatus.VALIDATED;
// Grant bounty access to submitter only
FHE.allow(e.bountyAmount, e.submitter);
}