hookit docs

Everything about hookit.fun, in one place.

Dual-rail Uniswap v4 launchpad on Ink. Quote-only fees, locked LP, modular hooks. No custody. No hidden steps.

Overview

hookit is a permissionless Uniswap v4 launchpad on Ink. Anyone can create a token, lock liquidity, and start trading from a wallet. The site never holds ETH, tokens, or keys.

Two rails. Master opens a v4 pool with MasterLaunchHook in the same transaction. Classic sells on a bonding curve first, then graduates into a GraduatedFeeHook pool. Both mint 1 billion tokens. Both take fees in quote only.

Two launch rails

Master

Pool from block 0

  1. LaunchFactory
  2. LaunchToken + v4 pool
  3. Locked in-range LP
  4. MasterLaunchHook modules

Classic

Bond, then graduate

  1. BondingLaunchFactory
  2. 80% sold on CPMM curve
  3. 4.2 ETH-eq threshold
  4. GraduatedFeeHook pool

What you can do

  • Explore. Browse launches. Filter by hook (All → Protection → Tokenomics → Rewards → Trading Fees), RWA / Quotrons pair, or multi-pair. OG vs copycat ticker badges.
  • Hooks. Marketplace of modules with live-use counts.
  • Launch. Master wizard (token & pair → protection → tokenomics → trading fees → fee split → review) or Classic bonding. /builder is the same modules as a draft, then deep-links to launch.
  • Trade. Market swap on the token page through HookitSwapRouter so hook rules stay applied.
  • Analytics. /stats — volume, protocol revenue, $HKT buyback/burn, holder-drop estimates.

Architecture

The app is a wallet interface over Uniswap v4. Fees, floors, burns, and airdrops live in the hook — not in a backend that can change the rules after launch.

Protocol stack
  1. App

    hookit.fun — marketplace, launch wizard, token desk

  2. Router

    HookitSwapRouter — hooked swaps, composite quote legs

  3. Hook

    MasterLaunchHook / GraduatedFeeHook — quote-only fees + modules

  4. Pool

    Uniswap v4 PoolManager — fee tier 0, locked liquidity

  5. Ink

    Chain 57073 — ETH gas, USDG + Quotrons wStocks as quotes

What is immutable

  • Module bitmask, hook tax, and fee-split percents are packed at launch. They cannot be edited later.
  • Master launch LP in the seeded tick range cannot be removed.
  • Classic LP after graduation sits in LiquidityLocker with no withdraw.
  • New protocol versions ship as new factory addresses. Old pools keep the bytecode they launched with.

What the site adds

  • House indexer for candles, trades, and holders (not The Graph).
  • Defined.fi deep-link for an external chart when you want a second tape.
  • Quotrons wStock quotes (wAAPLx, wNVDAx, …) as launch pairs on Ink. See Quotrons.
  • Optional multi-pair markets on one token (1–5 quotes). Arb keeper is deployed paused until the next factory.

What the site does not have

  • No custody wallet and no on-site portfolio page. Created / held tokens show on Explore and the token desk from the connected address.
  • No resting on-chain limit book. Pro-mode alerts are browser toasts.

$HKT

$HKT is the protocol token. Hold it and you are exposed to every token that trades on hookit — not as a promise, as a mandatory on-chain split of the 1% base fee.

Hold $HKT → every launch
  1. 01

    Any swap

    Every Master / graduated pool

  2. 02

    0.10% of quote

    10% of the 1% base

  3. 03

    Buy the meme

    Not $HKT — the launched token

  4. 04

    $HKT holders

    Pro-rata live balance

Mandatory. One bag of $HKT is a claim on a slice of every token that trades on the pad. More $HKT, larger slice. Not a module. LP and protocol sinks are excluded from the weight.

The thesis

Every Master and graduated Classic swap pays a 1% quote fee. 10% of that 1% (0.10% of the trade) is mandatory — not a module, not a toggle, not a special case. It buys the launched memecoin — the ticker on that pool — and HktHolderDropVault epoch-pushes those tokens to live $HKT holders, pro-rata.

  • You do not receive $HKT from this flow. You receive the other tokens.
  • Hold 1 $HKT and you get a slice of every launch that prints volume.
  • Hold more $HKT and your slice of every drop is larger.
  • Weights are live balances, not a launch-day snapshot.
  • LP, factory, and protocol sinks are excluded so they do not eat the drop.

Tokenomics

Role
Fair-launched native token of the pad (Ink may still show HOOKTEST / HTST on an early stack).
Holder cut
Mandatory. 10% of every 1% base fee, on every hooked pool. Not a module. Not optional. You cannot launch without it.
Buyback
80% of the protocol’s 30% (24 bps of volume) routes to native-token buyback. ETH stays ETH. wStock → USDG on Quotrons first.
Payout
Batched each epoch (default 15 minutes, 48 holders per push). Never paid inside the swap itself.
  • dropV · 1% · 10%

    Quote volume of a pool × base fee × holder share. Spent on that pool’s token.

  • share_ibal_i($HKT) / Σ bal($HKT)

    After exclusions. Same weight applies to every launch token in the vault.

Not the Holder Airdrop module

$HKT drop (mandatory)Holder Airdrop (optional module)
Who gets paidLive $HKT holdersHolders of that launched token
What they getThe launched tokenQuote (ETH / USDG / wStock)
Funded by10% of the 1% baseA % of the hook-tax pot
ToggleNone — baked into the 1% basePacked at launch

