Fee sharing hook on Ethereum
Uniswap v4 Hook Contract 0x11f53f6eb1444efe1071c54e9694da1e17b4abc4 on Ethereum · Fee sharing
- Volume (24h)
- $1.74K
- Value locked (TVL)
- $0
- All-time volume
- $1.74K
- Pools using this hook
- 1
- Swaps (24h)
- 18 (13 traders)
- Total swaps
- 18
What it does
This hook takes a fee on swaps through a return delta and routes the collected fees to a configured recipient, so swappers pay that fee on each trade while liquidity providers are not directly charged by it, though the exact rates and direction of any trade-size or price-direction effect could not be confirmed from the bytecode.
How it works step by step
- Holds a Uniswap v4 pool position and forwards trading fee revenue according to a stored project and genesis configuration
- Activates once via activate(address) which sets the stored address and a one-time activated flag, reverting with AlreadyActivated on repeat calls
- Uses a self-unlock pattern through unlock/unlockCallback to call modifyLiquidity, settle, take and sync on the pool manager
- Collects accrued fees for a recipient via collectFees(address,address) and lets a caller reclaim a position amount via reclaim(uint128,address)
- Tracks a capacity value and entry/market tick values, and reads a pool key and hook permissions
- Gates liquidity additions and removals and performs an afterSwap accounting step that can return a delta to the pool manager
- Swap behaviour
- beforeSwap and afterSwap run on every swap. afterSwap can return a balance delta (afterSwapReturnDelta is enabled), so the hook can take a share of swap output in the pool currency; the exact fee rate is held in a TRADE_FEE_BPS constant that is not decoded here.
- Liquidity behaviour
- beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes, and afterRemoveLiquidity runs after removals. The hook itself manages a single protocol-owned position it creates through the unlock flow; external provider liquidity handling is not fully decoded.
- Fee behaviour
- Trading fees are routed by the hook rather than left to the pool's static fee: a TRADE_FEE_BPS constant is read and fees are collected and distributed through collectFees and reclaim. The exact split between project and other recipients cannot be determined from bytecode alone.
- Owner & admin controls
- activate(address) can be called once to set the configured address; no owner or pause function was clearly decoded. Whether reclaim and collectFees are restricted to a privileged role could not be confirmed from bytecode.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta
beforeInitialize validates pool setup; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; afterRemoveLiquidity handles post-removal accounting; beforeSwap and afterSwap run swap logic; afterSwapReturnDelta lets the hook take a delta from swap output.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: A privileged caller, if one exists for reclaim or collectFees, could redirect accrued fees or position value to an address of their choosing; the source is needed to confirm access control.
Risk to user funds: The hook holds a liquidity position and can take a delta from swap output, so user swap proceeds are exposed to the fee logic; funds held in the position can be withdrawn through reclaim.
Security findings
- [medium] Return delta takes swap output: afterSwapReturnDelta is enabled and afterSwap moves currency through the pool manager, so the hook can take a share of user swap output.
- [medium] Authorisation of reclaim and collectFees unclear: reclaim(uint128,address) and collectFees(address,address) move position value and fees to an address argument; without verified source it is not clear whether these are restricted to a privileged caller.
- [low] One-time activation: activate(address) sets stored configuration once and reverts with AlreadyActivated afterwards, so the configured address is fixed after the first call, but the first caller's authority to set it is not confirmed.
Contract details
- Verified source
- No
- Bytecode size
- 9,925 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, fee-sharing, moves-currency, return-delta, self-unlock
Pools using Fee sharing hook
- ETH / CBOARD (0.00% fee) — 24h volume $1.74K, TVL $0, 18 swaps today