DealHook on Robinhood Chain

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

Volume (24h)
$492
Value locked (TVL)
$14.89K
All-time volume
$1.08M
Pools using this hook
1
Swaps (24h)
1 (1 traders)
Total swaps
3,345

What it does

A Uniswap v4 hook for the DEAL/USDG pool that sets sender-dependent LP fees and takes a fee on buys and sells for reward and treasury flows.

How it works step by step

  • Overrides the LP fee per swap based on the sender: 1% for the authenticated DealRouter, quoter, buyback burner and all sells, and a flat 5% for any other buyer
  • Takes an output-token Deal fee (up to 10%) on router and quoter buys and sends it straight to the reward vault, recording commit fees for Deal buys
  • Charges a 2% USDG fee on sells not routed through the authenticated sell router, sent to the treasury
  • Locks pool initialization to the POL manager at one authorized seed price to prevent hostile initialization
  • Checkpoints a TWAP oracle before and after every swap and emits buyback observation events
Swap behaviour
Buys of DEAL get a sender-based LP fee (1% for the router, quoter, buyback and sells; 5% for others), and router or quoter buys pay a Deal fee in DEAL to the reward vault; sells pay a 2% USDG fee to the sell fee recipient unless routed through the authenticated sell router. Exact-output swaps are rejected.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Per-swap LP fee overrides by sender class: swaps via the quoter, buyback burner, or authenticated DealRouter and all sells pay 1% (10,000 pips); other buyers pay a flat 5% (50,000 pips). Buys take an output-token Deal fee of dealFeeBps (max 10%) sent to the reward vault via poolManager.take, for router and quoter buys. Sells through non-sell-router senders pay a 2% USDG output fee (SELL_HOOK_FEE_BPS) sent to sellFeeRecipient; the authenticated sell router is exempt at the hook level.
Owner & admin controls
Setup authority (immutable) can configure the pool, propose and bind the DealRouter and SellRouter (two-step accept), configure buyback and the pool initializer, and activate the hook once; after activation there are no owner parameter changes or pausing in the hook itself, and the hook is not upgradeable. Commitment pausing is read from the external controller.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, afterSwapReturnDelta

beforeInitialize restricts pool initialization to the POL manager at the single authorized seed price. beforeSwap checkpoints the TWAP oracle, enforces pool identity, blocks exact-output swaps, and returns per-sender LP fee overrides. afterSwap checkpoints the oracle, takes output-token fees to the reward vault or sell fee recipient, records commit fees for router buys, and returns positive deltas that reduce user output.

Security & trust assessment

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

Who controls it: The setup authority can only act before activation; after activation no privileged key can change fees, pause swaps, or move funds through the hook. Remaining trust sits in the immutable controller, reward vault, flow ledger, buyback burner and TWAP oracle, which are referenced but not verified here.

Risk to user funds: The hook holds no balances itself but routes a slice of every buy's output (dealFeeBps) to the reward vault and a 2% slice of sells to the treasury via return deltas; swaps revert if the hook is not active or the pool/currency pair does not match the configured one.

Security findings

  • [info] Hook takes output via return delta: afterSwap takes a fraction of the output token to the reward vault and sellFeeRecipient via poolManager.take and returns a matching positive delta, so the hook holds a claim on pool output and reduces the user's output.
  • [medium] Sell fee exemption relies on external router: Sells routed through the authenticated sell router pay no hook-level 2% fee; exemption depends on DealSellRouter charging the same fee to other callers, which is enforced off-hook.
  • [info] Initialization gated to protocol: Pool initialization is restricted to the POL manager at one seed price; a hostile initialize would otherwise permanently break seeding, so this is a deliberate lock that depends on the seed price being correct at configuration.
  • [low] Critical dependencies outside this contract: Activation depends on the external controller's commitmentsPaused and sealed campaign state; the hook's behaviour on swaps is fixed by bytecode but the reward and fee economics are governed by external contracts not reviewed here.

Contract details

Verified source
Yes (DealHook)
Compiler
solc 0.8.30+commit.73712a01
Bytecode size
16,388 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, liquidity-management, moves-currency, oracle, return-delta, rewards

Pools using DealHook