How the drop actually fires

  • The hook credits HktHolderDropVault on each swap (0.10% of quote, spent on that pool’s token).
  • tryPush runs on a later swap once the epoch is ready. Max 48 $HKT holders per batch.
  • Live $HKT (HTST on the early Ink stack) does not auto-list holders on transfer. A keeper syncs balances from Transfer logs / the indexer, then calls syncHolders + tryPush.
  • LP, factory, vault, and protocol sinks are excluded so they do not eat the drop.
  • Protocol 80% buyback is separate: ProtocolRevenueDistributor → HkitBuyback.execute, which buys $HKT and burns it. Not inside the swap.

How launches work

A launch is one (or two) wallet transactions. What you pick — Master or Classic — decides whether a pool exists from block 0 or after the curve fills.

Master launch wizard
  1. 01Token & pair
  2. 02Protection
  3. 03Tokenomics
  4. 04Trading fees
  5. 05Fee split
  6. 06Review

Six steps. Bitmask and vestPacked freeze at launch.

Creator flow

  1. 01

    Connect

    Use Ink. You need gas plus the 0.0005 ETH launch fee.

  2. 02

    Token & pair

    Name, ticker, image, links, quote (ETH, USDG, or a Quotrons wStock). Optional extra markets. Metadata URI is on-chain; images pin via /api/ipfs/upload + /api/ipfs/metadata.

  3. 03

    Protection

    Anti-MEV, Anti-Snipe, Max Tx, Max Wallet.

  4. 04

    Tokenomics

    Holder Airdrop, Auto-Burn, Backed Floor, Buyback Vesting, Deepen LPs.

  5. 05

    Trading fees + split

    Dynamic Fees or Fixed Fees, optional Creator → Hook, then the hook-pot 100% split.

  6. 06

    Review & launch

    Master deploys token + pool + locked LP. Classic opens the curve. Optional same-tx dev buy, capped at 2.5% of supply.

Master (Launch Studio)

Six wizard steps: Token & pair → Protection → Tokenomics → Trading fees → Fee split → Review & launch. /builder is the same module draft without the pair step, then deep-links here. On-chain this is LaunchFactory + MasterLaunchHook.

  • 1,000,000,000 tokens, 18 decimals, fixed supply.
  • Start price targets ~$5,000 FDV in the chosen quote (ETH/USD TWAP seed $4,000).
  • Uniswap v4 pool fee tier is 0%. Tick spacing 60. The hook charges instead, quote-only.
  • LP is minted one-sided from the launch tick toward the usable range and locked. The creator cannot pull that LP.
  • Trading is live in the same transaction.
  • Optional modules pack into a uint256 bitmask. FDV vest plans pack separately as vestPacked. Both frozen after launch.
  • Dev buy: same-tx, max 2.5% of supply, as % of supply or a fixed quote amount.
Master swap lifecycle
  1. 01

    beforeSwap

    Anti-MEV, max-tx, max-wallet. Compute 1% + hook tax + snipe.

  2. 02

    Take quote

    Fee is pulled from the quote leg only. Never a memecoin tax.

  3. 03

    Route

    Hook pot → modules. Base 1% → 60 / 10 / 30.

  4. 04

    afterSwap

    Pending auto-burn buy+burn and Deepen LPs mint.

Classic

  • Same 1B supply. 80% sells on the curve; 20% is reserved for graduation LP.
  • Curve graduates at ~4.2 ETH (or USDG / wStock equivalent).
  • After graduation, leftover tokens + collected quote seed a full-range v4 pool.
  • GraduatedFeeHook keeps the same 1% quote-only base. No Master hook tax.

Multi-pair

One token, up to five quote markets, launched in a single LaunchFactory.launchMulti. Each market is its own Uniswap v4 pool with the same MasterLaunchHook bitmask. Supply is split by the bps you set (must sum to 10_000).

One token, many quote pools
Multi pair

$TICKER

ETH40% pool
USDG30% pool
wNVDAx30% pool

Supply splits by bps (must sum to 10_000). Same Master bitmask on every pool.

  • 1–5 markets. Typical: ETH + USDG + one or more Quotrons wStocks.
  • Each market has its own poolId, tick range, and liquidity. The token page has a market switcher.
  • Explore shows a multi-pair badge. Indexer fields: marketCount, markets[].
  • Backed Floor is rejected in multi (BackedFloorNotAllowedInMulti). The wizard hides the floor card when you add a second market.
  • Gas scales: ~2.8M base + ~950k per extra market.

Arb keeper

MultiPairArbExecutor can buy the cheap USD leg and sell the rich one in one unlock. Defaults: 10% min deviation, max clip 0.50% of supply. The live Ink deploy is paused (maxClipUsdX18 = 0). Current MasterLaunchHook bytecode cannot take the arb path in place — that waits on a new factory.

Quotrons

On Ink you can pair a launch against wrapped equities from Quotrons (wAAPLx, wNVDAx, …) or USDG. Spot USD for FDV and graduation prefers the live Quotrons pool sqrtPriceX96; a seeded usdPriceX18 is fallback.

Launch against wrapped equities
Powered by Quotrons

wStock pools take USDG on the buy panel. HookitSwapRouter bridges on an allowed Quotrons pool.

TickerName
wAAPLxApple
wAMZNxAmazon
wGOOGLxAlphabet
wMCDxMcDonald's
wMSTRxStrategy
wNFLXxNetflix
wNVDAxNVIDIA
wSPYxS&P 500 ETF
wTSLAxTesla
  • wStock-quoted pools: the buy panel is USDG-only. HookitSwapRouter.swapExactInComposite bridges USDG → wStock on an allowed Quotrons pool, then swaps the hooked launch pool.
  • Sells can composite the other way: token → wStock → USDG.
  • Protocol wStock fees rail to USDG via ProtocolRevenueDistributor + FeeEthRail before ops / buyback.
  • Quotrons hook 0x8bb4516059F9149Bc3b89018Fc7537f1F14a30cc. Bridge hooks must pass QuotronBridge.isAllowedBridgeHook.

