Spot on Robinhood Chain

Uniswap v4 Hook Contract 0x3f2f0b4f9a50e2179be76b1f6f810a0f7cdc00c0 on Robinhood Chain · Dynamic fee · Verified contract

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

What it does

A Uniswap v4 hook that charges a fixed 8% dynamic swap fee on each pool and routes all of that fee to a liquidity manager whose hardcoded owner wallet can withdraw it.

How it works step by step

  • beforeSwap applies a per-pool dynamic fee override read from PoolPolicyManager, defaulting to 80000 PPM (8%).
  • afterSwap computes a hook fee from the input amount and the POL share, which defaults to 100% of the fee.
  • The hook mints ERC6909 claims on the PoolManager to the FullRangeLiquidityManager and records them as pending fees.
  • FullRangeLiquidityManager exposes withdrawal functions restricted to a hardcoded wallet address.
  • Reinvestment is a stub that always returns false.
Swap behaviour
beforeSwap overrides the pool fee with the policy-configured value (default 8%). afterSwap computes the fee on the input amount, mints that amount as ERC6909 claims to the liquidity manager and emits HookFeeCollected.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
beforeSwap returns an overridden dynamic fee read from PoolPolicyManager (default 80000 PPM, i.e. 8%, set per pool and changeable by the owner up to 10%). afterSwap takes a share (default 100%) of the swap fee on the input token by minting ERC6909 claims on the PoolManager to the liquidity manager, recording them as pending fees, and emitting HookFeeCollected.
Owner & admin controls
PoolPolicyManager owner (governance address) can set per-pool fee up to 10% and the POL share up to 100%, and can set the authorized hook. FullRangeLiquidityManager has a hardcoded MY_WALLET (0x3e18341AdBEf613b16FF4F04f36dcE11a47F4C52) that alone can call claimAndWithdrawAll, withdrawAllMyTokens and withdrawMyNft, sending any ERC20, native ETH or NFT held by the contract to that wallet. No pause or upgrade mechanism found.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap

beforeSwap: sets the dynamic fee override for each pool. afterSwap: mints ERC6909 fee claims to the liquidity manager for the hook's fee share and attempts a no-op reinvest call.

Security & trust assessment

Risk level: high (verified source, high confidence).

Who controls it: The hardcoded wallet MY_WALLET can drain all ERC6909 fee claims, any ERC20 or ETH sitting in the liquidity manager, and any NFT it holds. The policy owner can raise the swap fee to 10% on any pool and change the hook's fee share to 100%, extracting most of the swap value from traders. Swappers are charged the owner-set fee with no cap on the hook side other than 10%.

Risk to user funds: The hook itself does not hold user principal, but it mints ERC6909 claims on each swap's input token to the liquidity manager, which is controlled by a hardcoded wallet able to withdraw all of them. Traders also pay an 8% fee (adjustable up to 10%) that goes almost entirely to that contract rather than to LPs.

Security findings

  • [high] Hardcoded owner withdrawal backdoor: withdrawAllMyTokens, claimAndWithdrawAll and withdrawMyNft are gated by onlyDev, which is a hardcoded address. That address can withdraw any token balance or NFT held by FullRangeLiquidityManager, including accrued hook fees and LP-related funds routed there.
  • [high] Fee extraction by the hook: The hook takes up to 100% of the swap fee (POL share default 1,000,000 PPM) and the policy owner can set the pool fee up to 10%, so traders pay an extra fee taken entirely by the hook rather than LPs.
  • [medium] Single-key parameter control: Pool fees and fee share are set by a single owner through PoolPolicyManager with no timelock, and the authorized hook address is also owner-settable.
  • [medium] Swap fee is not paid to LPs: The default 8% fee is an unusually high fee for a v4 pool, and the hook sends the entire fee to the liquidity manager rather than to LPs. Liquidity providers do not appear to earn these fees.
  • [info] Reinvestment disabled: reinvest is a stub returning false, and the try/catch wrapper is inert in this build. Fee claims accumulate as ERC6909 balances on the liquidity manager until the owner withdraws them.

Contract details

Verified source
Yes (Spot)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
3,959 bytes
Upgradeable proxy
No

Pools using Spot