Rewards hook on Robinhood Chain

Uniswap v4 Hook Contract 0x3fe3b596663b46ecfd9475dfed537cb396329acc on Robinhood Chain · Rewards

Volume (24h)
$4.35K
Value locked (TVL)
$3.92K
All-time volume
$1.13M
Pools using this hook
1
Swaps (24h)
1,637 (5 traders)
Total swaps
49,469

What it does

A Uniswap v4 hook that applies owner-configurable dynamic LP fees and a reward share on swaps, with liquidity operations routed through a configurable locker.

How it works step by step

  • Sets a dynamic LP fee per pool with a default fallback (DEFAULT_LP_FEE)
  • Takes a reward share, configured in basis points (rewardBps), on swap activity
  • Hooks beforeAddLiquidity and beforeRemoveLiquidity and interacts with a configurable liquidityLocker
  • Uses before/after swap return deltas and take() to move currency from the pool
  • Restricts certain operations to owner or allowlisted market makers
Swap behaviour
beforeSwap applies dynamic fee logic and afterSwap performs accounting; the hook can take currency via return deltas during swaps.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity run hook logic, and afterAddLiquidity/afterRemoveLiquidity are present as selectors. A liquidityLocker address is stored and read during liquidity handling, suggesting liquidity positions may be locked or tracked by an external locker contract.
Fee behaviour
Sets a dynamic LP fee through setPoolLpFee/updateDynamicLPFee with DEFAULT_LP_FEE as a fallback and an InvalidLpFee check. A rewardBps share is used in reward accounting, so part of the economics appears to be redirected to rewards rather than LPs; exact fee splits could not be fully confirmed from bytecode alone.
Owner & admin controls
Owner-gated setters: setRewardBps(uint16) changes the reward share in basis points, setLiquidityLocker(address) changes the locker contract, and setPoolLpFee sets the LP fee per pool via updateDynamicLPFee. The bytecode references owner(), publicOpen(), isMarketMaker(address) and NotOwner/NotAMMOperator errors, indicating an owner plus a market-maker allowlist gating some operations. No upgrade or pause selector was identified.

Enabled Uniswap v4 callbacks

afterInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

afterInitialize sets up pool state. beforeAddLiquidity and beforeRemoveLiquidity gate or record liquidity changes. beforeSwap applies dynamic fee logic and beforeSwapReturnDelta/afterSwapReturnDelta with afterSwap may take or return currency deltas, which means the hook moves pool currency. afterSwap performs post-swap accounting.

Security & trust assessment

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

Who controls it: The owner can change the reward basis points, swap the liquidity locker contract, and set per-pool LP fees. A malicious or compromised owner could raise rewards or fees to extract value from swappers and LPs, or redirect liquidity handling to a different locker. Market-maker allowlisting may also restrict who can trade or provide liquidity.

Risk to user funds: The hook can take and return currency deltas during swaps and sits in the liquidity add/remove path, so it can affect pool balances and user funds. The owner-controlled fee and reward parameters determine how much value flows to the hook and rewards rather than LPs.

Security findings

  • [medium] Hook takes currency via return deltas: Hook has beforeSwapReturnDelta and afterSwapReturnDelta enabled and calls take(), so it can take currency from the pool during swaps.
  • [medium] Owner-adjustable dynamic fee: setPoolLpFee and updateDynamicLPFee let the owner change fees per pool, bounded only by an InvalidLpFee check.
  • [medium] Owner can replace liquidity locker: setLiquidityLocker lets the owner replace the locker contract that liquidity operations depend on.
  • [low] Allowlist-gated access: isMarketMaker and publicOpen selectors suggest some access is restricted to an allowlist, which can block general users from certain operations.
  • [info] No upgrade path observed: No proxy or upgrade selectors were found, so the logic appears non-upgradeable from the bytecode.

Contract details

Verified source
No
Bytecode size
4,971 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, moves-currency, return-delta

Pools using Rewards hook