baitSubmit a hook

How this works

A terminal for Uniswap v4 hooks. Projects, not hook addresses. Figures refreshed nightly; trades live.

What you are looking at

A Uniswap v4 pool can name a hook: a contract that runs before or after swaps and liquidity changes and can change fees, block trades, take a cut or run an auction. Thousands of hooks are deployed; most see no use. Bait finds every hook with a live pool on the chains it covers, groups hooks that belong to one team into a project, and shows how much people trade through it, how many wallets, and whether the volume looks like real use.

Every figure is a closed UTC day, refreshed nightly; a project page says which day. A dash means unknown, never zero. Badges explain themselves when you tap "What these badges mean". Nothing here is an audit, an endorsement or trading advice, and Bait never executes trades.

Method

Identity comes from the public hooklist registry and from the chain: a hook that is not in the registry is found from its pools, and its permissions come from the bits in its address. Usage comes from Bait's own indexer, which reads every hooked Uniswap v4 pool and the last 14 days of swaps on 16 chains through Envio HyperSync, valued at current DefiLlama prices. Where the indexer has not caught up, or a hook keeps its own accounting, GeckoTerminal's daily figures stand in. GeckoTerminal also supplies pool TVL and rolling 24-hour figures, and public RPC nodes resolve hooks and read their bytecode. The feed covers ten of those chains; the rest appear under Just launched. Figures are closed UTC days, refreshed by a nightly run; a project page says which day its figures run through. Contract names come from Blockscout, Sourcify and Routescan. Links come from Exa, last 30 days. Team, site and audit details for new projects come from Parallel. The one-line "what it does" and the two-sentence "why people care" are written by Claude from those sources, rewritten only when the signals change; the page shows when.

Activity

Buys and sells are GeckoTerminal's rolling 24-hour counts. Top wallets come from GeckoTerminal's latest ~300 trades in each of Bait's 30 busiest pools, once a day. Distinct wallet counts come from the indexer where it has caught up, otherwise from those trades; a "≤" marks an upper bound. The live trade feed on a project page reads GeckoTerminal's recent trades for the project's busiest pool, hides trades under $10, and refreshes every minute while you watch. Wallet labels and the "Smart money" pill come from Nansen labels collected through early October 2026. "Wallets 7d" and the top wallet's share of swaps come from the indexer and are shown at any size, with no threshold; they are unknown unless every chain the project is on has caught up through the week. A project page names the wallet that deployed each hook (from the registry, or the explorer's contract creator) and the share of the week's swaps those wallets made. The same figures are available as JSON from the read API: /api/v1/projects, /api/v1/projects/[slug] and /api/v1/hooks/[address]. The field reference is in the repository under docs/api.md.

Grouping

Thousands of hook addresses collapse into projects. Hooks that share a hooklist name are one project, unless unrelated teams share that name (deployer clashes on one chain and no shared bytecode). A verified contract name is only a candidate: those hooks join on evidence, the same bytecode (not a shared proxy) or the same deployer (not a factory). Hooks with generic names, such as template defaults, stay apart. The few left with only a description are classified once by a small model. Factories that deploy one hook per pool are one card with the hook count as a stat. Renamed and merged projects keep their old links.

Categories

Dynamic fee · Launchpad · Orders (limit, TWAMM) · LP management · Compliance · Oracle · MEV / LVR · Lending · Gaming / NFT · Other

A category comes from the generated description where one exists. Until then it is guessed from what the chain and the registry already say: a dynamic-fee property or pool, a factory or a hook with many pools, or words in the hook's own name or description (limit order, lending, auction, oracle, KYC, vault, NFT). A category written from the description wins; where the description found none, the guess applies.

Scoring

Wash-like volume

A project gets the red "Wash-like volume" badge when pools carrying at least half its volume match one of these rules. It stays in All with its page, and never reaches Trending, New, Routable, movers, Leaders or the weekly digest.

Wallet counts are lower bounds and unknown TVL is never treated as zero. A private or RFQ hook with few counterparties and real liquidity is not flagged unless one or two wallets carry it. TVL is GeckoTerminal's valuation of a pool at its own prices, so Bait shows it as unknown when it cannot be liquidity: a pool with a lookalike token, or $1M or more that traded under 0.1% of itself in a fully measured week (usually a launch's own supply).

Routable

The Uniswap app only routes through hooked pools whose hook is allowlisted. Per Uniswap's published rule, a hook is allowed automatically unless its address starts with 0x91, or it uses beforeSwapReturnsDelta, afterSwapReturnsDelta or a dynamic fee. Bait computes this from the permission bits in the hook address (the chain enforces them) and also treats afterAddLiquidityReturnsDelta and afterRemoveLiquidityReturnsDelta as blocking, which is stricter than the published rule. Uniswap also publishes the hooks it approved by hand and the hooks it never routes through, in its uniroute-public allowlist and denylist. Bait reads both every few hours: a denylisted hook never counts as routable, an allowlisted one always does, and every other hook is judged by the rule. The Routable tab lists projects with at least one hook or pool that passes. Hooks without a known pool show Routing unknown. Not in hooklist means we found the hook from its pools, not from Uniswap's registry; its name and permissions come from the chain. The badge is a rule, not a guarantee: Bait has not checked current Uniswap routing or quote availability, and it does not execute trades.

Disclaimers

Submit a hook

To get a hook listed, open a pull request on the Uniswap hooklist repository.