Likely dynamic fee hook on Base

Uniswap v4 Hook Contract 0x0ee5154bf444599ff90cfa9ad67137cbe4956080 on Base · Dynamic fee

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

What it does

This hook sets a per-pool swap fee that the owner or approved keepers can update, so traders pay whatever fee the privileged keys have set for that pool, while LPs get no special treatment through liquidity callbacks.

How it works step by step

  • Enables beforeInitialize and beforeSwap hook callbacks only; no liquidity or donate callbacks are enabled by permissions.
  • Sets a per-pool fee through a fee configuration stored per pool id (mapping of pool id to uint24 fee), read during swaps and quoting.
  • Exposes quoteFee(poolKey, zeroForOne) so off-chain callers can preview the fee that will be applied to a swap.
  • Records an anchor value per pool id (anchors mapping) set during initialization, likely used as a reference price or tick for fee logic.
  • Restricts fee updates (selector 0xaf44bd60) and keeper management (setKeeper) to owner or keeper addresses via an access-control mapping of keepers.
  • Contains an external call to extsload on the pool manager to read pool state during execution.
Swap behaviour
beforeSwap is enabled and reads the stored fee for the pool, so swaps are charged the hook-determined fee rather than the pool's static fee; the exact direction-dependent adjustment cannot be fully confirmed from decoded bytecode alone.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Fee is stored per pool in a uint24 mapping and applied through beforeSwap; updates are performed by the owner or approved keepers (selector 0xaf44bd60 with a uint24 argument). Whether the fee is returned as an override flag or applied via return deltas could not be fully determined.
Owner & admin controls
Owner (Ownable with two-step transfer: transferOwnership, acceptOwnership, renounceOwnership, pendingOwner) can add or remove keepers via setKeeper; owner and keepers can update fee configuration via selector 0xaf44bd60. No pausing or upgrade mechanism was observed in the selectors.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize records the initial fee configuration and anchor for a new pool; beforeSwap supplies the dynamic fee applied to each swap.

Security & trust assessment

Risk level: medium, estimated (decoded bytecode, medium confidence).

Who controls it: The owner and any approved keeper can change fees on pools using this hook, so a privileged key could set swap fees to high values and extract value from traders, or grant keeper rights to an arbitrary address.

Risk to user funds: The hook does not appear to take custody of tokens or use return deltas to move user funds; exposure comes from the fee level it sets, which could be raised by privileged keys to make swaps expensive. Blocking of swaps by a pause was not observed.

Security findings

  • [medium] Keeper-controlled fee updates: Keepers (set by the owner) can call the fee update function with a uint24 value, so a malicious or compromised keeper could raise swap fees on pools the hook manages. The bounds on the fee value could not be confirmed from bytecode.
  • [medium] Owner can grant keeper rights: The owner controls the keeper mapping through setKeeper, so the owner indirectly controls fee changes for all pools using this hook.
  • [info] Two-step ownership transfer: Ownership changes use transferOwnership followed by acceptOwnership, which reduces the risk of accidental transfer to a wrong address.
  • [low] Dependency on pool manager state reads: The contract calls extsload on the pool manager; its correctness depends on the pool manager returning expected storage values.

Contract details

Verified source
No
Bytecode size
12,608 bytes
Upgradeable proxy
No
Detected patterns
ownable

Pools using Likely dynamic fee hook