Dynamic fee hook on Base

Uniswap v4 Hook Contract 0xeec2dbc551bd9b6d0d3497c1ad09d7faf5baa8c0 on Base · Dynamic fee

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
0

What it does

An upgradeable, unverified hook that restricts who can add liquidity and charges an admin-adjustable swap fee sent to a treasury, so all traders pay a fee whose maximum cannot be confirmed.

This read was written for the hook 0xe278…e8c0 on Robinhood Chain 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

  • Runs as an upgradeable proxy: the owner can replace the hook's code at any time.
  • Checks pool setup when a pool is created and restricts who may add liquidity (reverts with an unauthorized liquidity provider error).
  • Charges a configurable fee during swaps (stored in basis points) and sends it to a treasury, possibly unwrapping WETH to ETH.
  • Has a setter for the fee value and a one-way switch that changes fee state, but exact caps cannot be confirmed from bytecode.
Swap behaviour
Before and after each swap the hook reads a stored fee setting and pool configuration and may take tokens from the PoolManager to pay a treasury. Because swap return deltas are disabled, it cannot directly deduct from swap amounts via deltas, and the exact fee mechanics are unverified.
Liquidity behaviour
Adding liquidity appears to be restricted to authorized providers, so not everyone can LP. Remove-liquidity callbacks are disabled in the current address, so withdrawals are not hooked, though the proxy code can be upgraded.
Fee behaviour
A fee in basis points is stored in a 16-bit value (up to 655.35% theoretically) and can be changed by a setter; no cap is visible from bytecode. Collected amounts appear to go to a treasury address.
Owner & admin controls
A privileged caller can set the fee basis points, toggle a fee flag, and initialize stored addresses; the proxy admin can upgrade the implementation entirely. No hard fee cap is verifiable.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap

beforeInitialize: validates pool setup; beforeAddLiquidity: gates which addresses can add liquidity; beforeSwap: applies fee/pool logic; afterSwap: settles and moves fee tokens to the treasury.

Security & trust assessment

Risk level: high, estimated (decoded bytecode, low confidence).

Who controls it: The proxy admin can swap the hook's code at will, and an admin can change the swap fee without a visible cap. Liquidity provision is restricted to authorized addresses.

Risk to user funds: The hook takes fee tokens from the PoolManager during swaps and sends them to a treasury, with no verifiable maximum. Withdrawals are currently not hooked, but an upgrade could change hook logic for future interactions.

Security findings

  • [high] Upgradeable proxy: The hook delegates all calls to a replaceable implementation, so its behaviour, including fees and liquidity checks, can be changed by whoever controls upgrades.
  • [medium] Fee setter with no visible cap: A 16-bit basis-point fee can be set by an admin function; no upper bound is visible in the decoded bytecode.
  • [medium] Gated liquidity provision: Adding liquidity reverts for unauthorized providers, so only approved addresses can LP.
  • [info] Unverified code: No verified source is available; analysis is based on decoded bytecode and selectors.

Contract details

Verified source
No
Bytecode size
291 bytes
Upgradeable proxy
Yes
Detected patterns
erc20, moves-currency, upgradeable

Pools using Dynamic fee hook