Summary
Creators want to reward early community members, run giveaways, or bootstrap a new audience by gifting keys. An airdrop function lets the creator pay the bonding curve price themselves and send keys directly to a list of recipient wallets in a single transaction, without recipients needing to do anything.
Scope
- Add
airdrop_keys(creator_id, recipients: Vec<AirdropEntry>) -> AirdropSummary callable only by the creator
AirdropEntry { address: Address, amount: u32 }
- For each recipient: mint
amount keys at the current bonding curve price and credit their balance
- The creator pays the total XLM cost for all keys across all recipients
- Supply increases by the total airdropped amount, moving the curve normally
- Creator fee is waived on airdrops (creator is paying themselves); protocol fee applies to the total
- Maximum 50 recipients per airdrop call
- Returns
AirdropSummary { total_keys, total_cost, recipient_count }
- Emits
KeysAirdropped { creator_id, total_keys, total_cost, recipient_count, ledger } event
- Per-wallet cap (if set) is enforced for each recipient — recipients already at the cap are skipped and reported in the summary
Acceptance Criteria
ETA: 24 hours
Coordinate on Telegram
Summary
Creators want to reward early community members, run giveaways, or bootstrap a new audience by gifting keys. An airdrop function lets the creator pay the bonding curve price themselves and send keys directly to a list of recipient wallets in a single transaction, without recipients needing to do anything.
Scope
airdrop_keys(creator_id, recipients: Vec<AirdropEntry>) -> AirdropSummarycallable only by the creatorAirdropEntry { address: Address, amount: u32 }amountkeys at the current bonding curve price and credit their balanceAirdropSummary { total_keys, total_cost, recipient_count }KeysAirdropped { creator_id, total_keys, total_cost, recipient_count, ledger }eventAcceptance Criteria
KeysAirdroppedevent emitted with correct summary fieldsUnauthorizedETA: 24 hours
Coordinate on Telegram