Rewards
The shop
The platform shop, creator shops, band shops and milestone sales: what each is paid in, where the money goes, and the one discount.
Status#
One mall, four kinds of shop. None of their receipts is a protocol fee: no shop pays ProtocolFeeSplitter, and nothing bought here moves the THD unlock meter.
The four kinds of shop#
| Shop | Opened by | Priced in | Contract |
|---|---|---|---|
| Platform shop | Exists from deployment (shop id 0) | THD only | ItemMall; listings run by a dedicated manager through PlatformShopDesk |
| Creator shop | A launch’s creator, openShop(currency) | The creator’s own launch token, once it has graduated. One shop per token. THD can never be one | ItemMall |
| Band shop | A band, run by its current leader (read live, so a new leader runs it) | ETH or a listed raise currency | BandShopMall |
| Milestone shop | A launch’s creator, openMilestoneShop(launchId), no fee | The launch’s fundraise currency | ItemMall with LaunchMilestoneReserve |
An item’s effect must be one of six — Cosmetic, Access, Qualifier, Credit, Consumable, Boost. Delivery is a row in itemBalance plus an event: no hook, no minter role, nothing minted.
Streak protectors are sold by StreakProtectorShop at each account’s own price, signed by a dedicated attestor key, paid in THD and burned. The quote names its buyer, expires within MAX_TTL (1 hour), and covers at most MAX_UNITS_PER_QUOTE (6) units.
Where every receipt goes#
| Receipt | Currency | Destination | Metered? |
|---|---|---|---|
| Platform shop sale | THD | Burned with burnFrom, supply re-read | No |
| Streak protector | THD | Burned, supply re-read | No |
| Creator shop sale | The shop’s launch token | Burned with burnFrom, supply re-read. The shop owner receives nothing | No |
| Band shop sale | ETH or a listed raise currency | BandVault, credited to the band and paid to its members with the monthly band root | No |
| Shop opening fee — creator or band | ETH — the SHOP_OPENING price in PricingRules, 1 ETH on production | Marketing treasury, direct | No |
| Featured slot | ETH | Marketing treasury, direct | No |
| Milestone sale | The launch’s fundraise currency | 25% creator · 25% protocol treasury, direct · 50% season pot | No — never the splitter, in any currency |
| Currency credited | Paid to members |
|---|---|
| THD and Hood launch tokens | Vest over 90 days |
| ETH and other currencies | In full, after the band root’s 24-hour veto window |
| Expired allocations | Return to the band — never burned |
No leader can withdraw from BandVault and nobody chooses a recipient: members are paid on the same tithe and volume rule, the same root and the same veto window as the monthly THD band reward. See Bands.
Milestone sales#
A creator sells a confirmed milestone’s tranche of launch tokens as a vested package through buyMilestonePackage(launchId, milestoneIndex, tokenAmount).
| Rule | Value |
|---|---|
| Packages per wallet | One per milestone |
MILESTONE_WALLET_CAP_BPS | 200 — at most 2% of the token’s supply per package |
MIN_FLASHBACK_VEST | 90 days — the shortest vest a package may be sold on |
| Price floor | Never below the reserve’s milestone price less its milestone discount |
// ItemMall._settleMilestoneSale — on the amount actually received
toCreator = received × 2500 / 10_000 // MILESTONE_CREATOR_BPS → the creator
toPlatform = received × 2500 / 10_000 // MILESTONE_PLATFORM_BPS → ProtocolFeeSplitter.treasury(), read live
toSeason = received × 5000 / 10_000 // MILESTONE_SEASON_BPS → SeasonRewardsPool
dust = carried into the next sale in the same currencyThe platform 25% reaches the protocol treasury directly and is never metered: the creator sets the price and the pack size, so a metered leg would let a creator buy meter progress with their own package. The 50% funds the season pot.
Featured slots#
| Property | Value |
|---|---|
| Slots | MAX_SLOTS 5, sold by the hour |
| Price | $1 per hour (SHOP_FEATURE in PricingRules), paid in ETH at the posted ETH/USD price |
| Booking | Starts on a whole UTC hour, lasts 1 to MAX_BOOKING_HOURS (24) hours. One slot per shop in any hour. Not refundable |
| Book ahead | Up to 30 days on production (settable from 1 to 90 days) |
| Payment | Forwarded to the marketing treasury in the booking transaction; the desk holds nothing |
How a price is computed, and the one discount#
// ItemPricing.quote — multiply first, divide once
total = unitPrice * quantity * (10_000 - discount) / (scale * 10_000);One truncation, at the end, in the buyer’s favour. scale is 1 for a countable item and 10 ** decimals for a token package.
| Condition | Discount | rule |
|---|---|---|
| A milestone package | The milestone’s own discount, from the reserve’s terms. Never premium | MILESTONE |
| Any other item, premium buyer | mallPremiumDiscountBps — 2500, 25% on production, in every shop. The seller bears it | PREMIUM |
| Otherwise | None | LIST |
Discounts never stack. Premium buyers also see a listing up to PREMIUM_PREVIEW_WINDOW (7 days) early — sight only; nobody buys before saleStartsAt. With no premium registry set, nobody is premium and everybody pays list price. Premium itself: The battlepass.