ExitWeb2 is a prototype for porting communities onto Ethereum.
Here's how something like this can be used:
- A community is created based on some web2 shared state (e.g. members of r/ethereum, follower of @ethereum on Twitter, geth Github contributor)
- Prospective members submit a link to prove their membership
- Trusted admin manually verify the membership to the web2 community
- Approved members be able to mint an NFT without linking their web2 profile to their Ethereum address
- NFT owners of the community have access to a private group chat (eventually coordinate actions like fundraise, distribute tokens, form a DAO)
Bootstrapping web3 communities (for the purpose of targeting users for your product or fundraising, etc.) often involves airdropping tokens.
Bootstrapping process often involves using a product like guild.xyz or simply asking users to "drop your ENS" directly on Twitter. This works, but exposes the link between the NFT and your Twitter/Discord/etc. profile
If we can obfuscate the link between the web2 profile and the Ethereum address, you can have truly pseudonymous identities that can speak credibly without fear of risk to reputation. As these tokens are composable bits of your identity, you can also have varying degrees of pseudonymity.
See "the Pseudonymous Economy".
This project borrows heavily from Sam Ragsdale's zkp-merkle-airdrop project. When a prospective member submits their proof-of-membership link, a commitment is made and stored both on the client's web browser (localStorage) and the web server. When the admin decides the proof-of-membership matches the predicate for the community specified, the commitment gets included in a merkle tree. A transaction is then submitted to update root of the merkle tree on the Ethereum smart contract (one transaction can be submitted after all approvals in bulk).
The user is then able to mint the NFT without exposing the link to their profile by generating a zkSNARK that proves that they know the secret commitment that is contained in the merkle root.
This project makes a huge compromise. Users must trust the admin, as they are able to see all of the submitted membership proof links. However, the admin still cannot trace the link between a particular NFT and the web2 profile of the person who redeemed the token. This is obviously a big trust assumption, but I'm yet not aware of any solution to completely private airdrops based on web2 communities without a trusted party.
Inspired by the following:
- zkp-merkle-airdrop - private airdrops using zkp
- HeyAnon - attaching pseudonymous reputation to speech
- 0xPARC - applied zkp innovation
- From the root directory, run
yarn
to install dependencies. - Download the
.env
file and place it atpackages/www/.env
. - Then run
yarn www dev
, and go to http://localhost:3000/.
It's hosted on a Heroku instance at https://exitweb2.herokuapp.com/. You will need to use the admin secret (environment variable HASURA_GRAPHQL_ADMIN_SECRET) to login to the console.