Dynamic fee hook on Robinhood Chain
Uniswap v4 Hook Contract 0x8a34645c4d37d8e8b3c22d4a55d2c7cde434eacc on Robinhood Chain · Dynamic fee
- Volume (24h)
- $1.06
- Value locked (TVL)
- $0.36
- All-time volume
- $1.06
- Pools using this hook
- 2
- Swaps (24h)
- 2 (1 traders)
- Total swaps
- 2
What it does
HookrLane runs an executor-driven arbitrage recapture on pools that opt in, returning part of the arbitrage profit to the pool's Rules module, with trader credit limited to what the trader's own price move accounts for; the exact trade-by-trade fee split depends on the pool's Rules and advisory, which were not readable here.
This read was written for the hook 0x4c09…eacc on Robinhood Chain and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
How it works step by step
- Proxy hook whose implementation HookrLane is a module that HookrRoot deploys and reaches by DELEGATECALL, handling pool initialization and a recapture lane for pools whose Rules module requests it
- Before swap on a lane pool, runs an arb recapture frame where a frozen executor contract may trade against the pool, after checking the executor's live switch, codehash and gas floors
- After swap, runs the second arb recapture phase and credits the executor's pushed profit to the pool's Rules module, split by the frozen partner share
- Records the pool's dynamic fee state for executor legs and enforces that the executor leaves no pool deltas or stray claims behind, reverting the frame otherwise
- Tracks same-transaction liquidity additions and removals per position (King of the Pool ledger) and releases pending LP donations gradually on liquidity changes and swaps
- Pool initialization binds Rules and optional advisory modules, reads their caps and lock periods, and refuses unqualified quotes or delegated accounts
- Swap behaviour
- On lane pools, when the executor switch is on, each swap is preceded and followed by an arb recapture frame that may route profit from the executor to the pool's Rules module; trader credit is bounded by the trader's own price move. Swaps on pools without a lane run the ordinary path. Trades that move the price in the buy direction during the launch guard pay the full Rules path, and advisory-enabled legs are charged by the advisory.
- Liquidity behaviour
- Before liquidity is added or removed, any due pending LP donation is flushed to the pool. For King of the Pool pools, adds and removals are recorded per position and used to decide whether a swap in the same transaction is just-in-time liquidity; the Rules removal lock is applied at initialization.
- Fee behaviour
- Pools without a lane use the Rules module's dynamic fee declaration and the base LP fee; executor legs on lane pools pay the pool's base LP fee (or the advisory's quoted fee when an advisory is attached). Recapture profit is split with the frozen partner share, and the Rules module takes the trader leg on min(push, basis).
- Owner & admin controls
- The implementation has no owner, pause or upgrade functions visible in the ABI. Launchers, the registry's open-root check and lane switches live in the registry (IHookrLanes.executorLane, activeLaneOf, isLauncher, rootOpen), which controls whether a lane is on, its gas cap and which executor is active. The proxy's upgrade authority is not visible in the provided input.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize: validates and binds pools at initialization. beforeAddLiquidity and beforeRemoveLiquidity: flush pending LP donations and record King of the Pool ledger entries. beforeSwap: runs the before-phase arb recapture, the launch-guard routing and the swap-start tick mark. afterSwap: runs the after-phase arb recapture and carries dynamic fee state for executor legs. beforeSwapReturnDelta and afterSwapReturnDelta: the executor's pushed profit is settled through Rules, so the hook returns deltas on the swap.
Security & trust assessment
Risk level: high, estimated (decoded bytecode, medium confidence).
Who controls it: A privileged key on the registry or the proxy could enable or change the executor, adjust gas caps, or replace the implementation, affecting the value flows of every lane pool.
Risk to user funds: The hook can hold claims and move pool value to Rules modules via return deltas and pushes; Rules and the executor can receive funds from lane pools, so user funds are exposed to the lane's configuration and the upgrade path.
Security findings
- [high] Hook takes value via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are enabled and the executor's pushed profit is transferred to Rules and credited to traders, so the hook moves pool and user value on swaps.
- [high] Upgradeable proxy: The hook is a proxy that delegates all calls to implementation 0x3ba186e41b83abd4e91a2a72c2ff3baf8f88003c; whoever controls the proxy's admin can change the logic that handles user funds.
- [medium] Registry-controlled executor switch: The executor's on/off state, gas cap and identity come from the registry; a privileged registry change can enable arbitrary executor trading against pools with lanes.
- [medium] Complex gas-dependent frame logic: Lane calls use fixed gas grants and fail-open frames with reserve checks; unusual gas conditions could cause swaps to revert (InsufficientLaneGas) or skip recapture.
Contract details
- Verified source
- No
- Bytecode size
- 20,904 bytes
- Upgradeable proxy
- Yes
- Detected patterns
- dynamic-fee, return-delta, upgradeable
Pools using Dynamic fee hook
- ETH / HOSTEST (Dynamic fee) — 24h volume $1.06, TVL $0.36, 2 swaps today
- ETH / HOLD (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today