Access control hook on Robinhood Chain

Uniswap v4 Hook Contract 0x7e908bae51e238c3a09d5ff4a5beb8ae36e96ac0 on Robinhood Chain · Access control

Volume (24h)
$1.28
Value locked (TVL)
$1.20K
All-time volume
$1.28
Pools using this hook
2
Swaps (24h)
52 (1 traders)
Total swaps
52

What it does

A Uniswap v4 hook with admin-gated routing, gas policy and pause controls that can gate liquidity and move currency during swaps, but its exact trading purpose cannot be confirmed without source.

How it works step by step

  • Gates pool initialization, liquidity additions and removals via before-callbacks
  • Runs custom swap logic in beforeSwap and afterSwap with gas policy checks
  • Restricts swap and liquidity access to trusted routers and keepers
  • Holds and moves tokens (float withdrawal, sweep, residue recipient) using the pool manager unlock flow
  • Supports an admin-controlled global pause and gas policy configuration
Swap behaviour
beforeSwap and afterSwap run custom logic that checks trusted routers, the global pause flag and gas policy parameters, and can call back into the pool manager through an unlock flow to settle currency.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity are enabled and the hook has third-party liquidity restriction logic (ThirdPartyLiquidityBlocked error selector present), suggesting liquidity additions may be gated to permitted parties; withdrawFloat and deposit-style functions also move tokens held by the hook.
Fee behaviour
No fee logic is evident from the decoded functions; fees appear to be handled by the pool's configured fee (fee() is referenced externally), and the hook does not obviously override it.
Owner & admin controls
A single admin address (slot 0, set via setAdmin) can pause swaps globally (setGlobalPaused), set trusted routers and quoters, manage keepers, set gas policy parameters, set the residue recipient, and sweep tokens held by the hook (sweep). An admin can also reassign itself or others via setAdmin and setKeeper; no timelock or multisig was identified.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap

beforeInitialize validates pool initialization; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; beforeSwap and afterSwap run custom swap logic including gas policy checks and a self-unlock flow via unlockCallback and the poolManager unlock/take/swap selectors.

Security & trust assessment

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

Who controls it: The admin key can pause all swaps, change which routers and quoters are trusted, sweep tokens the hook holds, change gas policy parameters and reroute residue, so a compromised admin could disrupt trading or drain tokens held by the hook.

Risk to user funds: The hook takes custody of tokens through withdrawFloat and deposit-style functions and moves currency via the pool manager during swaps and liquidity callbacks; the admin can sweep balances and pause trading, so user or pool funds held by the hook are exposed to admin action.

Security findings

  • [medium] Admin can pause swaps: setGlobalPaused lets the admin halt swaps protocol-wide, as the beforeSwap path reads the globalPaused flag.
  • [high] Admin sweep of hook-held tokens: sweep(address,address) lets the admin transfer ERC20 balances out of the hook, which matters if the hook holds user or pool funds from deltas or float.
  • [medium] Hook moves currency during callbacks: The hook calls poolManager unlock, take and swap selectors and uses return deltas-style accounting, so it can move currency during swaps and liquidity operations.
  • [medium] Single-step admin transfer: setAdmin is a single-step transfer of admin rights with no evident two-step or timelock protection.
  • [info] Upgradeability not determined: Bytecode size and presence of an admin proxy-style pattern could not be confirmed as upgradeable from the decoded data.

Contract details

Verified source
No
Bytecode size
24,449 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, self-unlock

Pools using Access control hook