Likely launchpad hook on Robinhood Chain

Uniswap v4 Hook Contract 0xa8ccafb2586046056aa0ecde458e19ac09d0e0cc on Robinhood Chain · Launchpad

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

What it does

Each swap on this launch pool pays a fixed fee of feeBps (at most 10 percent) to the treasury, charged on the native currency side through beforeSwap or afterSwap depending on swap direction, while the pool itself can only be initialized by the launcher.

This read was written for the hook 0x9e42…20cc on Ethereum 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

  • Hook is bound to one pool via registerPool, callable only by the launcher, which records the pool id and token and sets live to true once.
  • beforeInitialize only allows pool initialization when the sender is the launcher and the key matches the registered pool.
  • beforeSwap charges a fee of feeBps (max 10 percent) on swaps where the specified amount is in the native currency side, taking it to the treasury via poolManager.take and returning it as a before-swap delta.
  • afterSwap charges the same feeBps on the other swap direction, computed from the currency0 delta and taken to the treasury, returned as an after-swap delta.
  • Collected fees are tracked in totalCollected and emitted as FeesCollected events.
  • Owner can set the launcher once, change the treasury, and rescue any ETH or ERC20 balance held by the hook.
Swap behaviour
Swaps on the registered pool pay a fee of feeBps basis points of the swap amount; which swap direction is charged in beforeSwap versus afterSwap depends on whether the specified amount is in the native currency side, so both directions are charged the same rate but through different callbacks.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Fee is fixed at construction as feeBps (capped at MAX_FEE_BPS of 1000, i.e. 10 percent), taken from swap amounts via poolManager.take to the treasury address and returned as return deltas; the fee cannot be changed after deployment, but the treasury can be redirected.
Owner & admin controls
Owner (Ownable2Step) can set the launcher once, change the treasury address to any non-zero address at any time, rescue all ETH or any ERC20 held by the hook to any address, and transfer or renounce ownership. There is no pause and no upgrade mechanism; feeBps is immutable.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool creation to the launcher and the registered pool key; beforeSwap and afterSwap take the fee and return it as a delta, which is how the hook extracts value from swaps; beforeSwapReturnDelta and afterSwapReturnDelta allow those deltas to be returned to the pool manager.

Security & trust assessment

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

Who controls it: The owner controls the fee recipient and can drain any balance the hook holds; the owner key is therefore the main privileged risk, though the fee rate itself is fixed.

Risk to user funds: The hook does not hold user swap funds as custody; it takes up to 10 percent of swap amounts to the treasury via the pool manager, and the owner can rescue any residual balance the hook holds.

Security findings

  • [medium] Treasury can be redirected at will: setTreasury lets the owner change the recipient of all fees to any non-zero address with no timelock, so every future swap fee can be diverted by a single transaction.
  • [low] Owner can rescue hook balances: rescue lets the owner transfer all ETH or any ERC20 balance held by the hook to an arbitrary address, which would affect fees accumulated there.
  • [info] Hook takes value via return deltas: beforeSwap and afterSwap call poolManager.take and return a fee delta, so every swap on the registered pool transfers feeBps of the swap amount to the treasury.
  • [info] Launcher is a trusted one-time setter: setLauncher can be called only once by the owner, and the launcher alone controls pool registration and initialization, so the launcher must be trusted to register the correct pool.

Contract details

Verified source
No
Bytecode size
5,435 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, ownable, return-delta

Pools using Likely launchpad hook