Hooked Whitepaper

Part I

How it works

Product story in plain language.

Hooked is a token you trade on Uniswap against USDG. When you buy, the protocol can roll a multiplier and send you more token than you just bought — paid from a rewards pool. On the same buy you can also hit a jackpot in USDG. Trade the token, sometimes leave with more of it, sometimes leave with stablecoin prize money.

01 · Buy or sell

On a swap.

Buys and sells both pay a protocol fee. That fee is what funds everything:

  • Token rewards — on buys, a Main share goes into the rewards pool that pays multipliers (floor 0.9×, ceiling up to ×4).
  • Jackpot bank — a share of buys and sells is converted to USDG and sits in a separate prize pool. Only buys can win it.
  • Ops — a smaller USDG share covers running the product.

On a buy the sequence is: you spend USDG, receive Main at the pool price, the fee is taken and split, the multiplier game can top up your Main, and a jackpot ticket is opened for that buy. On a sell you pay the sell fee into jackpot and ops; there is no jackpot ticket and no rewards multiplier on the sell side.

02 · Multiplier game

Token rewards.

On a swap the fill is priced at the pool, then a multiplier rolls on what you put in. The floor is 0.9× — the trade went through, you just did not get lucky. Higher multiples are paid from a rewards pool of the token itself, filled by the buy-side token fee.

Those regular wins are tuned so that, ignoring the jackpot, expected return sits around 95% RTP.

0.9×

floor

Swap cleared, no luck.

95%

rtp

Regular rewards only.

up to ×4

ceiling

Paid from the token pool.

03 · Soft burn

Deflation.

RTP under 100% means more token enters the rewards pool than leaves as wins. In expectation a slice of flow stays on the contract and does not trade on the market. The protocol can also burn that surplus, permanently removing it from supply. Either way, higher volume tightens free float over time.

04 · Paid in usdg

Jackpot.

A separate bank in USDG. Buys and sells top it up. Only buys can win.

On a buy, fees split between token rewards and the USDG jackpot. The buy opens a ticket. Later that ticket is settled: miss or hit. Bigger buys land in higher size buckets with better odds. Bucket thresholds and base chances are protocol parameters; small buys still play, larger buys play with better odds.

A hit pays a fixed share of the current bank (default half) in USDG. The rest stays for the next winners. Because the prize is USDG, winners cash out without selling Hooked into the chart.

After every hit, odds are recalculated on-chain. The payout is compared to a target sized from market cap, with a floor for small caps and a ceiling for large ones. If the payout is above target, odds step up. If it is below, odds are cut. This way, the RTP can reach 100%+ at any given moment. Hard min and max bounds keep chances inside a sane range.

~50%

of bank

Default payout on a hit. Rest stays in the bank.

live odds

after each hit

Scaled by payout vs target, then clamped.

100%+

rtp

Can exceed 100% at any given moment.

05 · Volume and attention

The loop.

Volume fills the USDG bank. Hits and moving odds keep attention on the product. That attention brings more volume, which refills the jackpot and pushes more token into the rewards pool, tightening supply further.

Jackpot prizes are paid in USDG, so the loop does not mint Hooked to pay winners and does not force prize dumps into the book. It turns over volume while deflation compounds on the token side.

At a larger market cap, staking for holders may share protocol revenue. That sits outside the swap and jackpot core.

Part II

Protocol reference

Fees, tickets, randomness, odds, payouts, and who can call what.

Architecture

Stack.

Hooked’s own on-chain surface is these four contracts around a Uniswap v4 Main/USDG pool. Uniswap’s PoolManager, position manager, and the routers users trade through stay external — Hooked does not replace the AMM.

  • MainToken — the listed ERC-20. Transfer rules are tied to the hook and pool (allowances for fee legs and LP). Listing requires Main to sort as token1 vs USDG.
  • HookedV1 — the Uniswap v4 hook on that pool. Owner-gated init, LP only via the configured position path, exact-input swaps. On after-swap it takes fees, on buys converts the jackpot/ops Main slice to USDG, pays rewards Main to the collector, USDG to jackpot and ops, and emits buy attribution (buyId).
  • Fee collector — receives the buy-side Main rewards share and runs the regular multiplier game (0.9×–×4) against that pool. Surplus Main that is not paid out can sit on the contract or be burned.
  • JackpotPool — receives USDG jackpot shares, opens a ticket per buy, settles draws when the keeper calls in, pays winners in USDG, and rewrites bucket odds after hits using the mcap target.