Trading

Buys and sells hit the live Uniswap pool (Master or graduated Classic) or the bonding curve (Classic pre-graduation). The price on screen is the on-chain spot — not a hookit quote.

Hooked swap path
  1. 01

    Wallet

    Sign buy or sell

  2. 02

    HookitSwapRouter

    Required — generic DEX UIs skip hook accounting

  3. 03

    v4 pool

    Fee tier 0. Spot is sqrtPriceX96

  4. 04

    MasterLaunchHook

    Quote fee, modules, then 60 / 10 / 30

Price
Quote per token from sqrtPriceX96 (pool) or virtual reserves (curve).
Market cap / FDV
Price × 1B supply, in USD via the ETH/USD TWAP or the Quotrons wStock/USDG pool.
Liquidity
TVL in USD near spot. Thin books still move a lot per trade.
Slippage
If spot moves more than this % before inclusion, the swap reverts.
Price impact
How far this size walks the curve or the book.

Why the hookit router

Master and graduated pools need HookitSwapRouter so fee take, floor fills, burns, and airdrop pushes run. A generic DEX UI can skip hook accounting or revert.

  • swapExactIn — single hooked pool, quote already in the pool currency.
  • swapExactInComposite — bridge leg (Quotrons / ETH↔USDG) then hooked launch leg, one unlock.
  • swapExactInCompositeSell — token → quote → stable.
  • wStock pools: pay USDG. ETH-quoted pools take ETH.

Classic pre-graduation

Trades hit BondingLaunchFactory.buy / sell on the virtual CPMM, not the v4 router. The token page shows realQuote / graduationQuote. After graduation, use HookitSwapRouter on the GraduatedFeeHook pool (1% base only, no modules).

Charts

Primary tape is house indexer candles (mcap-based, 5m default, 1m available). Fallback is GeckoTerminal OHLCV. Defined.fi is a deep-link second tape, not the in-app chart.

Graduation

Classic only. Master already has a pool.

Classic bonding → graduation
price4.2 ETH-eqtokens sold (80%)

Virtual constant-product. 20% of supply is reserved for full-range LP at graduation.

The next trade that pushes collected quote through ~4.2 ETH-equivalent graduates in the same flow. No button.

  • Trading moves from BondingLaunchFactory to a Uniswap v4 pool.
  • 20% of supply + collected quote become locked full-range LP.
  • Fees stay the 1% base, split 60% / 10% / 30% creator / $HKT / protocol.
  • Graduation is a funding threshold, not a quality stamp.
  • Creator fees after graduation sit on GraduatedFeeHook.pendingCreatorTax. sweepQuote(poolId) moves them into FeeEscrow, then claim.

Fees and flywheel

Every swap pays a quote-only fee (ETH, USDG, wStock, …). You never pay the fee in the launched memecoin.

Fee flywheel
hookitquote-onlySwapquote fee1% basealways on60 / 10 / 30split$HKT dropbuy tokenProtocol20 / 80Hook potmodules

Every swap feeds the same loop. Hook tax is extra and only funds modules. The 1% base never changes its 60 / 10 / 30 split.

1% base fee — 60 / 10 / 30
Creator 60%
FeeEscrow, BuybackVault if vesting is on, or the hook pot if Creator → Hook is on.
$HKT 10%
Buys the launched token and epoch-pushes it pro-rata to live $HKT holders.
Protocol 30%
Then 20% ops / 80% native-token buyback. Unallocated hook tax joins this pot.

The three fee layers

Base (1%)
Mandatory. Always 60% creator / 10% $HKT / 30% protocol. The 10% $HKT slice cannot be removed or rerouted at launch.
Hook tax
Optional Master extra, 0–9%, so base + tax ≤ 10%. Funds modules only. Leftover → protocol.
Anti-Snipe
Temporary buy-only tax that decays to 0. Its take follows the same 60 / 10 / 30 as the base.

Worked example

A 1 ETH buy on a Master pool with 1% base + 2% hook tax. Auto-burn 80% and floor 20% of the hook pot.

SliceQuoteWhere it goes
Base 1%0.010 ETH0.006 creator · 0.001 $HKT drop · 0.003 protocol
Hook tax 2%0.020 ETH0.016 burn buyback · 0.004 FloorVault
Trader pays1.030 ETH1.000 into the pool + 0.030 fees

Launch fee

0.0005 ETH to the factory, plus gas. Not refundable. Separate from swap fees.

Creator fees

The creator’s 60% of every 1% base (and of the temporary snipe take) is not paid inside the swap. Where it sits depends on the modules you packed.

Where the creator 60% sits

FeeEscrow

Default. Claim quote on the token page.

BuybackVault

If vesting is on. Clock or FDV unlock.

Hook pot

If Creator → Hook. No creator claim.

The 10% $HKT drop and 30% protocol cut never go to the creator.

FeeEscrow (default)
MasterLaunchHook.feeEscrow(). Claim quote on the token page. Classic after graduation: sweepQuote(poolId) on GraduatedFeeHook first, then claim.
BuybackVault
If Buyback Vesting is on. Time vest or FDV cliff/steps. Creator-only claim of the unlocked slice.
Hook pot
If Creator → Hook is on. The 60% joins floor / burn / deepen / airdrop. Nothing to claim as creator fees.
  • Buyback Vesting and Creator → Hook cannot both be on.
  • The 10% $HKT drop is mandatory. It and the 30% protocol cut never go to the creator.
  • Read live vaults from the hook: feeEscrow(), buybackVault(). Do not trust a stale addresses.json.

Hook modules

MasterLaunchHook is the shared v4 hook. Browse filters on /explore are All → Protection → Tokenomics → Rewards → Trading Fees. Deepen LPs sits in Protection (it thickens the book), not Rewards.

