Airdropping to Thousands Without Breaking the Bank
Daniel Pyrathon
Software Engineer at Farcaster • Founder of Bountycaster
Airdropping to Thousands Without Breaking the Bank
We were able to run multiple Solana airdrops and reduced costs by 99%—from ~$1,800 to ~$160 for 3,100+ users—using ZK compressed tokens.
TL;DR:
- Solana airdrops cost ~$20K in rent for 50K users due to rent.
- ZK compression eliminates rent. We paid $160 instead of $1,800 (and could have paid way less too).
- Smart decompression = cost savings + good UX
The Problem
Every Solana token account needs rent—about 0.002 SOL ($0.40 when we ran our last airdrop) per recipient. Doesn't sound like much until you do the math. At Farcaster, we run campaigns that reward users with tokens. Airdropping to 50k users is 100 SOL ($20,000) in rent alone. Before transaction fees. We needed a way to airdrop at scale without burning money.
The Solution
Thanks to @slokh for recommending Light Protocol uses ZK compression to store token state in Merkle trees instead of individual accounts (no accounts = no rent).
The numbers:
| Approach | Cost per user | 3,100 users | 50,000 users |
|---|---|---|---|
| Traditional SPL | ~$0.40 (rent) | ~$1,800 | ~$20,000 |
| ZK Compressed | ~$0.05 (fees only) | ~$160 | ~$2,500 |
That's a 90-99% reduction depending on scale.
The UX Dilemma
Here's the catch: most Solana wallets don't support compressed tokens too well, and neither does Farcaster's wallet. Users need to "decompress" them into standard SPL tokens before trading or using DeFi - which creates a lot of confusion and friction for users.
- Force users to decompress themselves? creates an extra step that is confusing and creates friction for users.
- Leave them compressed forever? creates a bad UX because user's can't send/swap/stake the tokens until they decompress them.
We needed a smarter approach.
Adaptive Decompression
We check the user's wallet balance and adapt:
if (walletBalance >= RENT_THRESHOLD) {
// Power user - decompress now for seamless UX
await decompressTokens({ wallet, mint, immediate: true });
} else {
// New user - they'll decompress when they fund their wallet
await notifyUserOfCompressedTokens(wallet);
}
Power users (wallets with SOL) get decompressed tokens right away. New users get their tokens too—they just decompress later when they're ready. We pay no rent at all and let the user decompress on their schedule. The key insight: compressed tokens are fully owned by the recipient. They decompress on their schedule, not ours.
Making It Reliable
Production systems need more than clever compression. We built in:
Idempotency: Deterministic workflow IDs mean the same airdrop request always maps to the same execution. Click "claim" 10 times? You still get one airdrop.
Retry logic: Exponential backoff + jitter handles RPC outages without hammering providers.
Simulation: We simulate every transaction before submission.
Results
After deploying this system:
- 3,102 users received tokens across 4,539 transactions
- $160 total cost vs ~$1,800 with traditional methods
- Zero duplicates despite network issues and retries
- Sub-second claims for users with funded wallets
The system survived campaign launches with thousands of concurrent claims, RPC outages, and deployments—without losing track of a single airdrop.
What We Learned
Cost optimization ≠ bad UX. Adaptive decompression gives you both. Don't accept the tradeoff.
Idempotency is non-negotiable. In airdrop systems, duplicates are unforgivable. Build deterministic IDs from day one.
Simulate before you send. Catching errors before on-chain submission saves money and gives better error messages.
If you're building on Solana and airdrop costs are killing your margins, compressed tokens are worth exploring. Light Protocol has been pretty easy to use in production thanks to Helius's RPC (not Helium lol), and the savings change what's economically viable.
For implementation details, check out the Light Protocol docs.