Leveraging Solana’s Scalability, and automating Token Distribution
You came up with a good blockchain startup idea, raised a few million dollars in VC funding through SAFTs (Simple Agreement for Future Tokens). You negotiate vesting schedules and token valuation. You don’t want liquidity to be released so quickly so you have a 36 months vesting period for seed round investors and 32 months for private rounds. How do you get tokens to their wallet safely and efficiently?
It is popular for projects to create a token claim site where investors can claim their tokens as it’s vested. The advantage here is that the investors pay transaction fees. But it would be more efficient to just send it to the investors everyday, but is that financially feasible? Let’s discuss this.
Here at Only1, say we have over 900 addresses to send tokens to everyday for 3 years. If we were to do this over there in ETH town, assuming a conservative $10 transaction fee, it would cost us approximately $10M on transaction fees alone.
On Solana, with it’s $0.00025 transaction fee, it would cost us $250. This is why the future of Web3 social and metaverses need to be on a scalable blockchain such as Solana.
Distribution through a Solana program
Probably the most obvious option — deploy a Solana program that is going to transfer to a whitelisted address vested tokens on a transaction. On top of that, you will need a simple one-button page for claiming functionality.
Users will pay a transaction fee but you’ll have to pay the deployment fee and all the transaction fees for any update of the vesting schedule (new round, change of a wallet address, etc).
The main disadvantage here is that the solution is not flexible if your vesting schedule is complicated, for example, like on this chart:
Another problem you might face is when the number of your investors is rather high. If one of the investors is a DAO it’s nearly a thousand wallets. You’ll have to think about where you would keep vesting schedules for each one of them and what’s the update process if something has changed (address, for example).
Claim through multiple signatures
Another option that might look more flexible is claiming process through the authorizer’s signature. Vesting wallet private key is stored on a server (preferably through a secret storage solution like AWS Secret Manager). A user creates a transaction to claim tokens and the server verifies that this particular user is eligible for this transaction. If it’s positive, the server signs this transaction with a vesting wallet key. In this scenario, the transaction has 2 signatures and the User is specified as a fee payer.
This approach gives us way more flexibility to create different schedules and scenarios. But because transaction needs to be signed on different computers, you will have to deal with durable nonces which requires another nontrivial solution.
Solana is great. It’s fast, it’s extremely cheap to send transactions and it is stable enough to do it on a daily basis. You might think that you’ll have to pay a lot for transaction fees if you decide to go with airdrop. Well, just take a look at one of Only1 vesting wallets’ stats below:
If you want to get similar stats for your wallet you can do it at https://fees.solar/
86k transaction cost us just 97$. That is a lot of transactions! Luckily we’re on Solana, phew. Time-wise, a basic implementation can take only 30 minutes. Some things you need to keep in mind if you decide to stick with airdrop:
- Log everything.
- Send in batches. By doing so you will not get blocked if you’re using the official mainnet-beta endpoint and all recipients will receive transactions at the same time (within 10 minutes).
- Don’t use WebSockets to wait for confirmation.
- Check a few minutes after the transaction is sent if the transaction is confirmed. If not — send it again.
- Set it up to run in the cloud on a schedule: once a day/week/month. Ideally, you don’t have to touch it after it’s deployed.
- Maybe before you start execution check previously confirmed transactions on the blockchain that were sent from your vesting wallet.
- Leave an option to change wallet address so the program will combine multiple recipients and consider it as a single one.
- Make a Slack/Telegram bot to notify about the status of this operation and to notify if the vesting wallet is running out of funds.
Airdrop was a definite winner for Only1 because of flexibility and ease of doing any adjustments but every project is different and what works great for us might not go well with your project.
Thanks for reading until the end.
About Dan Lilienblum, CTO
Previously a senior software engineer at Binance and Dash. Has master’s degree in mathematics and used to do math modeling. Later, joined and launched multiple start-ups at an early stage. Has been working in the crypto space since 2017.