Custom pricing hook on Robinhood Chain

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

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

What it does

This hook takes a share of swap value through return deltas into a soot bucket that privileged keepers can later distribute to pan roles, but which trades pay more or less cannot be determined from decoded bytecode alone.

How it works step by step

  • Implements an ERC20 token (name, symbol, decimals, totalSupply, balanceOf, transfer, approve) whose supply is fixed at SUPPLY and is also the hook contract itself.
  • Uses beforeSwap and afterSwap with return deltas, so it can take a portion of swap amounts as a soot mechanism tied to a home pool.
  • Tracks sootCollected, sootScooped, sootBps, SOOT_FLOOR_BPS and SOOT_CEIL_BPS, suggesting a collected-fee bucket that is later distributed through scoop().
  • Has a scoop(uint8,uint256) function that moves accumulated value out via the pool manager using unlock/unlockCallback and take, gated by per-pan keeper addresses.
  • Uses beforeInitialize and afterSwap storage to designate a home pool and a struck flag, and splits value across pan roles (PAN_HEARTH, PAN_STOKER, PAN_GUILD, PAN_COMMONS) via commonsBps.
  • Liquidity callbacks (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) exist as selectors but are not enabled in the hook permissions.
Swap behaviour
On beforeSwap the hook may set a return delta, and on afterSwap it may adjust the return delta again, which lets it take a share of swap amounts; exactly which swaps pay more or less cannot be determined from decoded bytecode alone.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Fees are not set dynamically by the hook; the hook takes value through return deltas, with the split controlled by sootBps and commonsBps values that cannot be read exactly without source.
Owner & admin controls
The contract is Ownable with renounceOwnership and transferOwnership; owner-level control over parameters or pans could not be fully determined from bytecode, and keeper addresses per pan are settable through scoop-related logic.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize records the home pool and initial state; beforeSwap and afterSwap use return deltas to take value and update soot accounting; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take currency from swaps.

Security & trust assessment

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

Who controls it: Owner and keeper roles could alter fee splits or initiate scoop withdrawals of accumulated soot, directing collected value to chosen pan addresses.

Risk to user funds: The hook takes a share of swap amounts through return deltas and holds accumulated soot balances, so user swap proceeds can be partly captured and later distributed by privileged roles.

Security findings

  • [high] Return-delta currency capture: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can take currency out of user swaps via return deltas and route it through soot accounting.
  • [medium] Value extraction via scoop: scoop(uint8,uint256) moves accumulated value through unlock and take, gated by keeper and pan roles, so a compromised keeper could drain collected value.
  • [medium] Ownership control: The contract is Ownable with transferOwnership, so the owner can change ownership and potentially configuration affecting fee splits.
  • [info] Unverified logic: No verified source is available, so exact fee magnitudes and gating conditions could not be confirmed.

Contract details

Verified source
No
Bytecode size
7,599 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, ownable, return-delta, self-unlock

Pools using Custom pricing hook