Launchpad hook on Ethereum

Uniswap v4 Hook Contract 0x4f5e700b5a48517b5de83a40497357d7dcffa800 on Ethereum · Launchpad

Volume (24h)
$367.34K
Value locked (TVL)
$15.77K
All-time volume
$367.34K
Pools using this hook
1
Swaps (24h)
1,173 (334 traders)
Total swaps
1,173

What it does

This hook runs a token launch pool that accepts liquidity during setup and periodically sends collected proceeds to a treasury and reward flow, with fees taken at the pool's static rate and no swap-side price changes.

How it works step by step

  • Acts as a launch hook: the launch(int24,uint160,uint256) function is payable and writes pool parameters (tick, pool key fields and a launched flag) into storage, indicating it initializes a token sale pool.
  • beforeInitialize gate is present, suggesting the pool can only be initialized through the hook's launch flow.
  • beforeAddLiquidity is enabled and dispatched, so liquidity additions to the pool pass through the hook.
  • The hook holds a flusher role and a treasury address, and exposes flush(uint256) and notifyReward(uint256) style reward/flush routines that move currency via the pool manager (take/settle/sync selectors appear in the bytecode).
  • Stores a sale contract reference and a USDC-denominated key, and tracks lastFlushAt, indicating periodic flushing of collected proceeds to treasury and rewards.
Swap behaviour
beforeSwap, afterSwap are dispatched selectors in the hook interface but the hook does not claim swap permissions in its address, so no swap callbacks are enabled. Swaps are not gated or re-priced by this hook.
Liquidity behaviour
beforeAddLiquidity is enabled and gates liquidity additions; beforeRemoveLiquidity and afterAddLiquidity/afterRemoveLiquidity are dispatched but not enabled in the address permissions, so removals are not intercepted.
Fee behaviour
Uses the pool's static fee. Constants LP_FEE, TREASURY_BPS and BPS exist, which suggest a fee split routed to treasury during flushes, but the hook does not enable dynamic fee or fee override permissions.
Owner & admin controls
Owner-gated setters exist: setTreasury(address) and setFlusher(address). The owner (Ownable) can redirect treasury proceeds and choose the flusher address. No pause or upgrade mechanism was identified in the decoded selectors.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity

beforeInitialize: validates and records pool initialization for the launch. beforeAddLiquidity: restricts or checks liquidity additions to the launched pool.

Security & trust assessment

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

Who controls it: The owner can change the treasury destination and the flusher, and the flusher can trigger releases of accumulated funds. A compromised owner or flusher key could redirect proceeds.

Risk to user funds: The hook can hold and move token balances via pool manager currency settlement and flush, so user-provided sale proceeds and fee shares are exposed to the owner and flusher roles.

Security findings

  • [medium] Owner can redirect treasury: setTreasury(address) is an owner-only setter; changing the treasury address redirects future flushed proceeds, so a compromised owner key could divert funds.
  • [medium] Flusher controls fund movement: flush(uint256) moves currency through the pool manager (take/settle/sync selectors present) and the flusher address is set by the owner via setFlusher, so the chosen flusher can trigger transfers of hook-held balances.
  • [low] Hook holds token balances: The hook is tagged as moving currency and holding ERC20 balances (transfer, transferFrom, approve, balanceOf selectors), so accumulated fees or sale proceeds sit in the contract until flushed.
  • [info] Unverified source: No verified source is available, so behaviour is inferred from decoded selectors and storage layout only; exact flush accounting and launch pricing cannot be confirmed.

Contract details

Verified source
No
Bytecode size
14,329 bytes
Upgradeable proxy
No
Detected patterns
erc20, launchpad, moves-currency, ownable, rewards, self-unlock

Pools using Launchpad hook