FeeEscrow
Default. Claim quote on the token page.
hookit docs
Dual-rail Uniswap v4 launchpad on Ink. Quote-only fees, locked LP, modular hooks. No custody. No hidden steps.
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.
Master
Classic
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.
hookit.fun — marketplace, launch wizard, token desk
HookitSwapRouter — hooked swaps, composite quote legs
MasterLaunchHook / GraduatedFeeHook — quote-only fees + modules
Uniswap v4 PoolManager — fee tier 0, locked liquidity
Chain 57073 — ETH gas, USDG + Quotrons wStocks as quotes
$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.
Every Master / graduated pool
10% of the 1% base
Not $HKT — the launched token
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.
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.
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.
| $HKT drop (mandatory) | Holder Airdrop (optional module) | |
|---|---|---|
| Who gets paid | Live $HKT holders | Holders of that launched token |
| What they get | The launched token | Quote (ETH / USDG / wStock) |
| Funded by | 10% of the 1% base | A % of the hook-tax pot |
| Toggle | None — baked into the 1% base | Packed at launch |
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.
Six steps. Bitmask and vestPacked freeze at launch.
Use Ink. You need gas plus the 0.0005 ETH launch fee.
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.
Anti-MEV, Anti-Snipe, Max Tx, Max Wallet.
Holder Airdrop, Auto-Burn, Backed Floor, Buyback Vesting, Deepen LPs.
Dynamic Fees or Fixed Fees, optional Creator → Hook, then the hook-pot 100% split.
Master deploys token + pool + locked LP. Classic opens the curve. Optional same-tx dev buy, capped at 2.5% of supply.
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.
Anti-MEV, max-tx, max-wallet. Compute 1% + hook tax + snipe.
Fee is pulled from the quote leg only. Never a memecoin tax.
Hook pot → modules. Base 1% → 60 / 10 / 30.
Pending auto-burn buy+burn and Deepen LPs mint.
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).
$TICKER
USDG30% poolSupply splits by bps (must sum to 10_000). Same Master bitmask on every pool.
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.
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.
Powered by Quotrons

