Dynamic fee hook on Base
Uniswap v4 Hook Contract 0xd0eb6f0b6c437a8e64f9952b603e295286bbe8c0 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
- mmETH / JEW (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today