Launchpad hook on Base
Uniswap v4 Hook Contract 0x089233bdf3784b04a3e76b98928f9130dff550cc on Base · Launchpad
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 1 (1 traders)
- Total swaps
- 1
What it does
This launchpad hook adds a bounded fee to swaps on launch pools and uses sniper protection and graduation thresholds, though the exact per-direction fee and which trades pay more could not be confirmed from the bytecode.
How it works step by step
- Hook is registered on pools for launch tokens and tracks each launch through activateLaunch, markGraduated and an unlockCallback flow that appears to be the self-unlock pattern.
- Uses beforeSwap and afterSwap with return deltas, so it can take or give currency on swaps rather than only observing them.
- Contains a sniper-protection window (SNIPER_WINDOW) and a graduation target in wei (GRADUATION_TARGET_WEI), suggesting early-buyer restrictions and a migration or graduation threshold.
- Charges a hook fee bounded by MIN_HOOK_FEE_BPS and MAX_HOOK_FEE_BPS and routes trade fee tokens through a fee router via onTradeFeeToken.
- Liquidity callbacks (beforeAddLiquidity, beforeRemoveLiquidity, after variants) are dispatched but appear to be gated or pass-through; no clear custom logic was decoded for them.
- Holds a configurable fee router and protocol treasury address and can be reconfigured by the owner via configureFeeRouter.
- Swap behaviour
- beforeSwap and afterSwap both run and can modify deltas through beforeSwapReturnDelta and afterSwapReturnDelta. Based on the sniper-window and graduation constants, early swaps are likely restricted or taxed while the launch is active, and a hook fee is taken on trades. Exact per-direction treatment could not be confirmed from decoded bytecode alone.
- Liquidity behaviour
- Add and remove liquidity callbacks are present in the dispatch table. Decoded bytecode does not show clear custom accounting for them, so liquidity behaviour is unconfirmed beyond the callbacks existing.
- Fee behaviour
- Hook fee is bounded between MIN_HOOK_FEE_BPS and MAX_HOOK_FEE_BPS and collected via return deltas and forwarded through a fee router (onTradeFeeToken). The actual fee value and whether it differs by trade direction cannot be determined from bytecode.
- Owner & admin controls
- configureFeeRouter(address) can be called by a privileged account to change the fee router. Launch activation and graduation (activateLaunch, markGraduated) are state transitions whose authorisation could not be determined from the input. Owner or role identity could not be read.
Enabled Uniswap v4 callbacks
afterInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
afterInitialize: records launch pool setup after the pool is created. beforeSwap: gates or prices swaps during the launch, including sniper protection. afterSwap: updates launch state and fee accounting after trades. beforeSwapReturnDelta: lets the hook take or redirect currency in swaps. afterSwapReturnDelta: lets the hook take or redirect currency after swaps.
Security & trust assessment
Risk level: high, estimated (decoded bytecode, low confidence).
Who controls it: A privileged key can change the fee router and may control launch activation and graduation. Those powers could redirect fees or alter trading conditions for all pools using this hook.
Risk to user funds: The hook can take and move currency during swaps via return deltas and fee transfers, so trader and LP funds passing through its pools are exposed to its fee logic and any admin reconfiguration.
Security findings
- [medium] Return-delta currency movement: beforeSwapReturnDelta and afterSwapReturnDelta are enabled and the hook moves currency via take calls, so it can extract value from swaps.
- [medium] Privileged fee router reconfiguration: configureFeeRouter lets a privileged account redirect trade fee tokens to a different router, and the protocol treasury is set by a stored address.
- [medium] Unverified launch state transitions: activateLaunch and markGraduated change launch state and their access control could not be confirmed from bytecode, so a caller may be able to alter launch status.
- [low] Self-unlock pattern: The hook calls the pool manager unlock with a callback, which is a common but sensitive pattern that depends on correct caller checks in unlockCallback.
Contract details
- Verified source
- No
- Bytecode size
- 10,804 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, launchpad, mev-protection, moves-currency, return-delta, self-unlock