Lootboxes
Two lootbox systems exist, deliberately separate:- The DUST/stock lootbox (serverless
/api/lootbox) — pays DUST points and real tokenized-stock drops. - The LootBox NFT (
LootBoxNFT.sol,/api/lootbox-nft) — boxes are themselves tradable NFTs; reveals are signature-committed on-chain.
1. The stock-drop lootbox
Price: 0.001 ETH (LOOTBOX_PRICE_ETH) sent as a plain ETH transfer to the pool
address. Payment is verified on-chain (to == pool, value == price, not seen before),
so there are no orphan payments and no double-claims.
Prize table (verbatim from serverless/lootbox.js)
Weights sum to exactly 10000. The STOCK DROP tier always delivers a real listed
share slice — pool ETH is swapped into one of the listed xStocks (AAPL, NVDA, TSLA,
SPACEX…) and sent to the winner, never plain ETH, so win feeds can show
”📈 AAPL drop” and the prize is a visible, ownable asset.
The stock sprinkle
On top of the table: every DUST winner holds a 1-in-50 chance (LOOTBOX_SPRINKLE_CHANCE) of an extra sprinkle — ~1% of the box price
(SPRINKLE_BPS = 100) into a listed xStock, sent automatically. The winner needs
zero extra prompts.
Why the pool can’t go bankrupt
Prize ETH is paid from the pool’s actual balance, funded by box sales — the pool can never be bankrupted and every prize is always fully paid. If a stock tier hits and the swap fails, the row carries a DUST fallback (dustFallback) so the winner is
never empty-handed.
Money flow per 0.001 ETH box
Share-to-spin — free daily open
One free DUST-prize open per UTC day: share the day’s code publicly (X / Reddit / TikTok), paste the post link, and the server verifies the post actually contains the code via the provider’s public oEmbed API — no API keys, deleted/private posts fail closed. The code is deterministic per UTC day (keccak(pepper : date)), can’t
be pre-farmed, and is the same for everyone (one claim per wallet per day).
2. The LootBox NFT (LootBoxNFT.sol)
Boxes themselves are NFTs that stay tradable until opened; opening is one-shot
and reveals the tier permanently on the same token (no separate prize NFT).
Box kinds & prices
The tier table lives on-chain (
tierForRoll) — anyone can verify the odds
exactly as published; the server derives tiers from the chain, not a copied table.
Flow — three wallet prompts, never more
StardustWheel.claimAward with the same nonce — one nonce, two effects, both
verifiable on-chain.