FeeHook on Ethereum
Uniswap v4 Hook Contract 0xa8c2546396c7ea55b16d425efc52ff34353300cc on Ethereum · Fee sharing · Verified contract
- Volume (24h)
- $147.04K
- Value locked (TVL)
- $10.20K
- All-time volume
- $147.04K
- Pools using this hook
- 1
- Swaps (24h)
- 596 (261 traders)
- Total swaps
- 596
What it does
Takes a fixed 1% fee on the ETH side of every trade in an ETH pool and sends the accumulated fees to a fixed recipient, without ever blocking a swap.
This read was written for the hook 0x906b…40cc on Ethereum and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
How it works step by step
- Charges 1% of the ETH side of each swap in pools where ETH is currency0
- Fee on exact-ETH-input or exact-coin-output swaps is taken in beforeSwap on the requested amount
- Fee on exact-coin-input or exact-ETH-output swaps is taken in afterSwap on the realized ETH delta
- Accumulates fees as ERC-6909 ETH claims held by the hook in the PoolManager
- collect() is callable by anyone and forwards all accumulated ETH to the immutable feeRecipient
- Swap behaviour
- On ETH-fixed swaps, beforeSwap takes 1% of the ETH amount requested. On coin-fixed swaps, afterSwap takes 1% of the ETH amount realized by the swap. Non-ETH-first pools are not charged.
- Liquidity behaviour
- No liquidity callbacks. The hook has no permission for add or remove liquidity and does not affect LP positions.
- Fee behaviour
- Takes a fixed 1% (10,000 of 1,000,000 pips) of the ETH side of every swap in an ETH pool where ETH is currency0. For ETH-fixed swaps the fee is computed on the amount asked for in beforeSwap; for coin-fixed swaps it is computed on the ETH delta in afterSwap. The fee is minted to the hook as an ETH claim in the PoolManager and sent to feeRecipient on collect(). Non-ETH-first pools pay no hook fee. The pool's own fee still goes to liquidity.
- Owner & admin controls
- No owner or admin on the hook: FEE_PIPS is a constant and feeRecipient is immutable, with no setter, pause or upgrade path. Anyone can call collect(), which only forwards accrued ETH to the fixed recipient.
Enabled Uniswap v4 callbacks
beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeSwap: takes the 1% ETH fee on ETH-fixed swaps by returning a delta and minting the fee claim. afterSwap: takes the 1% ETH fee on coin-fixed swaps using the realized ETH delta. beforeSwapReturnDelta and afterSwapReturnDelta: allow those callbacks to adjust the amounts the swapper pays or receives so the fee is collected from the swap itself.
Security & trust assessment
Risk level: low (verified source, high confidence).
Who controls it: No privileged key exists, so no owner can alter the fee, redirect proceeds or pause trading. The only fixed party is feeRecipient, which cannot be changed after deployment.
Risk to user funds: The hook holds only ETH claims accrued from its own fee, kept inside the PoolManager and not in the contract itself. It cannot touch LP funds or pool reserves beyond the 1% fee, and it has no function that moves arbitrary tokens.
Security findings
- [info] Hook cannot block swaps: The hook never reverts for trade size, direction or price. Requests above 2^128 wei are charged on the capped amount, so the swapper's own settlement fails rather than the hook blocking the trade.
- [low] Collection depends on recipient accepting ETH: collect() is permissionless and sends the entire pending balance to the immutable feeRecipient. If the recipient could not receive ETH the call would revert, but trading is unaffected because fees only accumulate as claims.
- [info] Fixed 1% levy on ETH pool swaps: The fee is a 1% charge on the ETH side of every swap in any ETH pool that uses this hook. Pools that adopt it pay a non-negotiable extra cost on top of the pool fee.
Contract details
- Verified source
- Yes (FeeHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 2,286 bytes
- Upgradeable proxy
- No
- Detected patterns
- fee-sharing, moves-currency, return-delta, self-unlock
Pools using FeeHook
- ETH / TAPE (1.00% fee) — 24h volume $147.04K, TVL $10.20K, 596 swaps today