Platform › Rewards › Shop

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.

Version
1.0
Updated
2026-10-14
Source
THD contract sources · THD contracts — design reference, parts 1 and 2 · THD — Full Plan v3.45

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 kinds
ShopOpened byPriced inContract
Platform shopExists from deployment (shop id 0)THD onlyItemMall; listings run by a dedicated manager through PlatformShopDesk
Creator shopA launch’s creator, openShop(currency)The creator’s own launch token, once it has graduated. One shop per token. THD can never be oneItemMall
Band shopA band, run by its current leader (read live, so a new leader runs it)ETH or a listed raise currencyBandShopMall
Milestone shopA launch’s creator, openMilestoneShop(launchId), no feeThe launch’s fundraise currencyItemMall 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#

Every shop receipt: currency, destination, and whether it meters
ReceiptCurrencyDestinationMetered?
Platform shop saleTHDBurned with burnFrom, supply re-readNo
Streak protectorTHDBurned, supply re-readNo
Creator shop saleThe shop’s launch tokenBurned with burnFrom, supply re-read. The shop owner receives nothingNo
Band shop saleETH or a listed raise currencyBandVault, credited to the band and paid to its members with the monthly band rootNo
Shop opening fee — creator or bandETH — the SHOP_OPENING price in PricingRules, 1 ETH on productionMarketing treasury, directNo
Featured slotETHMarketing treasury, directNo
Milestone saleThe launch’s fundraise currency25% creator · 25% protocol treasury, direct · 50% season potNo — never the splitter, in any currency
How a band is paid from BandVault
Currency creditedPaid to members
THD and Hood launch tokensVest over 90 days
ETH and other currenciesIn full, after the band root’s 24-hour veto window
Expired allocationsReturn 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).

Milestone sale rules
RuleValue
Packages per walletOne per milestone
MILESTONE_WALLET_CAP_BPS200 — at most 2% of the token’s supply per package
MIN_FLASHBACK_VEST90 days — the shortest vest a package may be sold on
Price floorNever below the reserve’s milestone price less its milestone discount
code
// 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 currency

The 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.

ShopFeatureDesk
PropertyValue
SlotsMAX_SLOTS 5, sold by the hour
Price$1 per hour (SHOP_FEATURE in PricingRules), paid in ETH at the posted ETH/USD price
BookingStarts on a whole UTC hour, lasts 1 to MAX_BOOKING_HOURS (24) hours. One slot per shop in any hour. Not refundable
Book aheadUp to 30 days on production (settable from 1 to 90 days)
PaymentForwarded to the marketing treasury in the booking transaction; the desk holds nothing

How a price is computed, and the one discount#

code
// 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.

Exactly one discount ever applies
ConditionDiscountrule
A milestone packageThe milestone’s own discount, from the reserve’s terms. Never premiumMILESTONE
Any other item, premium buyermallPremiumDiscountBps — 2500, 25% on production, in every shop. The seller bears itPREMIUM
OtherwiseNoneLIST

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.