# Private community

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](https://github.com/NearSocial/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.&#x20;

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](https://github.com/zkcrypto/bulletproofs) 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.&#x20;

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.&#x20;

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vself-project.gitbook.io/vself-project-documentation/community-management-toolkit/private-community.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