Ops is a wallet, not a contract: it simply receives the ops USDG share from the hook. The keeper is off-chain software. A later staking module would be an extra contract; it is not part of the swap / jackpot core.

Swap routers sit between the user and the pool, so HookedV1 never sees a reliable end-buyer address at swap time. The keeper matches each on-chain buyId to the fill’s recipient and passes that address into settle. It cannot invent tickets; every ticket requires a prior fee from the hook.

Immutable in the hook

Fee splits.

SideTotalSplit
Buy 10% of Main out 6.5% Main to rewards · 2% to USDG jackpot · 1.5% to USDG ops
Sell 3.5% of USDG out 2% to jackpot · 1.5% to ops

On buys, the jackpot and ops Main slices are converted to USDG inside the hook, then transferred. JackpotPool credits the bank. Buys also open a ticket. Sells only add USDG to the bank.

Buy size for odds is recovered from the jackpot fee share: at 2%, notional is approximately fee × 50.

Lifecycle

Jackpot flow.

  1. Fee in. The hook transfers USDG and calls receiveJackpotFee with listing id, buy id, amounts, and timestamps.
  2. Ticket. On a buy, JackpotPool stores notional size and marks the ticket open. No random roll happens here.
  3. Settle. The keeper calls settle(buyId, recipient). Randomness is drawn in that transaction.
  4. Miss. The ticket closes. The bank is unchanged.
  5. Hit. The contract pays payoutBps of the current bank (default 50%) in USDG to the recipient, then regulates odds against the current target.

Anyone can seed the bank with USDG up front so the first prizes have a floor. Double-settling the same buy id reverts.

Entropy

Randomness.

The outcome is deliberately unknown at purchase time. Opening a ticket only records size and metadata. The roll happens when the keeper settles.

Settle builds a roll from block entropy (prevrandao), block number, buy id, recipient, and notional, then takes that value modulo 1e18. A hit occurs if the roll is strictly below the win probability for that ticket’s size bucket.

Binding the roll to the settle block means a mempool observer cannot know the result from the buy alone. The keeper is trusted to call settle with the correct recipient for each buy id; it cannot invent tickets without a prior fee.

Buckets, target, payout

Odds & payouts.

Buckets. Odds are a table of size bands. Each band has a minimum notional and a win probability in WAD. A ticket uses the highest band whose minimum it meets. Below the lowest band, win probability is zero. Thresholds and starting probabilities are protocol parameters.

Payout. On a hit the contract pays poolBalance × payoutBps / 10000 in USDG (default 50%). The remainder stays in the bank for later hits.

Target. After a hit, the protocol computes

target = min(ceiling, max(floor, mcap × mcapShare))

Market cap is Main total supply priced in USDG from the Uniswap v4 pool spot (Main as token1, USDG as token0). Floor covers low-cap launches; ceiling caps the target on large caps.

Regulator. Every band probability is rewritten after a hit:

new_p = clamp(old_p × (payout / target), p_min, p_max)

Payout above target raises odds. Payout below target lowers them. p_min / p_max stop the table from collapsing or exploding. Odds are therefore live state, calculated on-chain after each win, even though the surface is a bucket table.

Regular rewards (separate from the jackpot) draw multipliers from the Main rewards pool with a 0.9× floor and a high ceiling (up to ×4), targeting ~95% RTP on that layer alone.

Access

Roles.

RoleResponsibility
HookOnly address allowed to push jackpot fees into the pool when configured.
KeeperSettles open tickets with the matched recipient and settle-time entropy.
OwnerBinds the mcap pool, sets odds bounds and targets, replaces bands, rotates keeper and hook.