ZK-Identity (Semaphore) : Private Identity Claim System by minting a NFT

ZK-Identity (Semaphore): Private Identity Claim System by minting a NFT

Proposal Overview

Authenticating one’s identity through a public Ethereum Address severely restricts privacy. Thus, crypto users might want to prove that they are eligible to join or partake in specific activities without revealing one’s public address or public keys. Protocols are motivated to support the actions from the user side since they might want to distribute an airdrop through off-chain activities.

Imagine you request to get an airdrop, but it immediately leaks your previous financial history since it is associated with your public identity. You want to join DAO voting but someone prevents to do that since you had voted against the administrator of the DAO. Sounds crazy, right?

Let us solve this problem by enabling users to claim airdrops anonymously while proving one’s identity (i.e. one has an NFT) without revealing their public keys or address.

Only the pre-arranged, registered address sets can mint an NFT, which is designated by the manager when deploying the contract. The pre-registered address can mint an NFT to prove the identity. We provide the features for both sides, the manager to deploy the contract with a set of pre-registered addresses. Managers can also register/unregister users by manipulating the contract’s Merkle tree. The user who has a pre-registered address, to mint an NFT to another account using a private key.

Use Cases

  • Minting an NFT for anonymous-based crypto games like DarkForest
  • To hide your account when you cast a vote for the argument or against it.

Competitive Landscape

We have a similar project done by Koh Wei Jie called OneOfUs that gives private voting project on Ethereum using zero-knowledge proof. However, it seems defunct. There is a hackathon project for helping users to claim their status in-game by minting an NFT, done by jefflau. However, when cloning the project, it seems not to work though.

Proposal Ask

zk-Identity will be established to be community-driven and self-funded by its DAO. To bootstrap its primary features, two developers are now being involved.

To get this up and running, we will be requesting the $15k/year stable basic income to take care of initial development, welfare, and operation costs.

This ask will be in line with the laid down milestones as detailed below:

  1. launching a feature-complete product on our testnet
  2. forming a DAO with 5-out-of-9 multisig
  3. launching on mainnet with audit (with full features till August 2022)
  4. attracting 1k daily active users (with launch video, full PR promotion to Korea landscape)
  5. attracting 10k daily active users (with a detailed roadmap, and governance process, to Asia landscape)


We are a bit slow in progress, however, are motivated and dedicated to successfully launching the project.

Currently deployed version 2 has a set of whitelisted addresses. In version 3, we will provide a manager page to deploy address by just clicking a button with delivering a set of approved addresses. Managers can also add a new address or delete an existing address from the contract’s Merkle tree. Final Version 3 will be deployed to Harmony Mainnet.

Objective Date Status
Testnet Launch 30 April 2022 Done
Beta Testing and Fixes 5 May 2022 Done
Mainnet Launch v1 (built with Circom, Polygon ) 10 May 2022 Done
Mainnet Launch v2 (built with Semaphore, Polygon) 23 May 2022 Done
Mainnet Launch v3 (Manager Options to be added, Harmony) 31 July 2022 Pending
Final Smart Contract Audit 30 Aug 2022 Pending

External Links


Is there a reason why this is currently launched only on the Polygon network but not Harmony? I would love to test it out but I don’t have tokens on Polygon for the gas fee.

@socathie the reason is not that sophisticated. I am a fan of AllThatNode from DSRV provider service but it does not support Harmony mainnet / testnet yet so that I have used polygon instead.

But faucet is only for testnet right? Do you have a version that works with Polygon testnet? Seems like current version only detects Polygon mainnet

@socathie sorry for misunderstanding, it only supports testnet faucet now (it closed mainnet faucet btw)
Ive worked with polygon mainnet for mainnet launch submission.

I can re-deploy using Harmony mainnet of course if you want to test it

In order to get the grant approved, the product has to be at least launched on Harmony testnet for all the governors to test it out. Would be nice if you can launch on Harmony testnet for now.

ok then. we are now fine-tuning frontend so that after that we will launch it with harmony mainnet. :slight_smile: