HotpotHook on Ethereum

Uniswap v4 Hook Contract 0x29c192b529c234582bcd9e80ebfe76c4415d60cc on Ethereum · Launchpad · Verified contract

Volume (24h)
$909
Value locked (TVL)
$275
All-time volume
$909
Pools using this hook
1
Swaps (24h)
20 (5 traders)
Total swaps
20

What it does

A Uniswap v4 ETH/token pool where a 60% kickoff fee decays to 4% and every buy above a minimum has a growing chance to win 80% of an ETH pot, with the rest of the fees accumulating for the pot or the project.

How it works step by step

  • Creates the ETH/token pool once at a launcher-chosen starting tick with single-sided token liquidity
  • Opens trading once; fees start at 60% and decay linearly to 4% over 15 minutes
  • Takes 4% fees on all swaps after kickoff, splitting buys 75% to the pot and 25% to the project wallet, and sells 100% to the pot
  • Arms a bomb on buys of at least minBuy ETH with a chance that starts at 0.5% and rises 0.1% per armed buy
  • Resolves the armed buy from blockhash, pays 80% of the pot to the buyer on a win, and resets the chance
  • Blocks pool creation by anyone else via beforeInitialize
Swap behaviour
Buys and sells charge an ETH-denominated fee taken through beforeSwap or afterSwap return deltas, falling from 60% to 4% during the 15-minute kickoff and then fixed at 4%. Swaps revert before trading opens. Buys of at least minBuy ETH arm the bomb, which is resolved by a later swap or a resolve() call.
Liquidity behaviour
No liquidity callbacks. At createPool the hook's position manager call mints single-sided token liquidity (tokens only) over a range above the start tick; the position is owned by the launcher via the position manager.
Fee behaviour
Kickoff fee starts at 60% when trading opens and falls linearly to 4% over 15 minutes; afterwards 4% on buys and sells, fixed in code. Fees are always taken in ETH via poolManager.mint. Buy fees: 75% to the pot, 25% to feeRecipient; sell fees: 100% to the pot. Fee is returned as a beforeSwap or afterSwap return delta.
Owner & admin controls
Launcher (immutable address) can only call createPool once and openTrading once; after openTrading it has no pause, fee, blacklist, limit or upgrade power. No proxy, no owner transfer. collectFees and claimPrize are permissionless with fixed destinations.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: reverts any external pool initialization so only createPool can create the pool. beforeSwap: applies the ETH-denominated fee on exact-in buys and exact-out sells, resolves pending bomb rolls, and reverts swaps before trading opens. afterSwap: applies the fee on the other swap direction and arms the bomb on buys of at least minBuy ETH. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take its fee as a delta from the swap.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: The launcher key controls only the one-time pool creation (choice of starting tick and token amount) and the opening of trading. It cannot change fees, pause swaps, blacklist addresses, or move pot or project ETH. The project fee recipient is fixed at deploy.

Risk to user funds: The hook holds all ETH from fees and the pot as PoolManager claims and can pay it out only to a bomb winner (claimPrize) or feeRecipient (collectFees). It cannot be paused or drained by the launcher. Users are exposed to the bomb mechanics (a losing buyer's ETH is added to the pot) and to bugs in accounting or randomness.

Security findings

  • [medium] Bomb outcome relies on blockhash randomness: Randomness for the bomb is blockhash of the armed buy's block combined with round and buyer address. Block producers can influence blockhash within limits, and the buyer address is public, so outcomes are not strictly unpredictable to a builder.
  • [low] Winner must keep tokens to receive prize: The prize is only paid if the winner still holds the tokens bought in the armed buy when resolved; otherwise the prize is forfeit and stays in the pot. This is a design rule that can surprise winners who sell.
  • [low] Prize recipient uses tx.origin: Armed buys are tied to tx.origin, so the winner is the EOA that sent the transaction; contract wallets and smart accounts get the wrong recipient logic and cannot be paid through their contract address directly.
  • [info] All ETH sits as PoolManager claims of the hook: The hook holds all pot and fee ETH as PoolManager claims. Funds are reachable only through the defined claimPrize and collectFees paths, both fixed-destination, but a bug in accounting would affect pooled ETH.
  • [info] Immutable contract, no upgradeability: Verified source with no proxy or upgrade mechanism; behaviour is fixed at deployment.

Contract details

Verified source
Yes (HotpotHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
12,127 bytes
Upgradeable proxy
No
Detected patterns
launchpad, return-delta, self-unlock

Pools using HotpotHook