Protection

Backed Floor

every swap the floor goes up — so the price can only go up. More volume = higher floor

Deepen LPs

share of hook tax minted into the pool as extra liquidity. Deeper book for whales and traders

Anti-MEV

same-block opposing swap cooldown

Max Wallet

caps each wallet between 0.1% and 2.5% of total supply. Fixed at launch

Max Tx

caps each swap between 0.1% and 2.5% of total supply. Fixed at launch

Anti-Snipe

decay tax on opening buys, fades over the launch window

Tokenomics

Buyback Vesting

creator proceeds vest on a timer, or until a market-cap target

Auto-Burn

share of hook tax buys tokens from the pool and burns them after each swap

Rewards

Holder Airdrop

Every swap accrues. Holders get quote or stocks on a time window or FDV target

Creator → Hook

send your 60% of the base 1% into the hook pot instead of claiming escrow

Trading Fees

Dynamic Fees

Swap fee scales with in-range LP depth consumed. Larger trades pay more, no oracle

Fixed Fees

flat extra fee on every swap. Deducted in quote only, zero sell pressure

Protection

Anti-Snipe

High extra buy fee at open. Linear decay to 0 over the window you set. Snipers pay the most in the first seconds.

Anti-MEV

One swap per tx.origin per pool per block. Same-block buy→sell or sell→buy reverts. Not a private mempool.

Max Tx

Caps a single swap at 0.1%–2.5% of supply. Fixed at launch. Oversized exact-input swaps revert.

Max Wallet

Caps how much one address can hold after a buy, same 0.1%–2.5% range. Checked post-transfer.

Backed Floor

Quote vault + ratchet redeem price. Deep dive in the Backed Floor section.

Deepen LPs

Hook-tax share minted back into the launch LP range as extra liquidity. Thickens the book. Sits in Protection, not Rewards.

Tokenomics

Auto-Burn

Hook-tax share buys the token from its own pool and burns it. Failed nested buy stays queued.

Buyback Vesting

Creator’s 60% of the 1% base goes to BuybackVault. Time vest or unlock-at-FDV. Full write-up below.

Rewards

Holder Airdrop

Hook pot → HolderAirdropVault in quote. Epoch or FDV target, pro-rata by that token’s balance. Full write-up below.

Creator → Hook

Routes the creator’s 60% of the 1% base into the hook pot instead of escrow. Cannot combine with Buyback Vesting.

$HKT holder drop is not a module. It is mandatory on every hooked pool. See the $HKT section.

Trading fees

Fixed Fees

Flat extra hook tax on every swap, quote-only. Mutually exclusive with Dynamic Fees.

Dynamic Fees

Hook tax ramps with in-range LP depth consumed. No oracle. Full write-up below.

Anti-Snipe

Buy-only extra tax at open. Linear decay to 0 over the window packed at launch. The take uses the same 60 / 10 / 30 split as the 1% base — it is not hook tax.

Snipe tax decays to zero
τ0 98%T = 5s → 0

Example — 1 ETH buy, 5s window, 98% open tax

First second
+0.98 ETH snipe on top of the 1% base. Sniper pays ~1.99 ETH in.
After 5s
Snipe is 0. Same 1 ETH buy pays only 0.01 ETH base.
Where the 0.98 goes
60% creator · 10% $HKT drop · 30% protocol.

Buy-only. Same 60 / 10 / 30 split as the 1% base — not hook tax.

Initial tax
Wizard default 98%. Slider 1%–99%. Contract fallback if unset: 50%. Max 9900 bps.
Window
1–3600 seconds. Wizard default 5 seconds.
Cap
Base 1% + hook tax + snipe ≤ 100% at open. Steady fee (after decay) still 1% + hook tax ≤ 10%.
  • τ_snipe(t)τ0 · (1 − (t − t0) / T)

    0 after T. Applied on buys only.

Anti-MEV

Transient per-origin lock. One swap per tx.origin per pool per block. A same-block opposing swap (buy then sell, or sell then buy) reverts SandwichBlocked.

One origin, one swap, one block
Block Ntx.origin A — buyAllowed
Same blocktx.origin A — sellSandwichBlocked

Example — Alice in one block

Block 100, buy 1 ETH
Allowed.
Block 100, sell
Reverts SandwichBlocked.
Block 101, sell
Allowed. Next block, new lock.
  • This is not a private mempool and not a builder-only lane.
  • Same-direction second swap in the same block from the same origin also reverts.
  • Does not stop cross-block sandwiches or other searchers.

Max Tx

Caps a single swap at 0.1%–2.5% of total supply (10–250 bps). Fixed at launch. Oversized exact-input swaps revert. The check includes the fee in the notional (SupplyCapLib.checkMaxTx).

Single-swap supply cap

This swap 1.05%Cap 2.50%

Example — 1B supply, 1% max tx = 10M tokens

Buy 8M tokens
Goes through.
Buy 12M tokens
Reverts. One swap cannot eat more than the cap.

0.1%–2.5% of supply. Oversized exact-input reverts.

Max Wallet

Caps how much one address can hold after a buy, same 0.1%–2.5% range. Checked post-transfer on buys (checkMaxWalletBeforeBuy). Sells are not blocked by this cap.

Post-buy wallet cap

Wallet after buy 2.20%Cap 2.50%

Example — 2.5% max wallet = 25M tokens

Wallet holds 20M, buys 4M
24M after — allowed.
Wallet holds 20M, buys 6M
26M after — revert. Sells are never blocked by this cap.

Same 0.1%–2.5% range. Sells are not blocked by this cap.

Backed Floor

A Master module. Every swap lifts the floor: hook-tax quote goes into FloorVault, P_floor = vault ÷ circulating, and it only ratchets up — so the printed price cannot sit below it. More volume = higher floor. Single-pair only — launchMulti reverts BackedFloorNotAllowedInMulti.

