Read any v4 hook.
Even the censored ones.

Know the hook before you swap.

A Uniswap v4 hook runs inside every swap of its pool, and most never publish their code. censoredHooks reads them anyway: the permissions mined into the address, the bytecode, then a real swap through the pool to measure what the hook takes.

A hook address or a GitHub repo. How it reads a hook

La Tour, The Fortune-Teller
$CENSOREDpre-launch on Pons, CA posted here firstv4 PoolManager0x8366…0951censoredHooks · Robinhood Chain · 4663

The hook is in your swap. You never saw its code.

In v4 every pool can carry a contract that the PoolManager calls around each swap and each deposit. Launchpads put one on every coin they make. Most were never verified, so the only people who know what they do are the people who wrote them.

Four things a hook can do to your money:

  1. beforeSwapReturnDelta · afterSwapReturnDelta

    Take a cut of every swap

    The swap still goes through. You just get less, and nothing on the swap screen says why.

  2. beforeRemoveLiquidity · afterRemoveLiquidityReturnDelta

    Keep LPs from leaving

    A deposit that cannot come back out, or comes back lighter than it went in.

  3. beforeSwap on a dynamic-fee pool

    Set the fee at every swap

    One fee when you look, another when you trade. The pool key only says the hook decides.

  4. proxy · owner · DELEGATECALL

    Become other code

    An owner can replace the code behind the address, or flip a switch the code already has.

The address. The bytecode. A real swap.

The method, in full
  1. 01

    The address

    The last fourteen bits of a hook's address are its permissions. The PoolManager calls nothing else, so this is the first thing read.

  2. 02

    The bytecode

    Selectors, proxy slots, an owner, DELEGATECALL. Named from the public signature database, so an unpublished hook still reads in words.

  3. 03

    The swap

    A swap each way and a liquidity round trip through the real pool, inside a call that is never sent. What is missing is what the hook took.

The source can stay censored. What it does to a swap cannot.

A small probe contract is lent to an empty address for a single call. It swaps through the pool and its hook, then reverts with what it was given, so nothing settles and no tokens are needed. With the price, the liquidity and the fee, the honest output is known to the unit. The difference is the hook.

Bits read
14
Checks
8
Swaps a pool
2
What the author sees, then what you see. A loop, not data.

Eight checks. The same for every hook.

What each one looks for
  • 01Read from the address
    Permissions that touch your money

    Whether the hook may take from swaps or from LPs at all. Four of the fourteen permission bits allow it.

  • 02Measured
    What it takes from a swap

    A swap each way through the pool. Anything missing beyond the pool fee is what the hook took. A refused sell is a fail.

  • 03Measured
    LPs can get out

    Liquidity is added and taken straight back out. It should come back whole.

  • 04Read from the pool
    The fee is the fee

    A fixed fee is written in the pool key. A dynamic one is whatever the hook last set; above ten percent it fails.

  • 05Read from the bytecode
    No one holds the switch

    An owner, and the functions an owner usually has: setters, pause, withdraw, blacklist.

  • 06Read from the bytecode
    The code cannot change

    Not a proxy, no DELEGATECALL, no SELFDESTRUCT. What you scanned is what will run.

  • 07Called from a stranger
    Only the PoolManager can call it

    Each callback is called directly by an outside address. It should refuse.

  • 08Read from the chain
    Track record

    How many pools use it and for how long. Age is not safety, but a hook from this morning has proven nothing.

For people, and for the bots that trade for them.

TRADERS

Before you swap

A fresh memecoin pool with a hook nobody published. Paste the hook, see what it takes each way and whether a sell goes through.

hook → takes 4% buy, 4% sell sell → goes through
LPS

Before you deposit

Whether liquidity comes back out, whole, and whether the hook can charge you on the way in or out.

add 1e12 liquidity remove → came back whole
BOTS AND AGENTS

Before you route

One call returns the verdict, the score and every measurement as JSON. A router or a trading agent can skip a pool that fails.

GET /api/scan?hook=0x… → verdict, score, checks, takePpm

A verdict is not a promise. It is a measurement.

It says what this hook did to a swap and to a deposit at one block, and who can change that. An owner can change it tomorrow. Scan again before a large trade.

Read the checks
FOR HOOK BUILDERS

Keep your hook censored. Show it is safe.

Your report is already public: anyone can scan your address. Pass the eight checks without publishing a line. Next: a private review of the source for builders who want more than the bytecode can say, signed and attached to the hook's page.

  • onlyPoolManager on every callback
  • No proxy, no DELEGATECALL
  • Owner renounced, or behind a timelock
  • Return deltas bounded and stated
  • Withdrawals never refused

Know the hook before you swap.

Launch app