Rewards
Quests
The quarter of every reward that its earner spends on acquiring other users: 116,250,000 THD the platform never directs. The task menu, the pool split, payout batches and the windows.
Status#
Quests are the platform’s user-directed acquisition budget. A quarter of every reward-earning user’s daily THD allocation is routed into a budget they spend on attracting other users. The platform never spends it and never chooses who receives it.
The 75/25 split#
The split is applied before the allocation reaches the user: of every daily allocation in the groups below, 75% goes into the earner’s own claim and 25% into their quest budget.
| Group | Allocation | Claim · 75% | Quest · 25% |
|---|---|---|---|
| Curve & predict traders | 220,000,000 THD | 165,000,000 THD | 55,000,000 THD |
| Creators & market makers | 75,000,000 THD | 56,250,000 THD | 18,750,000 THD |
| KOLs & referrers | 170,000,000 THD | 127,500,000 THD | 42,500,000 THD |
| Total | 465,000,000 THD | 348,750,000 THD | 116,250,000 THD — 11.62% of supply |
That quest pool is larger than any platform bucket, and none of it is the platform’s to spend: the earners who receive it direct it, and the platform has no function that could choose a recipient. The split is not on chain anywhere — it is applied before an allocation reaches a user, and the vault’s creditBatch only moves the result. These allocations are excluded from the split, and the reasons differ:
| Excluded | Why |
|---|---|
| Settlers · 1% | The recipients are bots. A budget they will never direct is a 25% pay cut, held for ever. |
| LP providers · 10% | Starts only after 100% unlock — after the acquisition phase quests exist for. |
| Spoils · 11% | Post-TGE, and its battlepass, bands and seasons already reward presence directly. |
| Liquidity, BD, ecosystem, insurance, team | Not user rewards. |
What a campaign is#
A campaign is a sponsor-published task list, a set of rates and a budget. Completers who do the tasks are paid out of that sponsor’s budget, and — where they are not already tied to a referrer — become the sponsor’s referee.
| Sponsor | What the campaign buys them |
|---|---|
| Trader | Referees — their only income that is not their own trading. |
| Creator or market maker | Graduation. Buyers on their curve before the target, which turns on their post-graduation fee stream permanently. |
| KOL | Followers, rank, and a larger allocation. |
| Referrer | Their entire business, funded in THD rather than in cash. |
Every row is self-interested, which is the design: a task list built around what the platform wants is a list nobody chooses from. The platform benefits are side effects — curve volume rises because creators want graduation, activation rises because referrers want referees who actually trade.
The task menu#
A sponsor builds a campaign from a fixed menu of tasks, and chooses what each one pays. The menu is ordered by what faking a completion would cost the faker, because payout weight is meant to track that and nothing else: a task that costs real money on chain is the strongest signal available, and a task that is free to fake at scale pays at once only while the campaign’s free-step allowance lasts, and after that only once the completer has done a capital or gas task in the same campaign.
| Rule | Value |
|---|---|
| Share of the budget | Set by the sponsor, 0 to 20%, default 20%; signed into the terms |
| Counts against it | Everything paid, per token, to completers who never did a paid task in the campaign |
| Order | First verified, first paid |
| When it is used up | Free steps wait for a paid task, as before |
| Campaigns signed before it | 0%: their free steps always wait for a paid task |
How a task is checked is a security property, not a detail. A task read from the chain cannot be asserted into existence by anybody, including the platform. An off-chain check against the X API can be: anybody who can write one database row can manufacture one, which is exactly why those tasks are gated behind a paid one.
| Task | Category | How it is checked | Cost to fake | Sponsor gets |
|---|---|---|---|---|
| Buy my curve before it graduates | Premium | Checked automatically | Capital | Graduation |
| Provide THD/ETH liquidity for N days | Premium | Checked automatically | Capital + time | Pool depth |
| Take the opposite side of a market I staked | Premium | Checked automatically | Capital | A two-sided market |
| Hold my token through graduation | Premium | Checked automatically | Capital + time | No dump on launch |
| Settle any market inside the 5-minute window | Premium | Checked automatically | Gas | Settler capacity |
| Make your first trade on The Hood | Premium | Checked automatically | Gas | A referee who actually trades |
| Create a market on a project I launched | Premium | Checked automatically | Gas | Cross-product activation |
| Buy credits | Premium | Checked automatically | Capital | A paying user |
| Buy the battlepass premium pass | Premium | Checked automatically | Capital | A paying user |
| Join or found a band | Premium | Checked automatically | Gas | A banded user |
| Spin the Fortune Wheel | Premium | Checked on The Hood | Gas | Wheel activity |
| Craft arrows at The Woods | Premium | Checked automatically | Gas | Woods activity |
| Vote in the THD fee vote | Premium | Checked automatically | Gas | Governance turnout |
| Stake on my project's market | Premium | Checked automatically | Capital | Market depth on my project |
| Buy my milestone package | Premium | Checked automatically | Capital | A committed long holder |
| Back my call | Premium | Checked automatically | Capital | A bigger pool behind my position |
| Buy a launch I promote | Premium | Checked automatically | Capital | Fee share through the KOL roster |
| Make your first prediction stake | Premium | Checked automatically | Capital | A referee who stakes |
| Reach N curve trades | Premium | Checked automatically | Capital | A repeat trader |
| Pass the THD claim gate | Premium | Checked automatically | Capital | A referee past the claim gate |
| Join my band | Premium | Checked automatically | Gas | A member |
| Stay in my band N days | Premium | Checked automatically | Gas | A lasting member |
| Trade in my band's force | Premium | Checked automatically | Capital | Band contest volume |
| Buy from my band shop | Premium | Checked automatically | Capital | Band vault income |
| Buy from my shop | Premium | Checked automatically | Capital | A sale |
| Buy from my shop on two different days | Premium | Checked automatically | Capital + time | A repeat buyer |
| Buy N different items from my shop | Premium | Checked automatically | Capital | Catalogue reach |
| Wear a cosmetic from my shop | Premium | Checked on The Hood | Capital | A walking advert |
| Complete your profile | Presence | Checked on The Hood | Free · after a Premium step | A real-looking account |
| Check in on N battlepass days | Presence | Checked on The Hood | Free · after a Premium step | A returning user |
| Create your referral link | Presence | Checked on The Hood | Free · after a Premium step | A new referrer |
| Bring a new trader | Presence | Checked on The Hood | Gas · after a Premium step | A new trading user |
| Follow my Hood profile | Presence | Checked on The Hood | Free · after a Premium step | An audience on The Hood |
| Watch my project | Presence | Checked on The Hood | Free · after a Premium step | A watcher who sees updates |
| Post in my project's chat | Presence | Checked on The Hood | Free · after a Premium step | A live chat |
| Post a thesis on my project | Presence | Checked on The Hood | Free · after a Premium step | A pinned view on my chart |
| Refer a trader to my launch | Presence | Checked on The Hood | Gas · after a Premium step | A buyer on my curve |
| Comment on my market | Presence | Checked on The Hood | Free · after a Premium step | Debate on my market |
| Become my referee | Presence | Checked on The Hood | Free · after a Premium step | A referee for life |
| Post in my band's room | Presence | Checked on The Hood | Free · after a Premium step | An active band room |
| Follow my shop | Presence | Checked on The Hood | Free · after a Premium step | Shop followers |
| Connect X to a Hood account | X | X sign-in | Low · after a Premium step | Identity |
| Step about | The sponsor picks |
|---|---|
| A project | Any of theirs, or up to 10 of their launches |
| A market | Any they created or staked, or up to 10 |
| A shop or band | Any of theirs, or up to 10 |
| Quests opened before | Any of the sponsor’s |
| Rule | Value |
|---|---|
| X connected | Always |
| Minimum X account age | Optional, set by the sponsor in days (up to 3650); judged when the quest opens |
| Become my referee | Accounts without a referrer only |
| Category | Meaning |
|---|---|
| Premium | Costs the completer money or gas. A label for the sponsor, not a gate. |
| Presence | Free, done on The Hood. |
| X | Done on X. |
| Check | What it means |
|---|---|
| Checked automatically | Read from the chain. Cannot be asserted into existence by anybody, including us. |
| X sign-in | Checked when you connect X to your account. |
| Checked on The Hood | Read from The Hood's own records: a follow, a watch, a post, a check-in or a referral. Free to complete, so it pays after a Premium step or from the free-step allowance. |
| X check | An off-chain check against the X API. These pay nothing until a capital or gas task is done in the same campaign. |
| Cost | Why it is weighted this way |
|---|---|
| Capital | Faking it costs real money on chain. The strongest signal available. |
| Capital + time | Money, held. Cannot be borrowed for one block. |
| Gas | Cheap but not free, and still read from the chain. |
| Low | An X account that passes sign-in costs money and time. |
| Free | Free to fake at scale, so gated behind a paid task. |
The six steps#
The budget is on chain. The completions are not. The settlement is a root. That division is the whole architecture.
| # | Step | Where | Cost |
|---|---|---|---|
| 1 | The 25% is credited to the sponsor | On chain — creditBatch, keeper-only, with the THD pulled in the same transaction and credited as the measured balance delta | Batched |
| 2 | The sponsor signs a campaign: tasks, rates, budget | An EIP-712 signature under “The Hood Quests”; openCampaign is a permissionless relay and msg.sender appears nowhere in the accounting | No gas for the sponsor |
| 3 | The budget moves from accrued to committed | On chain, at open | — |
| 4 | Completions are verified | Off chain — the indexer for capital and gas tasks, the attestor for social tasks | — |
| 5 | The day’s payouts are committed as one root | publishRoot(root, debits, expiries), keeper-only | One transaction per day regardless of volume |
| 6 | The completer claims | claim / claimMany, permissionless, one leaf per campaign and token, always paying the account the leaf names rather than the caller | The completer’s own gas, once |
Why the budget is genuinely on chain rather than a database number: a sponsor is committing tokens to strangers. If the budget were only our record, the sponsor would be trusting us not to renege and so would every completer. Locked in a vault, the money is provably there before anybody does a task.
Payout batches#
Completions are paid in payout batches. Once a day the quests keeper commits every verified completion since the last batch as one Merkle root — an epoch — with publishRoot, and debits each campaign’s budget, per token, by what its leaves pay. One transaction per day, however many completions it carries. Each leaf names the account it pays, the campaign that funds it and the token it pays in.
Every batch runs on its own clock. Publishing stamps its deadline as publishedAt + CLAIM_WINDOW — 1 day — and that deadline is never inferred from the next batch. A reward is claimed with claim or claimMany inside that window; missing one batch does not roll its rewards into the next. What nobody claims in time returns to the sponsor whose campaign funded it, through reclaimExpired (anyone may send it) or the expiry leg of the next publishRoot. Because the leaf names its campaign and token, nobody chooses which sponsor gets it back.
Claiming THD moves nothing out of the vault: the THD becomes the account’s and waits there. The vault’s only THD exit is settleAccepted, which moves claimed balances to the reward distributor, ThdRewardVest — the only caller it accepts — where they vest to the end of the 90-day window from TGE + 24h. A reward in another token is paid straight to the completer or credited to the 90-day QuestTokenVest, as the campaign chose when it was signed.
Windows and durations#
| Constant | Value | Seconds | What it bounds |
|---|---|---|---|
CLAIM_WINDOW | 1 day | 86,400 | How long a published reward can be claimed. Stamped at publication, never inferred from the next root. A constant, not a setter. |
MIN_CAMPAIGN_DURATION | 1 hour | 3,600 | The shortest quest a signature may ask for. |
MAX_CAMPAIGN_DURATION | 90 days | 7,776,000 | The longest. |
SETTLEMENT_GRACE | 3 days | 259,200 | After endsAt, work done before the end can still be paid; only then does closeCampaign return the remainder — which the quests keeper sends on its next run. It removes a race; it does not extend a quest. |
So a quest runs between 1 hour and 90 days, plus 3 days of settlement grace, and every reward it pays is claimable for 1 day from its batch.
| A campaign ends at whichever comes first | On chain | Unspent budget |
|---|---|---|
| Reward pool exhausted | Closed inside the publishRoot that empties it; endsAt moves to that block; closeReasonOf = 1 | None left |
| Preset end date | Completions stop at endsAt; after SETTLEMENT_GRACE the keeper sends closeCampaign; closeReasonOf = 2 | Returns to the sponsor’s accrued budget, never burned |
There is no manual close (owner ruling 28-09-2026). A sponsor may still revoke a signature that has not yet been relayed — the revocation is keyed on the terms rather than the campaign id, because the id is the EIP-712 digest and only exists once the campaign is open.
What the keeper can and cannot do#
campaignId == EIP-712 digest of
Campaign(address sponsor, bytes32 termsHash, uint256 budget,
uint64 duration, uint64 validUntil, uint256 salt)Only the digest is stored. The terms themselves live off chain behind termsHash, and the signature is checked with a checker that accepts EIP-1271, so a Safe can sponsor a campaign.
| The keeper can | The keeper cannot |
|---|---|
| Misallocate a sponsor’s budget between completers. | Take THD out of the contract. Every exit pays the whitelist-gated reward distributor, and the keeper can move no THD to itself. |
The owner’s power is narrower still: it appoints the keeper and repoints the reward distributor, and the second is guarded three ways — non-zero, has code, and listed in TreasuryRegistry, whose address is immutable on this contract. That registry gate is what breaks the five-call owner-compromise walk, and it is why the vault is owned by the owner Safe rather than the guardian. See the trust model.