Likely dynamic fee hook on Robinhood Chain

Uniswap v4 Hook Contract 0xea0168421f8d206bb56ce117c4b1a373a75c40c0 on Robinhood Chain · Dynamic fee

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

What it does

This hook runs before and after each swap to read and record per-pool state, which likely sets a dynamic fee for swaps, but the exact fee rule and which trades pay more or less cannot be confirmed from the decoded bytecode.

How it works step by step

  • Exposes a manager() getter and a WINDOW() constant-style getter, plus getHookPermissions() reporting beforeSwap and afterSwap.
  • register() is callable by external parties with a pool key and an address, and records per-pool data in a mapping keyed by uint256.
  • beforeSwap() reads stored state (a uint8 flag at slot 1 and the mapping at slot 0) to act on each swap before execution.
  • afterSwap() writes to the same mapping after a swap settles, so it tracks swap activity per pool across a window.
  • Calls extsload on the pool manager, indicating it reads pool-manager storage directly for pricing or state checks.
  • The WINDOW() getter suggests a time or block window used in the stored logic, though the exact formula cannot be determined from bytecode alone.
Swap behaviour
beforeSwap reads stored state and may adjust the swap path using a dynamic value; afterSwap records the swap result into storage. The exact fee or delta formula cannot be confirmed from decoded bytecode.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Likely dynamic: beforeSwap returns a fee or delta derived from stored state, but the exact computation cannot be determined from decoded bytecode.
Owner & admin controls
No admin controls found in the decoded selectors. The manager() getter exposes the pool manager address, but no setter for owner or parameters was decoded. Whether register() is gated cannot be confirmed without source.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap

beforeSwap is used to read state and possibly override the swap fee before execution. afterSwap is used to record post-swap state into the per-pool mapping.

Security & trust assessment

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

Who controls it: Without source, it is unclear whether a privileged key controls register() or stored parameters. If such a key exists it could alter the state used by beforeSwap and afterSwap.

Risk to user funds: The hook does not appear to take or move tokens directly from decoded selectors and no return-delta mechanism is evident, so user funds are not obviously held by the hook. Its influence on swap outcomes through beforeSwap is the main exposure.

Security findings

  • [medium] Unverified source: No verified source is available, so the exact fee formula, access checks in register(), and storage writes cannot be fully confirmed from bytecode.
  • [medium] Public register function: register() is nonpayable and externally callable; if it lacks an access check it could let arbitrary callers initialize or overwrite per-pool mapping entries that beforeSwap relies on.
  • [low] beforeSwap affects swap pricing: beforeSwap runs before every swap and reads stored state, so a bug or manipulable value there can change fees or execution for all traders in the pool.
  • [info] Reads pool manager storage: The contract calls extsload on the pool manager, which is a read-only operation and does not move funds.

Contract details

Verified source
No
Bytecode size
5,575 bytes
Upgradeable proxy
No

Pools using Likely dynamic fee hook