What it does
The Airdrop tool fans a single Sui coin out to a list of recipient addresses in one signed transaction. You pick an asset, paste a list of address, amount rows, and the contract distributes the coin atomically — every recipient receives their share inside the same Programmable Transaction Block.
The contract is one generic Move function: airdrop::airdrop::airdrop<T>. You hold the funds until you sign — the tool never custodies your coin. Each PTB is signed by your wallet directly; nothing is escrowed, nothing is delayed.
Atomicity
A PTB is all-or-nothing. If any single transfer inside a batch fails invalid address, integer overflow, gas exhaustion the entire batch reverts. There are no partial drops, no recipients left half-paid, no stuck transactions to clean up.
The composer mirrors this guarantee at the UI layer: every address is validated locally before you sign, every amount is checked against your spendable balance, every batch is sized to fit inside the on-chain cap.
Fee
The platform charges a flat fee in SUI per recipient. The fee is stored on-chain in AirdropPlatform.fee_per_recipient_mist (MIST units; 1 SUI = 10⁹ MIST) — the composer reads the live value on every page load and recomputes your pre-flight strip accordingly.
Fee math: fee_mist = recipients.length × fee_per_recipient_mist. For the current live value (0.001 SUI per recipient), a 250-row airdrop costs 0.25 SUI in fees — paid alongside the gas budget when you sign.
Fees route to a dedicated treasury address (also stored on-chain in AirdropPlatform.treasury_address). The transaction inspector shows you the destination before you sign.
Recipient cap
The contract enforces a per-PTB ceiling via AirdropPlatform.max_recipients. Today that limit is 300. Passing more rows would abort the transaction before the first transfer fires.
Lists larger than the cap aren't rejected by the composer — they're split into sequential batches automatically (see Batching below).
Batching
When your recipient count exceeds the cap, the composer slices the list into ⌈count / cap⌉ equal-sized batches and walks them sequentially. Each batch is its own signed PTB — your wallet will prompt once per batch.
Between batches the composer refetches your wallet's coin objects, so the next batch picks its input coins from the post-tx state. If you start with one large Coin<T> object, the PTB merges it once, splits the exact amount, and returns a leftover that the wallet keeps.
If a mid-flight batch fails, completed batches are retained. The inspector's retry CTA restarts the loop; today it replays from batch one, but the on-chain state from earlier batches is permanent and can't be reversed.
Memo
The optional memo is recorded on-chain in the Airdropped event log as a memo: Option<String>field, capped at 256 chars. Useful for tagging distributions ("May contributor rewards", "Q2 LP rebate") so the activity feed reads as a self- documenting ledger.
The memo is public. It's indexed by the chain and visible to anyone querying the event stream — treat it like a commit message, not like a private note.

Comments
Lines starting with
#or//are dropped before parsing — handy for inline notes when you're iterating on a list:Skipped lines are reported in the parsed-strip count ("3 skipped") so you can confirm the parser saw what you expected.