Hook tax → floor$1M volume$10M volume
2%~$20k floor~$200k floor
5%~$50k floor~$500k floor

Example assumes a ~$5k launch that sends 100% of hook tax to the vault. Starting floor is near zero until the first fees land. Split the pot with burn / Deepen LPs / airdrop and the floor grows slower.

Floor only ratchets up
P_floorvolumenever down

Vault quote ÷ circulating. Each swap can lift it. Redeem burns tokens and pays quote — remaining holders keep the new floor.

  • P_floorV_quote / S_circ

    Quote wei in the vault over circulating token wei. Scaled 1e18 on-chain as floorPriceX18.

  • Redeemq = amount · V_quote / S_circ

    FloorVault.redeemFloor(token, amount). Burns tokens, pays quote, round down. Remaining holders keep a floor that never decreases.

  • Premium(P_spot − P_floor) / P_floor

    Hidden while the vault is dust versus launch FDV, so a few cents of collateral is not a +30,000,000% badge.

  • The floor is not pegged to the DEX. Spot can sit far above the vault.
  • Sells at/below floor can be intercepted in beforeSwap and floor-filled at P_floor.
  • Empty vault → redeem does nothing until fees refill it.
  • Floor fills help when spot is already on the floor path the hook implements. They are not a guarantee across every tick jump.

Deepen LPs

A share of the hook pot is minted back into the launch LP range as extra liquidity. Protection category — it thickens the book, it does not pay holders.

The book gets thicker
At launchAfter volumethin range+2 ETH minted in

Example — 2% hook tax, 100% to Deepen LPs

1 ETH buy
0.02 ETH minted into the LP after the swap.
50 such buys
+1 ETH of depth in the launch range.
100 such buys
+2 ETH. Same size walk moves price less.

Hook-tax quote is minted back into the same launch ticks. Not paid to holders.

  • Hook tax is queued to pendingDeepenLps[poolId] and minted in afterSwap.
  • If the nested mint fails, the same amount is re-queued. Funds are not lost.
  • The token page sums LpDeepened(poolId, quoteAmount) as quote already minted into the LP, and still shows pendingDeepenLps(poolId) when the queue is non-zero.
  • Share of the hook pot must sum to 100% with floor / burn / airdrop when any sink is on.

Auto-Burn

A share of the hook pot buys the launched token from its own pool after the swap and burns it (dead address).

Supply burns down
1B at launchsupply after burns

Example — 2% hook tax, 80% to Auto-Burn

1 ETH buy
0.016 ETH buys the token and burns it.
$100k volume
~$1.6k of token bought and burned.
$1M volume
~$16k burned. Circulating supply is lower, FDV math uses what's left.

Hook tax buys the meme from its own pool and sends it to the dead address. Not the $HKT buyback.

  • Queued as pendingAutoBurn[poolId], executed in afterSwap.
  • Failed nested buy re-queues the same amount.
  • This is not the protocol $HKT buyback and not Buyback Vesting.

Buyback Vesting

When this module is on, the creator does not take the 60% of the 1% base in FeeEscrow. That cut goes to BuybackVault and unlocks on a clock, or when fully-diluted mcap prints a USD target packed at launch in vestPacked (low 128 bits) — not in the module bitmask.

Creator 60% unlocks later
Time vestday 0day 30Until FDV$0$10M

Example — $100k volume, 60% of the 1% base = $600 locked

30-day vest, day 15
$300 claimable. Linear. Dump later does not relock it.
Until $10M FDV
$0 until mcap prints $10M, then the full $600.
By % rungs
e.g. 25% at $10M, 25% at $50M, 50% at $100M.

Cannot combine with Creator → Hook. The 10% $HKT drop stays mandatory.

Time vest
Linear unlock from 7 days to 5 years. Claim the unlocked slice on the token page.
Until FDV
Cliff presets start at $10M (not $5M): $10M, $50M, $100M, $500M, $1B, $10B. All at the cliff, or by % at each rung (percents must sum to 100).
Ratchet
observeFdv on each swap. High-water FDV. A dump after the unlock does not relock fees already freed.
  • Cannot combine with Creator → Hook. Both spend the same 60% creator cut.
  • The 10% $HKT drop is mandatory and unchanged. The 30% protocol cut is unchanged.
  • Buyers can see the vest on the token page. Instant creator dump of trading fees is off the table.
  • The token page shows quote accrued into BuybackVault, still pending / claimable, and the until-FDV cliff or first / next by-% rung.

Holder Airdrop

Optional Master module. A launch-time share of the hook pot accrues in HolderAirdropVault as quote (ETH, USDG, or wStock). Holders of that launched token get paid — not $HKT holders. That other flow is the mandatory $HKT drop in the $HKT section.

Quote split to holders of that token
pot0.01 ETHyou 2%2%1%

Example — 2% hook tax, 50% to airdrop, you hold 2% of supply

1 ETH buy
0.01 ETH into the vault this swap.
Your payout
2% × 0.01 = 0.0002 ETH when the epoch pushes.
$100k volume
~$20 to you in quote. Not $HKT — the launched token's holders.

Optional module. Not the mandatory $HKT drop. You receive ETH / USDG / wStock, not the meme.

