Launchpad hook on Robinhood Chain

Uniswap v4 Hook Contract 0xa055faeb1428249daf5972d92f54a343a1eeaae0 on Robinhood Chain · Launchpad

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

What it does

This hook gates a launch pool by checking each swap against an external sale contract, and whether trades pay more or less cannot be determined from the decoded bytecode.

How it works step by step

  • Exposes a bind(address) function that writes an address into storage slot 0, which appears to link the hook to a sale or bootstrapper contract
  • Calls out to poolKey(), initialPrice() and checkTrade() on external contracts, suggesting it validates pool configuration and trade conditions against a separate sale contract
  • Gates swaps through beforeSwap and afterSwap, using checkTrade() of the external contract to decide whether a trade is allowed and to record its outcome
  • Gates liquidity additions and removals through beforeAddLiquidity and beforeRemoveLiquidity, which are view functions that do not change state
  • Validates pool initialization through beforeInitialize, which reads the external initial price configuration
  • Exposes sale(), bootstrapper() and manager() getters that return references to the surrounding launch system
Swap behaviour
afterSwap is nonpayable and can update state after a trade; beforeSwap is view and calls checkTrade() on an external contract to permit or reject the trade. The exact fee or price effect of checkTrade cannot be determined from the decoded bytecode.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity are view functions that appear to check liquidity changes against the external sale state without modifying storage.
Fee behaviour
Uses the pool's static fee. No fee-setting function or dynamic fee return was found in the decoded selectors.
Owner & admin controls
bind(address) is an unprotected nonpayable function visible in the dispatch table; no owner check or access modifier can be confirmed from decoded bytecode, so anyone able to call it may be able to rebind the hook to a different sale contract. No pausing or upgrade mechanism was identified.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeDonate

beforeInitialize validates pool setup; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; beforeSwap gates trades via checkTrade; afterSwap records post-trade state; beforeDonate is pure and appears to reject or ignore donations.

Security & trust assessment

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

Who controls it: If bind is callable by any account or by a single privileged key, that key could redirect trade and liquidity gating to an arbitrary contract, affecting whether users can swap or add and remove liquidity.

Risk to user funds: The hook does not appear to hold tokens or use return deltas, so it cannot directly take user funds, but it can block swaps and liquidity operations through its callbacks and the external contract it trusts.

Security findings

  • [high] Unprotected bind function: bind(address) is dispatched and writes to storage slot 0 with no visible caller check in the decoded code, so if it lacks an access check anyone could repoint the hook to a different sale or bootstrapper contract.
  • [medium] Swap gating depends on external contract: beforeSwap calls checkTrade() on an external address, so swaps can be blocked or altered by whatever that contract returns, and that contract's owner or logic is outside this hook.
  • [medium] Unverified external dependencies: poolKey(), initialPrice() and checkTrade() are called on an address held in storage; without source, the trust assumptions of that contract cannot be assessed.
  • [low] Afterswap state writes: afterSwap is nonpayable and modifies state after each trade, which adds gas cost and a dependency on the external contract's behavior.

Contract details

Verified source
No
Bytecode size
3,687 bytes
Upgradeable proxy
No

Pools using Launchpad hook