Likely dynamic fee hook on Robinhood Chain
Uniswap v4 Hook Contract 0xee60c95711f5650bbbbee421426820fec6e060c0 on Robinhood Chain · Dynamic fee
- Volume (24h)
- <$0.01
- Value locked (TVL)
- <$0.01
- All-time volume
- <$0.01
- Pools using this hook
- 1
- Swaps (24h)
- 2 (1 traders)
- Total swaps
- 2
What it does
This hook sets a dynamic swap fee in beforeSwap from stored parameters and records volume after each swap, but the exact fee rule and which trade direction pays more could not be determined from the decoded bytecode.
How it works step by step
- Hook permissions enable beforeInitialize, beforeSwap and afterSwap, plus liquidity and donate selectors that are present in the dispatch table.
- beforeInitialize (0xdc98354e) writes pool-related state including an address slot and several uint64 counters, indicating per-pool configuration is recorded at pool creation.
- beforeSwap (0x575e24b4) reads a packed storage layout of int24 and uint64 values and a uint8 status-like field, and updates a dynamic fee or LP_FEE-related state before each swap.
- afterSwap (0xb47b2fb1) updates a bytes24 slot and uint64 counters, consistent with volume tracking (a totalVolume() view is exposed).
- Exposes view functions poolKey(), params(), status(), isLive(), LP_FEE(), TICK_SPACING() and totalVolume(), suggesting pool metadata and a live/paused flag.
- Liquidity and donate callbacks exist as view selectors only, and the bytecode does not show them writing state, so they appear to be pass-through or revert-free hooks.
- Swap behaviour
- beforeSwap computes and applies a fee adjustment for each swap using its stored parameters, and afterSwap records swap volume; exact fee direction per trade direction cannot be determined from decoded bytecode alone.
- Liquidity behaviour
- No state-changing liquidity callbacks found; beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity are view-only selectors.
- Fee behaviour
- Fees are set dynamically by the hook in beforeSwap based on stored parameters rather than the pool's static fee; the precise formula is not recoverable from the decoded bytecode.
- Owner & admin controls
- The contract is ownable (owner() view present, NotOwner error in bytecode), and an initializer() / resolve(uint32,uint8) pair exists; the owner-restricted setters, if any, could not be fully identified from decoded bytecode.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap
beforeInitialize records pool configuration at creation; beforeSwap sets the swap fee for each trade; afterSwap updates volume and related counters.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: A single owner key could change fee or status parameters that apply to every swap in the pool, and could possibly disable trading through the status flag.
Risk to user funds: The hook does not appear to hold user tokens or use return deltas, so funds exposure is mainly indirect via fee levels and possible swap pausing.
Security findings
- [medium] Owner-controlled fee parameters: The contract is ownable and beforeSwap reads fee-related storage, so an owner with a setter could raise swap fees on users; the setter is not confirmed from decoded bytecode.
- [low] Pausable status flag: A status()/isLive() flag is read in swap-related paths, suggesting the owner may be able to disable the hook and affect swap availability.
- [info] Resolver with arbitrary parameters: resolve(uint32,uint8) is nonpayable and writes storage, suggesting an external configuration or resolution entry point whose access control was not confirmed.
Contract details
- Verified source
- No
- Bytecode size
- 13,826 bytes
- Upgradeable proxy
- No
- Detected patterns
- ownable
Pools using Likely dynamic fee hook
- ETH / DRILL (1.25% fee) — 24h volume <$0.01, TVL <$0.01, 2 swaps today