Private community

Status: ready to use by the request

Many users don’t take dedicated measures to protect their digital identity and use the same nickname in different contexts: from DeFi platforms to online games. It might be a feature for those who look for such a level of transparency, but definitely a technological gap for those who don’t.

Zero-knowledge proofs (ZKPs) technology is an invaluable building block for self-sovereign identity (SSI) that allows keeping both features in place: usability and privacy. We focus on the onboarding process to DAOs, guilds, and other Web3 communities. The problem we address is the lack of privacy in on-chain-first processes associated with membership, whether it’s participation in councils or investments in IDO.

Our proposal addresses private communities. Users are able to join a community without disclosing their identity. The solution falls into the proof-of-membership category. In this case, the user joins the community (with or without the community owner's approval) and writes her commitment to the commitment list. We store this commitment list inside the community metadata in Social DB. The commitment is hashed using MiMC concatenation of the user's NEAR ID and membership key, which is a random password for a given community.

Membership verification requires members to provide proof with the meaning: "I have the input for one of the commitments in this list". In this case, on-chain data doesn't reveal the member’s identity. We use the Bulletproof algorithm to construct the proof "My commitment contains in this list" and the R1CS circuit to provide the proof "I have an input for this commitment". The combination of these two proofs provides the required proof that can be shown to the third party.

When a new member joins and a new commitment is added to the list, all the existing proofs, calculated before it, become invalid. For this reason, the member should receive the new proof just before the membership verification is started.

There are two functions available for membership verification:

  • Get proof: allows the member to get the proof-of-membership

  • Verify proof: allows everyone to verify the given proof-of-membership

Last updated