Hook 0xefdd…f540 on Robinhood Chain

Uniswap v4 Hook Contract 0xefdd80ca758fe6f96ebba11046a80b10f592f540 on Robinhood Chain · Other

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

What it does

A Uniswap v4 hook with bookkeeping callbacks on pool initialization, liquidity changes and swaps, owned by a two-step Ownable account that can set a factory address; without verified source its exact trader and LP effects cannot be fully confirmed.

How it works step by step

  • Runs logic on pool initialization (beforeInitialize and afterInitialize) and stores per-pool data in mappings keyed by uint256 slots 3 and 4.
  • Runs bookkeeping after liquidity is added or removed via afterAddLiquidity and afterRemoveLiquidity.
  • Runs bookkeeping after swaps via afterSwap without altering swap deltas.
  • Maintains an owner (Ownable2Step) and a settable factory address used by the hook.
  • Makes external calls including balanceOf, extsload and an afterInitialize call on another contract.
Swap behaviour
afterSwap is enabled and records per-pool data after each swap; it does not change swap amounts or fees according to the decoded permissions.
Liquidity behaviour
afterAddLiquidity and afterRemoveLiquidity callbacks are enabled and write to mapping slot 4 keyed by a uint256 value during afterInitialize and afterAddLiquidity/afterRemoveLiquidity paths; purpose of the bookkeeping cannot be confirmed without source. beforeAddLiquidity and beforeRemoveLiquidity selectors exist but the hook permissions do not enable them.
Fee behaviour
No fee logic identified in the dispatched functions; the hook does not appear to override fees (no beforeSwap return-delta selectors clearly tied to fee override were decoded). Uses the pool's static fee unless the bytecode indicates otherwise.
Owner & admin controls
Owner (Ownable2Step: transferOwnership, acceptOwnership, renounceOwnership) can call setFactory(address) to set a stored address used by the hook; owner can be changed or renounced. No pause or upgrade function found in the dispatch table.

Enabled Uniswap v4 callbacks

beforeInitialize, afterInitialize, afterAddLiquidity, afterRemoveLiquidity, afterSwap

beforeInitialize: validates or records pool setup on initialization. afterInitialize: records per-pool data into mapping slot 3 and 4. afterAddLiquidity: updates per-pool bookkeeping after liquidity is added. afterRemoveLiquidity: updates per-pool bookkeeping after liquidity is removed. afterSwap: updates per-pool bookkeeping after swaps, without modifying the swap result.

Security & trust assessment

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

Who controls it: The owner can set the factory address via setFactory and controls ownership transfer. Because the hook's callbacks are read/write bookkeeping rather than fund-moving logic, the owner's direct ability to harm users appears limited, but a malicious factory address could alter behaviour if the factory is consulted by callbacks.

Risk to user funds: Based on the enabled permissions (no beforeSwap return delta, no beforeSwapReturnDelta or afterSwapReturnDelta flags), the hook cannot directly take or redirect swap or liquidity amounts. It does make external calls including balanceOf and an afterInitialize call to another contract, so funds exposure depends on the unverified external target.

Security findings

  • [medium] Owner-settable factory address: Owner can call setFactory(address) to change a stored address the hook relies on; the function is nonpayable and not obviously one-time, though an AlreadySet error selector exists which suggests it may be settable only once.
  • [info] Two-step ownership: Hook is Ownable2Step with renounceOwnership available; ownership transfer requires acceptance.
  • [info] No return-delta permissions: Hook exposes afterAddLiquidity, afterRemoveLiquidity and afterSwap callbacks with no return-delta permissions, so it does not take or redirect user tokens from the pool according to the permission flags.
  • [low] Unverified source: Without verified source, the purpose of the mapping writes and the external calls (balanceOf, extsload, afterInitialize external call) cannot be fully confirmed.

Contract details

Verified source
No
Bytecode size
7,158 bytes
Upgradeable proxy
No
Detected patterns
ownable

Pools using Hook 0xefdd…f540