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
- ETH / USDC (Dynamic fee) — 24h volume $0, TVL $151, 0 swaps today