zkDrop
To motivate this construction, we must map out the current landscape of public crypto airdrops. To encourage participation in their protocol, blockchain-based projects typically send out free ERC-20 tokens to early adopters and active participants in their community. This system of distributing ERC-20 tokens for governance purposes (i.e. token-voting mechanism) is flawed. Participating in these airdrop events requires revealing your public wallet address (i.e. public key), and thereby doxxing your financial history associated with your public identity. Linking your public metamask address to a web3 platform reveals everything about yourself, since your public address is a gateway to publicly available transaction history on the blockchain. Consider, for example, if a protocol decides to blacklist your address from being eligible for an airdrop based on your DAO voting history? This warranted a system enabling users to claim airdrops completely anonymously, without revealing their public keys. Additionally, the private airdrop system incorperates a lottery system on top as another layer, allowing for verifiable randomness and fairness mechanisms for drawing lottery winners. This lottery system would allow an airdroper to specify the percentage of users who would be eligible for an airdrop.
The zero knowledge aspect comes from the fact that proof verification happens without associating the collectors address to the commitment they provided. The collector can prove to the contract that they know the key/secret pair corresponding to a commitment without revealing which commitment they’re associated with.
Application Type
zkDao
Proposal Overview
Within the scope of this proposal, the goal is to implement the following components:
-
Frontend for users to set up their own private lotteries using their own funds and parameters. Currently, the service is centralized and implements a single lottery. The lottery is broken up into an official lottery and sample demo lottery.
-
Expand the functionality and documentation of the frontend that instructs users how to set up their own lotteries. Documentation will be hosted on GitBook.
-
Expand system to incorporate a simple reputation service meeting certain on-chain requirements (i.e. checking whether users have more than 10 ONE in their wallet). This requires a combination of semaphores and/or some external oracle service (trusted third-party entity) verifying the validity of the on-chain information before creating the proof. This system would replace the current mechanism for collecting commitments, which is submitted through a centralized provider like Github Gist.
Use Case
Conduct a private airdrop system with a lottery service where users can retrieve ERC-20/ERC-721 airdrops privately without revealing their identity. Private lotteries are essential for applications that reward users on their participation while keeping their identities anonymous.
Competitive Landscape
My application modifies the A16Z core repo (GitHub - a16z/zkp-merkle-airdrop-lib) by modifying and incorporating proxy patterns to the smart contracts and adding a lottery system, implementing ERC-721 (in addition to ERC-20) private airdrops, and interactive NextJS UI. Another competing project includes a more complicated infrastructure that requires two-wallets and ECDSA signature schemes: GitHub - nalinbhardwaj/stealthdrop: Anonymous Airdrops using ZK-SNARKs. Additionally, they both lack reputation service for collecting commitments, which is in the product roadmap.
Proposal Ask
zkDrop is built to be community-driven and self-funded by the DAO. In order to get this up and running, we will be requesting the $15k/year stable basic income to take care of initial development, welfare, and operations costs.
This ask will be in line with the laid down milestones as detailed below
- Launching a feature-complete product on our testnet
- Forming a DAO with 5-out-of-9 multisig with our DAOs
- Launching on our mainnet with audit
- Attracting 1k daily active users (with launch video, full PR promotion)
- Attracting 10k daily active users (with a detailed roadmap, governance process)
Road Map
Objective | Date | Status |
---|---|---|
Testnet launch | April 26th | Done |
Beta Testing and Fixes | May 15th | Done |
Mainnet Launch | May 23rd | Done |
Smart Contract Audit | June 31st | Pending |
External links
Source Code: GitHub - TalDerei/ZKDrop: zkDrop: A Private lottery airdrop system using zero-knowledge proofs to preserve privacy and anonymity
Production Link: https://zk-drop.vercel.app/
Demo Video: Private Airdrops - YouTube
Github Gist: ZKDrop_Claim_Gist.md · GitHub
Mainnet Smart Contracts:
ERC-20 Contract Address: 0xc1D0A7DD443A621BF533Ff58ad9B9B29A1663D0A
NFT Contract Address: 0x317712AD0EEaa0314F2e4C65843E6E16c1B0566F
Lottery Verifier Contract Address: 0x2010b60eF4B67AeA8A7D89839f7F7f4739FB63f8
Private Lottery Clone Contract Address: 0xd7f4315f0ad69858e54e1336b56383efEE2b8e56
Private Lottery Factory Contract Address: 0x1d55C4e6be13250Fe4Ad8E0Fa4CC41D3246768F3
Private Lottery Proxy Contract Address: 0x8a2A73572866383859d9dce07b7A8877C8Ca01fF