wStock pools take USDG on the buy panel. HookitSwapRouter bridges on an allowed Quotrons pool.
| Ticker | Name |
|---|---|
| wAAPLx | Apple |
| wAMZNx | Amazon |
| wGOOGLx | Alphabet |
| wMCDx | McDonald's |
| wMSTRx | Strategy |
| wNFLXx | Netflix |
| wNVDAx | NVIDIA |
| wSPYx | S&P 500 ETF |
| wTSLAx | Tesla |
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.
Sign buy or sell
Required — generic DEX UIs skip hook accounting
Fee tier 0. Spot is sqrtPriceX96
Quote fee, modules, then 60 / 10 / 30
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.
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).
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.
Classic only. Master already has a pool.
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.
Every swap pays a quote-only fee (ETH, USDG, wStock, …). You never pay the fee in the launched memecoin.
Every swap feeds the same loop. Hook tax is extra and only funds modules. The 1% base never changes its 60 / 10 / 30 split.
A 1 ETH buy on a Master pool with 1% base + 2% hook tax. Auto-burn 80% and floor 20% of the hook pot.
| Slice | Quote | Where it goes |
|---|---|---|
| Base 1% | 0.010 ETH | 0.006 creator · 0.001 $HKT drop · 0.003 protocol |
| Hook tax 2% | 0.020 ETH | 0.016 burn buyback · 0.004 FloorVault |
| Trader pays | 1.030 ETH | 1.000 into the pool + 0.030 fees |
0.0005 ETH to the factory, plus gas. Not refundable. Separate from swap 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.
Default. Claim quote on the token page.
If vesting is on. Clock or FDV unlock.
If Creator → Hook. No creator claim.
The 10% $HKT drop and 30% protocol cut never go to the creator.
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
every swap the floor goes up — so the price can only go up. More volume = higher floor
share of hook tax minted into the pool as extra liquidity. Deeper book for whales and traders
same-block opposing swap cooldown
caps each wallet between 0.1% and 2.5% of total supply. Fixed at launch
caps each swap between 0.1% and 2.5% of total supply. Fixed at launch
decay tax on opening buys, fades over the launch window
Tokenomics
creator proceeds vest on a timer, or until a market-cap target
share of hook tax buys tokens from the pool and burns them after each swap
Rewards
Every swap accrues. Holders get quote or stocks on a time window or FDV target
send your 60% of the base 1% into the hook pot instead of claiming escrow
Trading Fees
Swap fee scales with in-range LP depth consumed. Larger trades pay more, no oracle
flat extra fee on every swap. Deducted in quote only, zero sell pressure
High extra buy fee at open. Linear decay to 0 over the window you set. Snipers pay the most in the first seconds.
One swap per tx.origin per pool per block. Same-block buy→sell or sell→buy reverts. Not a private mempool.
Caps a single swap at 0.1%–2.5% of supply. Fixed at launch. Oversized exact-input swaps revert.
Caps how much one address can hold after a buy, same 0.1%–2.5% range. Checked post-transfer.
Quote vault + ratchet redeem price. Deep dive in the Backed Floor section.
Hook-tax share minted back into the launch LP range as extra liquidity. Thickens the book. Sits in Protection, not Rewards.
Hook-tax share buys the token from its own pool and burns it. Failed nested buy stays queued.
Creator’s 60% of the 1% base goes to BuybackVault. Time vest or unlock-at-FDV. Full write-up below.
Hook pot → HolderAirdropVault in quote. Epoch or FDV target, pro-rata by that token’s balance. Full write-up below.
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.
Flat extra hook tax on every swap, quote-only. Mutually exclusive with Dynamic Fees.
Hook tax ramps with in-range LP depth consumed. No oracle. Full write-up below.
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.
Example — 1 ETH buy, 5s window, 98% open tax
Buy-only. Same 60 / 10 / 30 split as the 1% base — not hook tax.
τ_snipe(t)τ0 · (1 − (t − t0) / T)0 after T. Applied on buys only.
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.
Example — Alice in one block
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).
This swap 1.05%Cap 2.50%
Example — 1B supply, 1% max tx = 10M tokens
0.1%–2.5% of supply. Oversized exact-input reverts.
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.
Wallet after buy 2.20%Cap 2.50%
Example — 2.5% max wallet = 25M tokens
Same 0.1%–2.5% range. Sells are not blocked by this cap.
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.
Vault quote ÷ circulating. Each swap can lift it. Redeem burns tokens and pays quote — remaining holders keep the new floor.
P_floorV_quote / S_circQuote wei in the vault over circulating token wei. Scaled 1e18 on-chain as floorPriceX18.
Redeemq = amount · V_quote / S_circFloorVault.redeemFloor(token, amount). Burns tokens, pays quote, round down. Remaining holders keep a floor that never decreases.
Premium(P_spot − P_floor) / P_floorHidden while the vault is dust versus launch FDV, so a few cents of collateral is not a +30,000,000% badge.
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.
Example — 2% hook tax, 100% to Deepen LPs
Hook-tax quote is minted back into the same launch ticks. Not paid to holders.
A share of the hook pot buys the launched token from its own pool after the swap and burns it (dead address).
Example — 2% hook tax, 80% to Auto-Burn
Hook tax buys the meme from its own pool and sends it to the dead address. Not the $HKT buyback.
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.
Example — $100k volume, 60% of the 1% base = $600 locked
Cannot combine with Creator → Hook. The 10% $HKT drop stays mandatory.
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.
Example — 2% hook tax, 50% to airdrop, you hold 2% of supply
Optional module. Not the mandatory $HKT drop. You receive ETH / USDG / wStock, not the meme.
payout_ipot · bal_i / Σ balQuote pot for this epoch × wallet balance of the launched token over circulating (exclusions applied).
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.
Example — 2% fixed hook tax
Mutually exclusive with Dynamic Fees. 1% + tax ≤ 10%.
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.
Example — 10 ETH in-range depth, extra tax 1% → 9%
Same orange as the hook. No oracle. Empty book stays at τ_min so the first buy does not revert.
cn / dQuote 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) · rAdded on top of the 1% base. Empty depth stays at τ_min so a first buy does not 100% revert.
The identities the contracts enforce. BPS_DENOMINATOR = 10_000. Amounts are integer wei.
fee_total1% + τ_hook + τ_snipeCapped 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 protocolMandatory. Applied to the 1% base and to the snipe take. Hook tax never uses this split.
cn / dQuote 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) · rNo oracle. Empty depth stays at τ_min so a first buy does not 100% revert.
P(sqrtPriceX96 / 2^96)^2Quote per token if the launch token is currency0; invert if it is currency1.
FDVP · 10^9 · FXFX is ETH/USD TWAP or Quotrons wStock/USDG (USDG ≈ $1).
kQ_virt · T_virtVirtual 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-eqOr the same USD value in USDG / wStock. 20% of supply seeds full-range LP.
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.
ops0.20 · protocolOperating wallet.
buyback0.80 · protocolETH stays ETH. wStock converts to USDG on Quotrons, then to the buyback wallet.
/stats is the public protocol dashboard. It is not a price feed and not a promise of revenue.
Not a price feed. Implied take uses the 1% schedule, not hook tax.
Reference
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.
Cursor, lag, last poll error
Catalog + markets[] + 24h windows
House tape. 5m default, 1m available
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|1mProduction is Ink. Integration and CI still use Base Sepolia. Your wallet must match the app chain (Ink).
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.
UI hardcodes factories. Vault addresses come from floorVault(), feeEscrow(), hktDropVault(), …
0xDCa9Ccee27Dc12256818dEFf316BA4B972b087a70xeB76E32818331FC4CbAF1033d4949c9Ee1d851f00xFEECD83d9ad44F6db03c531e78f1Bc6D807315d30x6889635F39c472802AbdE7Db791f2Ea48090091A0x2F904D2C2dC5dc536F41Cf99BCF0Ac60341871790xa52e86ee01695d9F4883C48efF2972cf4be1C9410xb497Aa20c231A234f24fe28F412b8637608661fb0x964cE443c5E111Ea1b87a70166c6894aF3EddB080x360E68faCcca8cA495c1B759Fd9EEe466db9FB320x76Fd297e2D437cd7f76d50F01AfE6160f86e99900x3972C00f7ed4885e145823eb7C655375d275A1C50x112908daC86e20e7241B0927479Ea3Bf935d1fa00xe343167631d89B6Ffc58B88d6b7fB0228795491D0x4b286359a4e5739D414aD00D6A320F93fF2b6092Index from the factory deploy block. Paginate getLogs — public RPCs time out on wide ranges.
TokenLaunched · MarketLaunched · Graduated
PoolManager.Swap · Bought / Sold
HktHolderDropVault.Dropped · BuybackBurned
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",
});Each launch has a numeric launchId. From there: token, pool, creator, bitmask, quote asset.
Token, pool, creator, quote.
Modules + tax + caps.
Buyback plan · airdrop plan.
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.
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 holderAirdropEpochSecondsMaster / graduated spot is sqrtPriceX96. Classic pre-graduation is virtual reserves. USD multiplies by the chain feed.
StateView.getSlot0
(√P / 2⁹⁶)²
Fixed supply
ETH/USD or wStock/USDG
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).
Tokens are user-created. hookit does not vet tickers, teams, or hook combinations.
Most tickers go to nothing.
Verify the contract every time.
Printed price is not an exit.
Bugs and integration questions: https://github.com/deadpouule/hookit. Include chain, token, tx hash, and wallet.
github.com/deadpouule/hookitChain · token · tx hash · wallet. No SLA.
No support SLA. Software is early.
Full terms and privacy live on /terms and /privacy. Short version: software only, no custody, no advice, no refunds.
The site never holds keys.
Not a listing or a vet.
Launch fee and gas stay spent.