Custom pricing hook on Robinhood Chain

Uniswap v4 Hook Contract 0x39890fb2b5f2d71476cef1abd22e68e33c53a0cc on Robinhood Chain · Custom pricing

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

What it does

This hook takes over part of swap settlement using return deltas and holds value as ERC-6909 claims that a payee can withdraw, but the exact pricing and which trades pay more or less cannot be confirmed without source.

How it works step by step

  • Exposes a rate() / MAX_RATE() / asset() / base() / payee() / owed() surface, suggesting a yield or rate-based swap where the hook prices trades against an external rate rather than the pool curve
  • Uses beforeSwap and afterSwap with return deltas to take over part of the swap accounting, so the hook can substitute the pool's own curve output
  • Calls the pool manager's unlock callback (unlockCallback) to settle balances in a nested unlock flow, moving currency through take and then mint/burn
  • Issues ERC-6909 claim tokens via mint and burn, letting the hook hold credits rather than immediate transfers
  • Exposes claim() so accrued amounts owed to a payee can be withdrawn
  • Includes liquidity callbacks (beforeAddLiquidity/afterRemoveLiquidity etc.) that are present in the dispatch table but whose behaviour cannot be confirmed from bytecode alone
Swap behaviour
beforeSwap and afterSwap run on every swap, with beforeSwapReturnDelta and afterSwapReturnDelta enabled, so the hook can take or supply tokens and alter the net amounts settled for the trader; the exact pricing direction and which trades pay more or less cannot be determined from decoded bytecode.
Liquidity behaviour
Add and remove liquidity callbacks are dispatched (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) but the hook does not enable those permissions, so they should not be invoked by the pool manager; liquidity is not directly managed by the hook.
Fee behaviour
Uses the pool's static fee as far as the hook permissions show; no dynamic fee override is advertised, but return deltas on swaps may extract a spread or fee from trades in a way not confirmable without source.
Owner & admin controls
No owner or admin selectors were decoded; payee() and creator() suggest a configured recipient set at deployment, and rate/MAX_RATE indicate parameters that may be fixed or stored in the bytecode, but whether they can be changed later could not be determined.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize checks or sets pool state at pool creation; beforeSwap can return a delta that replaces part of the swap outcome; afterSwap can return a delta to settle residual amounts; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to move currency as part of swaps.

Security & trust assessment

Risk level: high, estimated (decoded bytecode, low confidence).

Who controls it: If a privileged key controls the payee, rate or any setter (none decoded), it could redirect accrued claims or change pricing that affects every swap; this cannot be ruled out from bytecode.

Risk to user funds: The hook can hold ERC-6909 claims and move currency through return deltas and unlock settlement, so user swap proceeds and pool balances routed through it are exposed to whatever logic governs those flows.

Security findings

  • [high] Return deltas move currency on swaps: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can alter the amounts settled for every swap and can take tokens from the flow between trader and pool.
  • [medium] Hook-held claims and payee withdrawal: The contract mints and burns ERC-6909 claims and exposes claim() and owed() for a payee, so value can accumulate inside the hook and be withdrawn by whoever controls the payee path.
  • [medium] No source available: Without verified source the exact pricing formula, rate update authority and any pause or upgrade paths cannot be confirmed, so the behaviour is inferred from selectors only.
  • [info] Unlock callback reentry surface: unlockCallback and self-unlock usage mean the hook re-enters the pool manager during swaps, which is a standard pattern but increases the importance of correct accounting.

Contract details

Verified source
No
Bytecode size
6,962 bytes
Upgradeable proxy
No
Detected patterns
erc6909-claims, moves-currency, return-delta, self-unlock

Pools using Custom pricing hook