Existing raffle toolings such as Premint are used by multiple NFT projects nowadays to distribute allowlists, however they expose several problems.
Privacy concern. The association among the Twitter account, Discord account and wallet are exposed to the platform as well as a lot of projects.
Biased selection. The projects tend to select the users who have higher number of followers on Twitter, or who have more Ethereum in wallets as the raffle winners, as these people tend to bring more benefits to the project than ordinary users.
To solve the privacy and fairness issues, we are using Mina to build a privacy-preserving and fair raffle tooling for all of the web3 projects who have the demand to do whitelist raffling.
We use Mina Protocol mainly to build this ZK-powered raffle tool.
The main goal we want to achieve is, users are able to join the raffle after they meet certain requirements. However the projects wouldn't be able to know what's the wallet address for people who join the raffle (so they cannot select those wallets with higher balance), but instead, they will only be able to select from an array of the wallet hash. After the selection, each user is able to check if they win the raffle.
To achieve this, we need to maintain a list of wallet hash which might be tens of thousands of, and it's hard to store all of them on-chain. Therefore we use the Merkle Tree API provided by Mina protocol to just store the root of Merkle Tree (commitment) on-chain, but store the entire array of wallet hash in off-chain storage.
When a user checks if they win the raffle, we just easily check if the hash of their wallet is part of the Merkle Tree. With in the process, the projects have no way to know what are the wallets they select from the raffle.