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 throughKnow 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
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:
The swap still goes through. You just get less, and nothing on the swap screen says why.
A deposit that cannot come back out, or comes back lighter than it went in.
One fee when you look, another when you trade. The pool key only says the hook decides.
An owner can replace the code behind the address, or flip a switch the code already has.
The last fourteen bits of a hook's address are its permissions. The PoolManager calls nothing else, so this is the first thing read.
Selectors, proxy slots, an owner, DELEGATECALL. Named from the public signature database, so an unpublished hook still reads in words.
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.
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.
Whether the hook may take from swaps or from LPs at all. Four of the fourteen permission bits allow it.
A swap each way through the pool. Anything missing beyond the pool fee is what the hook took. A refused sell is a fail.
Liquidity is added and taken straight back out. It should come back whole.
A fixed fee is written in the pool key. A dynamic one is whatever the hook last set; above ten percent it fails.
An owner, and the functions an owner usually has: setters, pause, withdraw, blacklist.
Not a proxy, no DELEGATECALL, no SELFDESTRUCT. What you scanned is what will run.
Each callback is called directly by an outside address. It should refuse.
How many pools use it and for how long. Age is not safety, but a hook from this morning has proven nothing.
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 throughWhether liquidity comes back out, whole, and whether the hook can charge you on the way in or out.
add 1e12 liquidity
remove → came back wholeOne 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, takePpmIt 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 checksYour 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.