Time window
Default epoch 15 minutes. Min 60 seconds, max 7 days. The next swap after the epoch can push a batch (tryAutoAirdrop).
Until FDV
Keep drops locked until FDV hits $5M–$10B (airdrop may use the $5M preset; buyback vest starts at $10M). Unlock all at the cliff, or by % at each rung (must sum to 100). Packed in vestPacked high 128 bits.
Holder set
On-chain. LaunchToken.holderTracker = HolderAirdropVault; every transfer calls syncHolder. Not supplied by the indexer.
Payout
Uniswap v4 ERC-6909 quote claims via claimsManager.transfer. Holders redeem with PoolManager.setOperator(redeemer, true) then V4ClaimsRedeemer.claim(quote).
  • Needs hook tax > 0 (or Creator → Hook feeding the pot) so there is something to accrue.
  • Share of the hook pot must sum to 100% with floor / burn / Deepen LPs when any sink is on.
  • Permissionless. Anyone can trigger the push once the epoch is ready.
  • The token page reads released (already airdropped) and potOf (still pending), plus the until-FDV cliff or first / next by-% rung.
  • Max 48 holders per batch so a swap stays inside the gas envelope.
  • Pool, hook, and vault addresses are excluded. The holder list must cover circulating or the push reverts.
  • payout_ipot · bal_i / Σ bal

    Quote pot for this epoch × wallet balance of the launched token over circulating (exclusions applied).

Creator → Hook

Routes the creator’s 60% of the 1% base into the hook pot instead of FeeEscrow. Same module split as hook tax (floor / burn / deepen / airdrop).

Creator 60% feeds the hook pot

Example — 1 ETH buy, no hook tax, Creator → Hook on

Base 1%
0.006 ETH to floor / burn / deepen / airdrop instead of escrow.
$100k volume
$600 extra in the pot. Creator claims $0.

Nothing to claim as creator fees. $HKT 10% is untouched.

  • Cannot combine with Buyback Vesting.
  • The 1% base is unchanged. Only the creator slice is redirected.
  • A fee sink can run with hook tax = 0 if this module feeds the pot.

Fixed Fees

Flat extra hook tax on every swap, quote-only. Mutually exclusive with Dynamic Fees. Leftover hook tax (not routed to a sink) joins the protocol pot.

Flat extra hook tax
Base 1% — every swap
Hook tax 2% — every swap

Example — 2% fixed hook tax

1 ETH buy
Pays 0.01 ETH base + 0.02 ETH hook tax = 1.03 ETH in.
10 × 1 ETH buys
0.10 ETH base (60/10/30) + 0.20 ETH into the hook pot.
$1M volume
$10k base + $20k hook tax. Tax funds modules, leftover → protocol.

Mutually exclusive with Dynamic Fees. 1% + tax ≤ 10%.

  • You set hook tax at launch. Base 1% + hook tax ≤ 10%.
  • Hook tax never uses the 60 / 10 / 30 split. That split is only the 1% base (and snipe).

Dynamic Fees

Optional Master fee mode. The extra hook tax is not a flat bps. It scales with how much of the in-range book the swap eats. A small clip on a deep book stays cheap. The same clip on a thin book pays more. No oracle, no 24h volume window — only current Uniswap v4 liquidity in the launch ticks.

Tax ramps with depth eaten
τ_min 1%τ_max 9%

Example — 10 ETH in-range depth, extra tax 1% → 9%

Retail 0.2 ETH
Uses 2% of the book. Extra ≈ 1.16%. Pays ~0.002 ETH hook tax + 0.002 ETH base.
Whale 5 ETH
Uses 50% of the book. Extra = 5%. Pays 0.25 ETH hook tax + 0.05 ETH base.
Clip the whole book
Extra = 9%. A 10 ETH buy pays 0.90 ETH hook tax + 0.10 ETH base.

Same orange as the hook. No oracle. Empty book stays at τ_min so the first buy does not revert.

  • cn / d

    Quote notional of this swap over in-range quote depth in the trade direction.

  • rmin(1, c / σ)

    σ is the depth-saturation fraction set at launch (default 100% of in-range depth).

  • τ_hookτ_min + (τ_max − τ_min) · r

    Added on top of the 1% base. Empty depth stays at τ_min so a first buy does not 100% revert.

  • You set a min total fee and a max hook tax at launch. Base 1% + max hook tax ≤ 10%.
  • Cannot combine with Fixed Fees. One extra-tax mode per pool.
  • The 1% base still splits 60 / 10 / 30. Only the hook-tax slice ramps.
  • Whale-sized flow pays for the depth it consumes. Retail on a healthy book stays near the floor fee.

Formulas

The identities the contracts enforce. BPS_DENOMINATOR = 10_000. Amounts are integer wei.

What the identities cover
Swap feeDynamic τUniswap spotClassic curve$HKT dropProtocol pot
Swap fee
  • fee_total1% + τ_hook + τ_snipe

    Capped so 1% + τ_hook ≤ 10%. Snipe is buy-only and temporary.

  • τ_snipe(t)τ0 · (1 − (t − t0) / T)

    0 after the launch window T. Linear decay from the initial tax τ0.

  • base split0.60 creator + 0.10 $HKT + 0.30 protocol

    Mandatory. Applied to the 1% base and to the snipe take. Hook tax never uses this split.

Dynamic hook tax
  • cn / d

    Quote notional of the swap over in-range quote depth in the trade direction.

  • rmin(1, c / σ)

    σ is the depth-saturation fraction set at launch (default 100% of in-range depth).

  • τ_hookτ_min + (τ_max − τ_min) · r

    No oracle. Empty depth stays at τ_min so a first buy does not 100% revert.

Uniswap spot
  • P(sqrtPriceX96 / 2^96)^2

    Quote per token if the launch token is currency0; invert if it is currency1.

  • FDVP · 10^9 · FX

    FX is ETH/USD TWAP or Quotrons wStock/USDG (USDG ≈ $1).

Classic curve
  • kQ_virt · T_virt

    Virtual constant-product. Start virtual quote is 1 ETH-equivalent.

  • buyΔT = T − k / (Q + ΔQ)

    Tokens out for quote in, before the 1% fee.

  • graduateQ_real ≥ 4.2 ETH-eq

    Or the same USD value in USDG / wStock. 20% of supply seeds full-range LP.

