Likely launchpad hook on Ink

Uniswap v4 Hook Contract 0x9f0834cc829fd789782f7afc76de67e3dedb2ac8 on Ink · Launchpad

Volume (24h)
$0
Value locked (TVL)
$4.28
All-time volume
$47
Pools using this hook
13
Swaps (24h)
0 (0 traders)
Total swaps
169

What it does

A launchpad-style Uniswap v4 hook that sets up token launches with per-pool configuration, dynamic swap fees, vesting and anti-sandwich logic, and routes fees and proceeds into vault, buyback and airdrop contracts.

How it works step by step

  • prepareLaunch stores a launch configuration (pool key, amounts, addresses and tick bounds) that is later read by the swap and liquidity callbacks.
  • beforeInitialize records per-pool tick and config state when a pool is created using this hook.
  • beforeSwap and afterSwap read launch state, vesting and last-swap data, and call internal accounting that can credit fees to vaults.
  • dynamicFeeForSwap computes a swap fee from pool configuration, the swap direction and launch state rather than using a static pool fee.
  • Liquidity add and remove callbacks check launch state and pending deepening or auto-burn counters before allowing changes.
  • Pending buyback, airdrop and holder-registration data suggests part of collected value is redistributed to registered holders and vaults.
Swap behaviour
beforeSwap and afterSwap are both implemented. beforeSwap reads launch config, vesting and last-swap timing, and can enforce wallet and sandwich checks; afterSwap updates swap bookkeeping and pending buyback or auto-burn counters, and the hook has beforeSwapReturnDelta so it can take or alter amounts in the swap.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity are implemented and read launch state and pending deepening counters; afterRemoveLiquidity and afterAddLiquidity are exposed as view selectors in the dispatch table, so their enabled status is not confirmed by the permission flags.
Fee behaviour
Dynamic: dynamicFeeForSwap(bytes32,uint256,bool) returns a fee derived from stored per-pool configuration and swap direction. Part of the fee appears to be routed to vault, buyback and airdrop destinations via internal credit functions.
Owner & admin controls
The owner (storage slot 0) can call setOwner, setFactory, setAirdropVault, setArbExecutor and setArbActive, and the factory address can be changed by the owner. The owner-controlled arbExecutor and arbActive flag indicate an admin-operated arbitrage path. Parameter changes to fee logic are not confirmed from the selectors alone.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta

beforeInitialize sets up per-pool state for a new pool; beforeAddLiquidity and beforeRemoveLiquidity gate or adjust liquidity changes against launch state; beforeSwap and afterSwap apply launch rules, fee accounting and bookkeeping to swaps; beforeSwapReturnDelta lets the hook take a share of swap amounts, which is how it moves currency.

Security & trust assessment

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

Who controls it: The owner key controls ownership transfer, factory and vault addresses, the arbitrage executor and its enable flag. A compromised or malicious owner could redirect vault flows or enable the arbitrage path to extract value.

Risk to user funds: The hook can take a share of swap amounts through return deltas, credit fees to vault, buyback and airdrop destinations, and revert swaps or liquidity changes based on its rules. It does not appear to hold a large custodial balance itself beyond pending accounting, but routed funds depend on owner-set destinations.

Security findings

  • [medium] Hook takes currency via return deltas: beforeSwapReturnDelta is enabled and the bytecode moves currency (take, transferFrom, transfer), so the hook can skim or redirect part of every swap. The exact split is set by stored config that is not readable without source.
  • [high] Owner-controlled arbitrage executor: setArbExecutor and setArbActive let the owner designate an address and toggle an arbitrage mode; if that path can bypass fee or sandwich checks, it can extract value at the expense of traders and LPs.
  • [medium] Privileged vault and factory addresses: The owner can replace the airdrop vault, factory and arb executor with arbitrary addresses, so funds routed to vaults depend entirely on the owner key staying uncompromised.
  • [medium] Anti-sandwich and wallet limits can block trades: The bytecode contains SandwichBlocked and MaxWalletExceeded errors, so swaps can revert based on timing or holding limits, which may trap or delay user transactions.
  • [info] No verified source: Without verified source, exact fee splits, launch parameters and whether the owner can change them cannot be confirmed; findings rely on decoded selectors and error names.

Contract details

Verified source
No
Bytecode size
24,289 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, return-delta

Pools using Likely launchpad hook