Oracle hook on Robinhood Chain

Uniswap v4 Hook Contract 0x553a2d30afe60d6df0badfa77f09ecb2c750a0cc on Robinhood Chain · Oracle

Volume (24h)
$0
Value locked (TVL)
$6.38K
All-time volume
$3.79M
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
22,644

What it does

An oracle-style hook that records price observations on each swap so that tick-based time-weighted data can be read by other contracts, with swap-time return deltas that let it take a share of swap flows.

How it works step by step

  • Initializes an observation ring buffer for the pool on beforeInitialize
  • Writes a new tick observation on swaps (beforeSwap and afterSwap)
  • Exposes observe(uint32[]) and observationCardinality for time-weighted reads
  • Uses return deltas to take or adjust currency flows during swaps
  • Provides flush() to move accumulated balances out of the hook
  • Tracks a pinned pool flag and hedge state
Swap behaviour
beforeSwap and afterSwap write observations to a ring buffer and may adjust deltas through return-delta permissions, with the hook able to take currency from the swap.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Uses the pool's static fee; no fee-setting selector found in the decoded functions.
Owner & admin controls
No admin controls found in decoded selectors; a team() getter and upgradePool() selector appear only as external call targets, suggesting an external team or upgrade path may exist but cannot be confirmed without source.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize records the pool and initializes observation state; beforeSwap and afterSwap update and read the observation ring buffer; beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can adjust swap deltas and take or settle currency via the manager.

Security & trust assessment

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

Who controls it: Not determinable from bytecode alone; the presence of a team() getter and upgradePool() selector suggests a privileged party could alter the pool or hook logic if those selectors are functional.

Risk to user funds: The hook can take and transfer currency during swaps via return deltas and can flush balances, so it can hold or move trader and pool funds; the exact conditions are not verifiable without source.

Security findings

  • [medium] Hook takes currency through return deltas: The hook enables beforeSwapReturnDelta and afterSwapReturnDelta and calls take(address,address,uint256) and transfer(address,uint256), so it can take currency from swaps and move tokens.
  • [medium] Possible upgrade or privileged path: Selectors upgradePool() and team() appear in the bytecode without a verified source, which may indicate an upgrade or privileged path.
  • [low] Access restriction on pool state: A NotCallable() error and a poolPinned() view exist, suggesting access restrictions on the hook's state transitions.
  • [low] Tokens may accumulate in the hook: The hook holds balances and uses SafeERC20, with flush() and a balanceOf call, so tokens may accumulate in the hook contract.

Contract details

Verified source
No
Bytecode size
8,409 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, oracle, return-delta

Pools using Oracle hook