Access control hook on Robinhood Chain

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

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

This hook tracks initialized pools and runs watch-related bookkeeping after swaps, without changing the fee or moving funds, so trades pay the pool's normal fee.

How it works step by step

  • Registers pools at initialization by storing the pool key and pool id in indexed mappings and an array (afterInitialize writes slots 0, 1, 2)
  • Exposes a watch/unwatch mechanism keyed by uint256 ids, capped by a MAX_WATCH constant, with AlreadyWatched and JobClosed errors
  • Runs an afterSwap callback that updates per-watch state (triggered flags and a uint64 timestamp-like value) and reads stored int24 tick arrays
  • Reads an external job registry through getJob(uint256) and extsload, suggesting it coordinates work tied to watched pools or keeper jobs
  • Implements liquidity and donate callbacks as view stubs that do not change state, and a CHECK_GAS helper
Swap behaviour
afterSwap is enabled and writes watch state (slots 3, 4, 5, 6) for watched job ids; it does not return a fee or a balance delta, so swaps are not repriced or redirected by this hook.
Liquidity behaviour
No liquidity callbacks mutate state; beforeAddLiquidity, beforeRemoveLiquidity, afterAddLiquidity and afterRemoveLiquidity are view functions and only gate nothing beyond the pool's normal flow.
Fee behaviour
Uses the pool's static fee; no fee override or fee sharing is performed by this hook.
Owner & admin controls
No owner, pause or upgrade functions were identified in the dispatched selectors; watch and unwatch are nonpayable and their access control cannot be confirmed from bytecode alone.

Enabled Uniswap v4 callbacks

afterInitialize, afterSwap

afterInitialize records newly initialized pools in storage; afterSwap updates watch-related state after each swap.

Security & trust assessment

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

Who controls it: Limited to whatever privileged role controls watch registration, if any exists; no pause or fee-setting authority was identified.

Risk to user funds: The hook returns no deltas and takes no tokens, so it does not hold or move user or pool funds; it could only add cost to swaps via reverts in afterSwap.

Security findings

  • [info] No source available: The analysis relies on decoded bytecode and selectors, so access control on watch and unwatch and the exact meaning of the stored job values cannot be verified.
  • [low] Unrestricted watch registration possible: watch(uint256) and unwatch(uint256) are nonpayable and their caller checks are not visible in the decoded selectors; if unguarded, arbitrary callers could toggle watch state for ids.
  • [low] External registry dependency: The hook calls getJob and extsload on an external registry, so behaviour depends on that contract and it could revert swaps if the call fails.

Contract details

Verified source
No
Bytecode size
7,771 bytes
Upgradeable proxy
No

Pools using Access control hook