Hook 0x8216…c840 on Robinhood Chain

Uniswap v4 Hook Contract 0x821613cf3b6f87400e2c1c218443bc1c17a5c840 on Robinhood Chain · Other

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

What it does

An unverified Uniswap v4 hook that gates liquidity additions with whitelist and pause controls and runs post-swap logic that appears to take a share of pool flows for a treasury.

How it works step by step

  • Restricts liquidity additions in beforeAddLiquidity using whitelist, operator and pause checks
  • Runs afterSwap logic that uses take() to move tokens from the pool to a treasury or handler
  • Tracks thresholds and tick ranges (bid bounds, spacing, dynamic fee) for the bound pool
  • Provides a treasury address and privileged setters for parameters
  • Includes rescue and sweep functions for recovering tokens held by the hook
Swap behaviour
afterSwap is enabled and appears to perform post-swap accounting and token take() calls, likely routing a portion of swap flow to a treasury; exact amounts could not be determined.
Liquidity behaviour
beforeAddLiquidity is enabled and gated by whitelist/operator checks and a pause flag, so liquidity additions may be restricted to approved addresses; the hook also appears to manage positions via position() and a bid/tick range (bidLower/bidUpper, tick setters).
Fee behaviour
A setDynamicFee function is present and a fee-related parameter is writable by a privileged caller, indicating the hook may override the pool fee; exact fee computation could not be determined from decoded bytecode alone.
Owner & admin controls
Owner-style privileged roles: setPaused(bool) toggles a pause flag checked in the add-liquidity and swap paths; setTreasury(address) changes the treasury (guarded by NotTreasury); setWhitelist/setWhitelistBatch and setOperator/setRuleExempt manage access mappings; setThreshold(uint256), setDynamicFee, setPool and setting tick-range functions change pool parameters; rescue(address,uint256) and sweep move tokens out of the hook to a privileged address. Upgradeability was not observed in the decoded selectors.

Enabled Uniswap v4 callbacks

beforeAddLiquidity, afterSwap

beforeAddLiquidity: gates or validates liquidity additions against whitelist, pause and range checks. afterSwap: runs post-swap logic, likely updating state, thresholds or taking a share via take(), and is the only swap-related callback.

Security & trust assessment

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

Who controls it: A privileged key can pause the hook, change the treasury, add or remove whitelisted operators and rule exemptions, adjust thresholds, fees and tick parameters, and rescue or sweep tokens held by the hook, which could redirect or block user flows.

Risk to user funds: The hook takes tokens via take() in afterSwap and can transfer tokens out through rescue/sweep, so funds held by the hook can be moved by privileged roles; the pause and whitelist controls can block users from adding liquidity or swapping.

Security findings

  • [medium] Privileged token withdrawal: The owner-controlled rescue and sweep functions can transfer tokens held by the hook contract to an address chosen by the privileged role.
  • [medium] Pausable by admin: setPaused and the paused flag gate liquidity addition and swap-related logic, so a privileged key can halt the hook.
  • [medium] Adjustable fee and range parameters: setDynamicFee and tick setters let a privileged role change fee and range parameters that affect pool economics; bounds could not be verified without source.
  • [low] Access-restricted liquidity: Whitelist, operator and rule-exempt mappings gate who can add liquidity, which can restrict LP access.
  • [info] Unverified source: Source is unverified and behaviour was inferred from selectors and storage writes, so exact logic is uncertain.

Contract details

Verified source
No
Bytecode size
17,315 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, pausable

Pools using Hook 0x8216…c840