$HKT holder drop
  • buyV · 1% · 10%

    Mandatory. Quote volume × base fee × holder share. Buys the launched token, not $HKT.

  • share_ibal_i($HKT) / Σ bal($HKT)

    Live balances. LP and protocol sinks are excluded from the weight.

Protocol pot
  • ops0.20 · protocol

    Operating wallet.

  • buyback0.80 · protocol

    ETH stays ETH. wStock converts to USDG on Quotrons, then to the buyback wallet.

Analytics

/stats is the public protocol dashboard. It is not a price feed and not a promise of revenue.

/stats tiles
Volume24h / 7d / 30d
Protocol takeV · 1%
$HKT dropV · 1% · 10%
BuybackBurned $HKT

Not a price feed. Implied take uses the 1% schedule, not hook tax.

  • Volume windows: 24h / 7d / 30d / all, from GET /v1/protocol/stats.
  • Implied protocol take = volume × the 1% schedule (hook tax is extra and not in that KPI).
  • $HKT holder-drop estimate from volume, plus tokens sent / wallets from the indexer.
  • Pending buyback ETH on the distributor and burned $HKT from HkitBuyback BuybackBurned logs.

Reference

For developers

Everything on the site can be rebuilt from public chain data. The indexer is a convenience layer and can lag. Prefer same-origin /api/indexer on hookit.fun so CORS stays on the server.

Same-origin indexer
  1. /health

    Cursor, lag, last poll error

  2. /v1/tokens

    Catalog + markets[] + 24h windows

  3. /trades · /candles

    House tape. 5m default, 1m available

Indexer HTTP

indexer.hookit.fun
GET /health
GET /v1/protocol/stats
GET /v1/tokens
GET /v1/tokens/:address?poolId=
GET /v1/tokens/:address/trades?limit=50&offset=0&poolId=
GET /v1/tokens/:address/holders?limit=50
GET /v1/tokens/:address/candles?limit=200&poolId=&interval=5m|1m
  • Token summary includes markets[], marketCount, bondingPhase, realQuote, graduationQuote, hookModules, windows (5m/1h/6h/24h), and devBuy*.
  • Candles default 5m. Pass interval=1m for 60s buckets. Chart is mcap-based.
  • /health exposes cursor, lagBlocks, lastPollError.
  • On-chain: TokenLaunched, PoolManager Swap, bonding Bought / Sold / Graduated, StateView.getSlot0, LaunchToken.metadataURI.

Network

Production is Ink. Integration and CI still use Base Sepolia. Your wallet must match the app chain (Ink).

Production chain
ChainInk · 57073
GasETH
QuotesETH · USDG · wStocks
Network
Ink
Chain ID
57073
Gas
ETH
RPC
https://rpc-gel.inkonchain.com
Explorer
https://explorer.inkonchain.com
Supply
1,000,000,000 (both rails)
Master start FDV
~$5,000
Classic graduate
~4.2 ETH equivalent
Quotes
ETH, USDG, Quotrons wStocks
Site
https://www.hookit.fun

Contracts

Addresses the UI hardcodes for this build. They win over a stale deploy/ink/addresses.json. Vaults and the live MasterLaunchHook are not listed here — read them from the hook: floorVault(), feeEscrow(), buybackVault(), holderAirdropVault(), hktDropVault(). Old factories stay on-chain and are hidden from Explore.

Read vaults from the live hook
LaunchFactoryBondingFactorySwapRouterDistributorHkitBuybackPoolManager

UI hardcodes factories. Vault addresses come from floorVault(), feeEscrow(), hktDropVault(), …

LaunchFactoryActive Master launches
0xDCa9Ccee27Dc12256818dEFf316BA4B972b087a7
LaunchFactoryQueryPaginated launch index
0xeB76E32818331FC4CbAF1033d4949c9Ee1d851f0
BondingLaunchFactoryClassic rail
0xFEECD83d9ad44F6db03c531e78f1Bc6D807315d3
HookitSwapRouterRequired for hooked swaps
0x6889635F39c472802AbdE7Db791f2Ea48090091A
ProtocolRevenueDistributor
0x2F904D2C2dC5dc536F41Cf99BCF0Ac6034187179
HkitBuybackPermissionless execute → burn $HKT
0xa52e86ee01695d9F4883C48efF2972cf4be1C941
V4ClaimsRedeemerRedeem Holder Airdrop ERC-6909 claims
0xb497Aa20c231A234f24fe28F412b8637608661fb
Native tokenProtocol $HKT / current Ink native
0x964cE443c5E111Ea1b87a70166c6894aF3EddB08
Uniswap v4 on this chain
PoolManager
0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32
StateView
0x76Fd297e2D437cd7f76d50F01AfE6160f86e9990
V4 Quoter
0x3972C00f7ed4885e145823eb7C655375d275A1C5
Universal RouterNot used for hooked Hookit pools
0x112908daC86e20e7241B0927479Ea3Bf935d1fa0
Stable quoteUSDG
0xe343167631d89B6Ffc58B88d6b7fB0228795491D
ETH/USDWETH/USDt0 Uniswap v3 30m TWAP
0x4b286359a4e5739D414aD00D6A320F93fF2b6092

Onchain events

Index from the factory deploy block. Paginate getLogs — public RPCs time out on wide ranges.

