Platform › Rewards › THD claims

Rewards

THD claims

Who may claim THD, when claiming opens, the 90-day vest, the 360-day deadline, and what happens to THD nobody claims.

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

Every THD reward ends as a claim. A person’s THD claim needs a passed claim gate, opens 24 hours after THD’s pool is seeded, vests over 90 days, and closes after 360. THD allocated and never claimed is burned with burn(), and the supply re-read proves it.

Status#

On Robinhood Chain mainnet
ItemStatus
ClaimGateAttestorDeployed
THDMerkleDistributor × 4 (traders, creators, KOLs/referrers, settlers) · ThdRewardVest · ThdDayVest × 2 (battlepass, settlers)Deployed
ClaimingNot openTHD's pool is not seeded (pre-TGE)

Before TGE, rewards accrue and are shown; nothing a person can claim in THD is payable yet.

The claim gate#

code
passes = xConnected && ( earnedWei >= minEarnedWei || spentWei >= minSpentWei )
ClaimGateAttestor
ItemValue
minEarnedWei0.1 ETH lifetime earned — constructor immutable, from money.thdClaimGateMinEarnedWei
minSpentWei0.01 ETH lifetime spent — from money.thdClaimGateMinSpentWei
XAn X account connected to the platform account. Required, not optional
How a pass is recordedThe app measures the figures to a mined block, the attestor key signs them (EIP-712, valid at most MAX_TTL, one hour), and anyone may submit pass(account, proof). The contract re-checks the rule against the signed figures
PermanenceA pass is permanent: passedAt(account) is never cleared
Re-derivableClaimGatePassed carries the earned and spent figures, both bars and the block they were measured to
What counts, at the ETH value of each event
SideLegs
EarnedReferral credits · KOL allocations · creator fee shares · founding-crew credits — curve income only
SpentNet curve buying per launch · prediction stakes · launch- and market-creation fees · promoted slots · item-mall and milestone-package purchases in ETH
Unpriced amountsExcluded, never valued at face
Which claims the gate guards
ClaimGated
THDMerkleDistributor.claim — traders, creators, KOLs/referrers, settlersYes
ThdRewardVest.claim — Fortune Wheel THD and accepted THD quest rewardsYes
Battlepass / ThdDayVestYes
SeasonRewardsPool — THD halfYes. The ETH and other-currency halves are not gated
BandRewardsDistributor.claimYes
ThdLpRewards.claimYes
Funding, crediting, sweeps and every burnNo — they pay contracts or burn, never a person

An account that has not passed keeps its entitlement; the claim reverts ClaimGateNotPassed and can be retried once it passes. No address is exempt.

When claiming opens#

The anchor
ItemValue
TGEThdLiquidityManager.seededAt() — the moment THD’s pool is seeded
Claims openseededAt + TGE_CLIFF (24 hours) — the same constant on every claim contract
Before itClaimingBlockedUntilTge · TgeCliffHasNotElapsed · ClaimsNotOpen

Vesting and deadlines#

Production figures: time.thdRewardVestingSeconds = 7,776,000 (90 days) and time.thdMerkleClaimWindowSeconds = 31,104,000 (360 days). Both are constructor immutables.

Per claim path
THD fromVestDeadline
Traders, creators, KOLs/referrers, settlers (pre-TGE leaves)Linear over 90 days from seededAt + 24h. A claim pays what has vested; the rest is reserved and credited to the vestseededAt + 24h + 360 days (burnDeadline())
Fortune Wheel THD and accepted quest THD — ThdRewardVestOne window, seededAt + 24h to +90 days. Credited before it: the whole window. Inside it: the days left. After it: claimable at onceCredited before the window: seededAt + 24h + 360 days. Later: 360 days after the end of the UTC month it was credited in
Battlepass — ThdDayVestLinear over 90 days from the UTC day each part was earned (pre-TGE parts: from TGE + 24h)From the pass: season end + 30 days (75% paid, 25% burned after the season ends). In the vest: 360 days from the earned day
Settlers after TGE — ThdDayVest90 days from the month’s close360 days from the month’s close
Season THD pot — SeasonRewardsPoolLinear over 90 days from the season’s first publication (publishedAt)publishedAt + 360 days
Bands — BandRewardsDistributorLinear over 90 days from the month’s first publicationpublishedAt + 360 days
LP rewards — ThdLpRewardsNoneNone
Season ETH and per-currency potsNoneNone

THD released to someone after a distributor’s first claim — a graduation after claims open — arrives through that distributor’s late-credit channel and runs on ThdRewardVest’s monthly clock; the settlers’ late credits run on ThdDayVest.

What nobody claims#

Every burn of unclaimed THD
CallBurnsFrom
THDMerkleDistributor.burnUnclaimed()The distributor’s unreserved balance. Runs once, then claim is closedburnDeadline(), after the never-graduated sweep or 30 days past the deadline
ThdRewardVest.burnExpired(accounts)Each credit past its deadlineThe credit’s deadline
ThdDayVest.burnExpired(account, days)Each day’s credit past its deadlinestart + claimWindow
Battlepass.burnExpired(season)The season’s residue after the back-claimclaimDeadline(season)
SeasonRewardsPool.burnExpiredThd(season)thdAllocated − thdClaimedpublishedAt + claimWindow
BandRewardsDistributor.burnExpired(month)The month’s allocated, unclaimed THDclaimDeadlineOf(month)

Every one is permissionless, has no destination and no amount to choose, and reverts BurnDidNotReduceSupply unless totalSupply() fell by exactly the amount. Allocated THD that was never claimed is burned; THD that was never allocated rolls forward or goes to Spoils. LP THD never burns.

Projects that never graduate#

The traders’ and creators’ THD is held per launch until it graduates, or per market until it settles with both pools non-empty. A launch not graduated by the distributor’s burnDeadline() never releases it.

At the deadline
StepWhat happens
sweepUngraduatedToSpoilsPermissionless. Moves the held THD for never-graduated projects to the immutable spoilsSink. Cumulative; a replay reverts. Refused before burnDeadline()
BoundNever touches a frozen claim leaf (proved by a claim-total leaf) or a posted late credit, lateReserved
burnUnclaimedWaits for that sweep, or UNGRADUATED_SWEEP_WINDOW (30 days), then burns what was credited and never claimed