A couple of weeks ago, @dennishlewis approached me about coming up with a way to handle airdrops that would be both quick and efficient. The main goals here were...
- Ensure that airdrops completed successfully, because nothing is worse than telling thousands of people you're going to give them some free coins only to find the transactions still pending days later.
- Control costs, because it is EXPENSIVE to send a couple of tokens to a couple thousand people.
- Make the whole process simple, preferably with a visual tool that doesn't get in the way.
I took this idea and ran with it and the result is FlairDrop, which is both a tool to help people handle airdrops and also it's own crypto currency in order to limit the potential for abuse and spam.
In order to prove the concept I had to perform an airdrop of my own. Since I am working with icosuccess on their sweepstakes for SuchApp tokens I decided to use contest participants as a test bed and send them each 1 FLAIRDROP.
Here is how I did it!
First you need to go to the flairdrop website and acquire some. If your project is small you can ask for some in the replies here and I'll try to fill for you, just tell me the project you're with and how many people you plan to airdrop your tokens to. But you should consider buying some directly from the contract since that supports future development.
Step 1: Go to FlairDrop.net
At the moment I do not have the Upload CSV feature working, let me know you want this feature by purchasing some FlairDrops
Step 2: Click the NEXT button and choose a datasource. This can literally be any ERC20 Token, it is a place to source users, example if you want to target all holders of TRON, put the TRON contract address in. AirDrop Contract is the contract you are dropping tokens from. So basically, this is "find users of datasource, give them tokens from airdrop"
Step 3: Depending on the number of users and the age of the token it may take a few minutes to track down all users and their current holdings. Why current holdings? Because the default mode is "copy", which sends an amount equal to their current balance on the data source contract. There is a limit here I ran into while making the guide, it turns out that truly massive contracts such as EOS, break the tool. If people buy FlairDrop and request support for importing from huge contracts like EOS, I will prioritize that. We know it works with up to 4750 accounts without breaking a sweat.
Step 4: The next step is to configure your settings, as you can see a 1:1 matching airdrop would require 26631 of the tokens being airdropped. In this case I am actually dropping FlairDrop and it accurately reflects I have none available, so I had to buy some, by sending a little money to the FlairDrop contract address. 0.0001 ETH each account you want to send to, but you can send as much of the token being airdropped as you want.
Step 5: I didn't have enough money to send out 26,631 tokens so I decided to change the allowance information. You can see my allowance is currently 0. There is a tickbox that says "Use Imported Table Values", unchecking it will pop the image in Step 6:
Step 6: This is where you customize how many tokens you will be giving each user. I'm handing out 1 token to every user so I just put 1 in the box and hit OK.
Step 7: When I did this there were only 26 unique accounts participating in SPRIZE, so I only needed 26 FlairDrop. This screen is letting me know the tool is about to configure an allowance. An allowance is used to give the contract access to funds instead of performing a transfer of funds to the contract. This was a design choice because if something went wrong it would be difficult for the user to get funds back if we used transfers. That way if anything doesn't work, the user can just cancel the allowance, meaning there's no chance that funds can get lost!
Step 8: The next screen shows MetaMask confirming the action. You can see that I'm about to spend $0.08 USD, this isn't the send yet. It is the act of provisioning an allowance for the contract to use in order handle the airdrop.
Step 9: I like to open Etherscan and watch the transaction occur so I know when the allowance transaction has completed. It's not strictly necessary but the UI on FlairDrop doesn't have much of an indicator for progress. Again this is one of those things that if there is an interest in FlairDrop I'll upgrade the UI.
Step 10: The button changed to say "READY!" and this is of course how you know the allowance is approved and everything is configured correctly.
Step 11: This is just a prompt to give you one last chance to back out!
Step 12: Payment confirmation window. You'll notice there is no money changing hands but a lot of gas.
This looked expensive to me at first. However I wrote it to ensure there is ample gas available as you can see from the actual transaction, we didn't consume anywhere near that much and the remainder ended up returned to my wallet. Actual Tx Cost/Fee: 0.003047874 Ether ($1.40)
Step 13: Again I like to watch these things play out on Etherscan. I'm such a nerd!
Step 14: This is what Etherscan looks like when the whole process is complete. Beautiful isn't it?
That's pretty much it! If you search Etherscan you'll find 2 contracts labeled FlairDrop. The first one is the one I used to create this tutorial. However at the last moment before deploying that contract I decided to add a balance for a faucet of FlairDrop for users who have worthwhile projects, but maybe can't afford the half a penny per user. Unfortunately that faucet was implemented in a rush and the way I implemented it ended up breaking the contract double face palm, so I had to remove it and redeploy. I placed faucet funds on the new contract for anyone who would like to test FlairDrop themselves. However this time I didn't break anything :D
My hope is that larger projects will adopt FlairDrop for facilitating their Airdrop needs, thus reducing congestion on the Ethereum blockchain.
Honestly this product works great for it's intended purpose, it's no nonsense and simple. Yet there are several bugs in the tool / ui that I would like to fix. I just don't have time or resources to do it right now. However if I can see there is interest in improving the tools for working with FlairDrop from customers who buy the tokens, I will gladly get back to work on it.
This has been a massive time sink, and a labor of love for about 2 weeks for which I've received no compensation, but that's the nature of open source in general.
I hope you consider using FlairDrop for your next airdrop, or buying some FlairDrops to support an excellent open source project!