Index these logs
  1. Launch

    TokenLaunched · MarketLaunched · Graduated

  2. Trade

    PoolManager.Swap · Bought / Sold

  3. Flywheel

    HktHolderDropVault.Dropped · BuybackBurned

  • LaunchFactory.TokenLaunched — Master (or custom hook) launch.
  • LaunchFactory.MultiLaunchConfigured / MarketLaunched — multi-pair.
  • BondingLaunchFactory.TokenLaunched / Bought / Sold / Graduated.
  • PoolManager.Swap — Master and graduated Classic trades.
  • HktHolderDropVault.Credited / Dropped — $HKT holder drop.
  • HkitBuyback.BuybackBurned — protocol $HKT burn.
  • FloorVault.Deposited / Redeemed.
  • GraduatedFeeHook.FeesAccrued / Swept — Classic creator fees.
  • FeeEscrow.Claimed — creator pull.
List Master launches (viem)
import { createPublicClient, http, parseAbiItem } from "viem";

const client = createPublicClient({
  chain: { id: 57073, name: "Ink", nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc-gel.inkonchain.com"] } } },
  transport: http(),
});

const launches = await client.getLogs({
  address: "0xDCa9Ccee27Dc12256818dEFf316BA4B972b087a7",
  event: parseAbiItem(
    "event TokenLaunched(uint256 indexed launchId, address indexed token, address indexed creator, bytes32 poolId, address hooks, bool customHook)",
  ),
  fromBlock: "earliest",
  toBlock: "latest",
});

Reading token state

Each launch has a numeric launchId. From there: token, pool, creator, bitmask, quote asset.

Two packed integers

launchId

Token, pool, creator, quote.

bitmask

Modules + tax + caps.

vestPacked

Buyback plan · airdrop plan.

Paginate launches
import { parseAbi } from "viem";

const factoryAbi = parseAbi([
  "function getLaunchPage(uint256 startId, uint256 limit) view returns ((address token, address creator, address hooks, bool customHook, bytes32 poolId, int24 tickLower, int24 tickUpper, uint128 liquidity)[], uint256[] bitmasks, uint64[] timestamps, uint256 total)",
  "function launchQuote(uint256 launchId) view returns (address)",
  "function launchedAt(uint256 launchId) view returns (uint64)",
]);

const [page, bitmasks, timestamps, total] = await client.readContract({
  address: factory,
  abi: factoryAbi,
  functionName: "getLaunchPage",
  args: [1n, 50n],
});

Unpack the bitmask for modules. vestPacked is a separate uint256 (low 128 = buyback plan, high 128 = airdrop plan). metadataURI holds image and socials. Charts and holder ranks need the indexer or your own Transfer scan.

Bitmask layout (BitmaskConfig)
bit 0        ANTI_SNIPE
bit 1        BACKED_FLOOR
bit 2        ANTI_MEV
bit 3        MAX_TX
bit 4        MAX_WALLET
bit 5        DYNAMIC_FEES
bit 6        BUYBACK_VESTING
bits 7-22    hookTaxBps
bits 23-38   antiSnipeDurationSeconds
bits 39-54   maxTxBps
bits 55-70   maxWalletBps
bits 71-94   floorAllocationBps
bits 95-110  initialSnipeTaxBps
bit 111      AUTO_BURN
bit 112      DEEPEN_LPS
bits 113-128 autoBurnBps
bits 129-144 deepenLpsBps
bit 145      HOLDER_AIRDROP
bits 146-161 holderAirdropBps
bit 162      CREATOR_SHARE_TO_HOOK
bits 163-194 buybackVestingDurationSeconds
bits 195-210 dynamicFeeMinTotalBps
bits 212-227 dynamicFeeDepthSaturationBps
bits 228-259 holderAirdropEpochSeconds

Pricing

Master / graduated spot is sqrtPriceX96. Classic pre-graduation is virtual reserves. USD multiplies by the chain feed.

Spot → FDV
  1. 01

    sqrtPriceX96

    StateView.getSlot0

  2. 02

    P quote/token

    (√P / 2⁹⁶)²

  3. 03

    × 1B

    Fixed supply

  4. 04

    × FX

    ETH/USD or wStock/USDG

Read pool price from StateView
const [sqrtPriceX96] = await client.readContract({
  address: stateView,
  abi: parseAbi(["function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)"]),
  functionName: "getSlot0",
  args: [poolId],
});

const ratio = Number(sqrtPriceX96) / 2 ** 96;
const priceQuotePerToken = tokenIsCurrency0 ? ratio * ratio : 1 / (ratio * ratio);

Floor: FloorVault.floorPriceX18(token). UI liquidity is TVL in USD, not raw Uniswap L. Ink ETH/USD is a guarded WETH/USDt0 Uniswap v3 30-minute TWAP (max observation age 1 hour).

Risks

Tokens are user-created. hookit does not vet tickers, teams, or hook combinations.

Assume the worst print

Zero

Most tickers go to nothing.

Copycats

Verify the contract every time.

Thin book

Printed price is not an exit.

  • You can lose everything. Prices are violent and many tokens go to zero.
  • Copycat names, logos, and socials are normal. Check the contract every time.
  • Contracts may have bugs. Not every configuration is audited.
  • Custom hooks (when enabled) can honeypot, tax, or block sells.
  • Low liquidity means the printed price is not an exit.
  • RPC, wallet, and indexer outages show stale or empty UI.
  • Limit/stop alerts need your browser open.
  • Explore flags original vs copycat tickers. A green OG badge is not a vet.

Support

Bugs and integration questions: https://github.com/deadpouule/hookit. Include chain, token, tx hash, and wallet.

Where to file

No support SLA. Software is early.

Terms

Full terms and privacy live on /terms and /privacy. Short version: software only, no custody, no advice, no refunds.

Software only

No custody

The site never holds keys.

No advice

Not a listing or a vet.

No refunds

Launch fee and gas stay spent.

  • Brand: hookit (hookit.fun).
  • Do not imply partnership, listing, or audited status.
  • On-chain data is public. You are responsible for how you use it.
Checking…