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
- ETH / test (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today