DEV Community

Mechon70x7
Mechon70x7

Posted on

ZK-ID: Privacy-First Identity Verification

Midnight Network Challenge: Protect That Data

This is my submission for the Midnight Network "Privacy First" Challenge

This tutorial shows how to set up, run, and verify the ZK-ID DApp for the "Protect That Data" challenge. It also demonstrates how the identity attestation works using mocked zero-knowledge proofs.


🔨 What I Built

ZK-ID is a decentralized identity verification DApp that allows users to prove who they are without revealing sensitive personal information.

By leveraging zero-knowledge proofs and privacy-first design, users can authenticate themselves securely while keeping their data safe from exposure.

🎥Demo

GitHub Repo: [https://github.com/Mechon70x7/zk-id.git]

🛠️ How I Used Midnight's Technology

This project integrates Midnight’s Compact language and SDK to:

Implement private smart contracts for identity validation.

Use confidential transactions to ensure sensitive data never leaves the user’s control.

Provide auditable yet private interactions, balancing compliance with security.

🔒 Data Protection as a Core Feature

Privacy isn’t an afterthought—it’s built into the architecture:

Zero-Knowledge Proofs allow verification without exposing raw data.

Selective Disclosure ensures users control exactly what they share.

On-chain privacy guarantees that no sensitive identity data is stored publicly.

1️⃣ Project Setup

Clone the Repository

git clone <your-repo-url>
cd zk-id-frontend
Enter fullscreen mode Exit fullscreen mode

Install Dependencies

npm install
Enter fullscreen mode Exit fullscreen mode

Start the Development Server

npm run dev
Enter fullscreen mode Exit fullscreen mode

Deploy contracts using Midnight SDK (see /contracts folder).

Interact with the DApp via the frontend.

Open your browser at http://localhost:5173 to see the app.


2️⃣ User Interface Overview

Initial Input Form

  • User enters User ID (e.g., Alice)
  • User enters Birth Year (e.g., 2000)

Generate Proof button triggers verification.


3️⃣ Proof Generation and Verification

3.1 Enter User Information

  • User ID: Alice
  • Birth Year: 2000

3.2 Click Generate Proof

Console log shows the internal steps:

Submit clicked
User ID: Alice
Birth Year: 2000
Current Year: 2025
Proof result: { valid: true }
Submitting proof to contract... Alice true
Verified status: true
Enter fullscreen mode Exit fullscreen mode

3.3 Display Verification Status

Identity Verified (age ≥ 18)

  • Message displayed: ✅ Identity Verified

Identity Not Verified (age < 18)

  • Change birth year to 2010
  • Click Generate Proof
  • Message displayed: ❌ Identity Not Verified

4️⃣ Multi-User Support

The app supports multiple users independently:

  • User 1: Alice → 2000 → Verified ✅
  • User 2: Bob → 2010 → Not Verified ❌

Console shows separate proof results for each user.


5️⃣ Running Unit Tests

Run all tests to verify logic:

npm run test
Enter fullscreen mode Exit fullscreen mode

Tests include:

  • Single user verification
  • Multi-user verification
  • Age ≥ 18 / Age < 18 scenarios

👥 Team / Credits

Built by @mechon70x7

8️⃣ Notes for Reviewers

  • Privacy-Preserving Mechanism: Birth year input remains private; proof generation is mocked.
  • Zero-Knowledge Concept: generateProof() simulates ZK verification; no real-world value is used.
  • Multiple Users: Each user is verified independently, demonstrating decentralized handling in UI.

!!THANKS!!

Top comments (0)