Token hook on Robinhood Chain

Uniswap v4 Hook Contract 0xc4f5b983b09432c218173aab03ba92c5f0180044 on Robinhood Chain · Token

Volume (24h)
$22.78K
Value locked (TVL)
$3.91K
All-time volume
$22.78K
Pools using this hook
3
Swaps (24h)
301 (93 traders)
Total swaps
301

What it does

This hook takes a basis-point cut of qualifying swap output through afterSwapReturnDelta, exempt addresses are skipped, and the owner can withdraw the collected tokens, so non-exempt traders receive less than the pool price.

How it works step by step

  • afterSwap callback tracks swap activity and accumulates a counter in storage slot 3 and a second counter in slot 4 (likely sell volume or count of qualifying sells)
  • Maintains an exemption whitelist (mapping in slot 1) toggled by setExempt(address,bool), letting certain addresses bypass the hook logic
  • Requests an afterSwapReturnDelta, so the hook can take a portion of the swap output as a delta, which is then accounted to the hook rather than the trader
  • Holds min and max basis-point parameters (minBps, maxBps) read by the hook, suggesting a bounded tax or skim amount per swap
  • withdraw(address,address) lets the owner move tokens the hook has accumulated, and skimmed() reports the total amount taken so far
  • Pattern is consistent with a sell-tax token hook where the token contract pairs with the pool, though the token address and exact trigger condition are not confirmed
Swap behaviour
After each swap the hook checks whether the trader is exempt; for non-exempt sells it takes a basis-point amount bounded by minBps and maxBps via return delta, increments its counters and adds the taken amount to the skimmed total. Exact direction and amount formula could not be fully confirmed from bytecode.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Hook takes a variable basis-point cut through afterSwapReturnDelta on qualifying swaps, in addition to the pool's fee. Taken amounts accumulate and are withdrawable by the owner.
Owner & admin controls
Owner (owner() getter, Ownable) can set exemptions with setExempt, withdraw accumulated tokens with withdraw, and the min/max bps bounds appear to be configurable by the owner (unconfirmed setters).

Enabled Uniswap v4 callbacks

afterSwap, afterSwapReturnDelta

afterSwap is used to run accounting and compute the skim after each swap. afterSwapReturnDelta is used so the hook can claim a portion of the swap output as its own delta.

Security & trust assessment

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

Who controls it: A single owner key controls exemptions, withdrawal of collected funds and likely the tax bounds, so a compromised key could redirect hook-held tokens or reconfigure the take.

Risk to user funds: The hook can take tokens from swap output via return delta and holds them until the owner withdraws, so user proceeds from non-exempt swaps are directly exposed to the hook's take.

Security findings

  • [high] Hook takes a cut of swap output: afterSwapReturnDelta lets the hook keep part of every qualifying swap's output, so traders receive less than the pool price implies.
  • [medium] Owner can withdraw accumulated funds: withdraw(address,address) is callable by the owner and moves tokens the hook has collected from swaps.
  • [medium] Owner-controlled exemption list: setExempt lets the owner decide which addresses avoid the hook's cut, allowing selective treatment of traders.
  • [low] Configurable bounds without verified source: minBps and maxBps bound the taken amount, but setter functions were not decoded, so the maximum possible take cannot be verified.
  • [info] No source verification: Analysis relies on decoded bytecode and selector names only; exact logic may differ.

Contract details

Verified source
No
Bytecode size
4,523 bytes
Upgradeable proxy
No
Detected patterns
ownable, return-delta

Pools using Token hook