ETH / PM
fee 0%- Swap ETH → PMrefused: MarketClosed
- Swap PM → ETHrefused: MarketClosed
- Add, then remove liquiditycame back whole
pool 0xffc40187a83eb4f1810a0ae8fc54b6816aa0b12892765c426568d0725d178229
Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
6 pools use this hook, the first one 18 d ago.
The address enables before swap returns delta, after swap returns delta. The hook is allowed to take; the next two checks measure whether it does.
One direction works and the other is refused (MarketClosed). You may be able to buy and not sell.
Liquidity added and removed in the same block came back whole.
A fixed fee of 0%, written in the pool key.
Owned by 0xD0aeacA2d527A62E71fc80C37B1a0dA3108d4728. Owner-style functions: setOwner, claimPlatformFees, setFeeWallet, BURN, setRouter, claimCreatorFees.
Not a proxy, no DELEGATECALL, no SELFDESTRUCT.
Each callback refused a call that did not come from the PoolManager.
6 pools over 17 days.
Measured at block 93,172,694. A hook with an owner or a dynamic fee can behave differently later; scan again before a large trade.
A v4 hook's permissions are the last fourteen bits of its address. The PoolManager calls only what they switch on.
A small swap each way and a liquidity round trip, run through the PoolManager and this hook inside a call that is never sent. The pool fee is expected; anything else missing is the hook.
pool 0xffc40187a83eb4f1810a0ae8fc54b6816aa0b12892765c426568d0725d178229
pool 0xc1e07e29ea826d614013392329df526a3ef656d682376597611ed33d8fdf3e8d
Selectors found in the dispatcher, named from the public signature database. Red ones are what an owner usually keeps for itself.