HookrRoot on Robinhood Chain

Uniswap v4 Hook Contract 0x89c9fb50d1f03192230ffb1c279bb6e7d3fe6acc on Robinhood Chain · Utility · Verified contract

Volume (24h)
$235.16K
Value locked (TVL)
$92.73K
All-time volume
$1.36M
Pools using this hook
29
Swaps (24h)
2,677 (540 traders)
Total swaps
10,391

What it does

A Hookr-managed pool hook that applies Rules-defined fees and optional arbitrage recapture to swaps and enforces liquidity locks so LPs and launchers can run a configured market with bounded fee and take rules.

How it works step by step

  • Authenticates the calling router or quoter and records the payer for attribution and refunds
  • Applies a bounded LP fee: base fee plus Rules and advisory surcharges, capped by bind-time limits
  • Reserves specified-side charges via return deltas and settles quote takes to the Rules module
  • Optionally runs a dynamic fee simulation to price the fee on the simulated swap outcome
  • On opted-in lane pools, runs an arb recapture frame with an executor before and after the swap, with gas caps and claim checks
  • Enforces a principal removal lock for a Rules-defined window and gradually donates pending recapture LP shares before liquidity changes
Swap behaviour
Swaps are authenticated against the pinned router or quoter, priced with bounded LP fees and quote takes, and specified-side charges are reserved. On dynamic fee pools the swap is simulated to price the fee on its outcome. On lane pools an arb recapture runs before the quote and after settlement, and the Rules receive their quote take.
Liquidity behaviour
Liquidity removal is locked for a Rules-defined number of blocks after initialization, bounded to 100,000 blocks. On lane pools, a pending LP share from recapture is donated to the pool gradually before liquidity adds and removals land, so positions earn it in proportion to time in range.
Fee behaviour
Pools that opt into Hookr Rules set the LP fee from the base fee plus Rules and advisory surcharges, capped by bind-time limits; dynamic fee pools simulate the swap and price the fee on its outcome. A quote take (a share of the quote currency) is minted to the Rules module, and burns of the subject token to a dead address may apply. Arb recapture legs pay the base LP fee; the pool's partner share of recaptured profit is pushed to the Rules rather than donated to LPs directly.
Owner & admin controls
No owner or pause functions found in the root; the root is immutable and its wiring (PoolManager, registry, router, quoter, lane module) is fixed at construction. Per-pool parameters are set by the launcher through Rules/advisory at initialization and frozen. The registry holds a lane executor switch that can enable or disable arb recapture for pools that opted in, and the executor's code is pinned by codehash.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: validates the root initializes the pool. beforeAddLiquidity: runs Rules and advisory checks and flushes pending lane donations. beforeRemoveLiquidity: enforces the principal lock and flushes pending donations. beforeSwap: authenticates the route, quotes fees, reserves specified-side charges and runs arb recapture frames on lane pools. afterSwap: reconciles fills, mints quote take to the Rules, burns permitted subject amounts and runs the after-phase recapture. beforeSwapReturnDelta and afterSwapReturnDelta: return the reserved specified-side charge and the unspecified-side take.

Security & trust assessment

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

Who controls it: Little privileged control over an existing pool: the root has no owner. The registry's lane executor (a configured address whose code is pinned) can execute arb recapture on opted-in pools and receives a partner share of recaptured profit; a compromised or malicious executor could extract the pool's arbitrage value within its gas and push rules. The launcher and Rules admin set pool parameters at launch and they are frozen afterwards.

Risk to user funds: The hook can take quote tokens and burn subject tokens from pool swaps via return deltas and mints, and can revert swaps when Rules, advisory or lane checks fail; pool LP funds are subject to recapture donations. Users' principal is not custodied by the hook but a pool's LP and swap flows are shaped by these deltas.

Security findings

  • [medium] Hook holds and moves pool-currency deltas: The hook takes quote tokens via PoolManager mint and subject tokens via a take to 0x...dead, and reserves specified-side amounts through return deltas. Fee and take amounts are bounded by Rules and advisory caps checked on every swap.
  • [medium] Executor-driven recapture on opted-in pools: Arb recapture pushes profit to a registry-designated executor under a gas cap; the executor's codehash is pinned and a switch in the registry can turn recapture on or off. Recapture legs and frame checks revert on malformed state, so a bad executor can block swaps on lane pools rather than only stealing value.
  • [low] Liquidity lock and fail-closed module calls: Principal removal is blocked for a Rules-defined window up to 100,000 blocks, and adds/removes call Rules and advisory hooks that can revert a swap or liquidity action if they fail (fail-closed unless the advisory is fail-open).
  • [low] External dependency on routers and MEV view: Several routing and MEV checks depend on external contracts (curated router msgSender, MEV view on the executor) with bounded gas; a revert in these checks reverts the swap or, for the MEV check, is ignored and lets the swap proceed.
  • [info] Partial source review: Source files for HookrTypes, HookrRootStorage, HookrDelegation and the registry were omitted from the input, so parts of the storage, delegation and push-split logic were not fully reviewed.

Contract details

Verified source
Yes (HookrRoot)
Compiler
solc 0.8.37+commit.f401782d
Bytecode size
20,904 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, mev-protection, moves-currency, return-delta

Pools using HookrRoot