RobinhoodArenaFeeHook on Robinhood Chain

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

Volume (24h)
$19
Value locked (TVL)
$39.02K
All-time volume
$11.75M
Pools using this hook
19
Swaps (24h)
10 (9 traders)
Total swaps
107,357

What it does

A post-launch fee hook that charges a configurable swap fee on the output currency and splits it among pool fee recipients, a referrer and the protocol.

How it works step by step

  • Blocks pool initialization unless the sender is a whitelisted deployer (beforeInitialize).
  • After every swap, reads a total fee in ppm from the owner-set fee helper.
  • Takes that fee from the swap's unspecified currency via afterSwapReturnDelta.
  • Splits the fee across pool-specific recipients, an optional referrer (looked up from tx.origin) and the protocol recipient.
  • Pays recipients as ERC-6909 claim tokens instead of direct transfers.
  • Emits HookFee and HookSwap events for accounting.
Swap behaviour
After each swap, the hook computes the unspecified-side amount, fetches a total fee from the fee helper, mints that fee as claim tokens to the hook, and then mints or transfers shares to each recipient, with any rounding remainder going to the last recipient.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
On each swap the hook asks the fee helper for a total fee in ppm and takes that share of the unspecified-side output as a claim-token fee, then distributes it to the helper's configured recipients (pool fee recipients, a referrer resolved from tx.origin, and the protocol recipient).
Owner & admin controls
Owner (Ownable2Step) can set arenaFeeHelper via setArenaFeeHelper and whitelist deployers via setDeployer; ownership transfer is two-step and renounceOwnership is available. Owner can therefore redirect fee logic to any helper contract.

Enabled Uniswap v4 callbacks

beforeInitialize, afterSwap, afterSwapReturnDelta

beforeInitialize restricts pool initialization to whitelisted deployers. afterSwap runs the fee logic after each swap. afterSwapReturnDelta lets the hook take an amount from the swap's unspecified currency, so the hook's fee is deducted from the swapper's output.

Security & trust assessment

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

Who controls it: The owner controls the fee helper address, which determines fee amounts and recipients through getTotalFeePpm and getFeesForPool, and controls which addresses may initialize pools. A malicious or compromised helper could return a fee up to the hook limit or route fees to arbitrary addresses. The helper itself has owner-settable recipients, fee amounts and a referral registry.

Risk to user funds: The hook can deduct a fee from swap output via the return delta, bounded by the fee helper's returned ppm, and mints claim tokens to recipients. Because the helper is owner-replaceable, the owner can raise the fee on swaps at will. The hook does not hold pool liquidity directly and has no pause function visible in the source.

Security findings

  • [high] Owner-replaceable fee helper: setArenaFeeHelper lets the owner swap in any contract as the fee source; a malicious helper could return fees near 100% (MAX_HOOK_FEE is 1e6 ppm) or redirect them to any recipient.
  • [medium] Owner can change fee splits without delay: The RobinhoodArenaFeeHelper owner can update recipients and fee ppm per pool, and set protocol fee recipient and rates, with no timelock visible in the source.
  • [low] Referral resolved from tx.origin: getFeesForPool and getTotalFeePpm read tx.origin for referral lookup, which makes the fee split depend on the originating EOA rather than the direct caller; tx.origin use is a known pattern worth noting.
  • [info] Fees are taken as ERC-6909 claims: The fee settles in claim tokens (ERC-6909) via poolManager.mint, and the hook's own afterSwap uses nonReentrant; handleHookFees is a revert stub. Fees accrue as claims held by the hook and recipients rather than being pushed directly.
  • [info] Deployer emergency withdraw: emergencyWithdraw in the deployer lets the owner transfer any ERC-20 balance it holds to any recipient.

Contract details

Verified source
Yes (RobinhoodArenaFeeHook)
Compiler
solc 0.8.30+commit.73712a01
Bytecode size
7,630 bytes
Upgradeable proxy
No
Detected patterns
erc6909-claims, moves-currency, ownable, return-delta

Pools using RobinhoodArenaFeeHook