HotpotHook on Ethereum
Uniswap v4 Hook Contract 0x0acca8ed08d2e45e3edb195bddcb0877b21520cc on Ethereum · Other · Verified contract
- Volume (24h)
- $12
- Value locked (TVL)
- $4.34
- All-time volume
- $12
- Pools using this hook
- 1
- Swaps (24h)
- 3 (1 traders)
- Total swaps
- 3
What it does
A Uniswap v4 hook for the ETH/HOTPOT pool that charges a high anti-sniper fee at launch, takes a fixed 4% ETH fee on trades, and runs a lottery where a qualifying buy can win 80% of the accumulated fee pot.
How it works step by step
- Creates the ETH/HOTPOT pool once at a chosen starting tick with tokens only, then opens trading once.
- Charges a kickoff fee of 60% falling linearly to 4% over 15 minutes, then a fixed 4% on buys and sells.
- Splits buy fees 75% to a prize pot and 25% to a project wallet; sell fees go fully to the pot.
- Arms a lottery on buys of at least minBuy ETH with a chance starting at 0.5% and rising 0.1% per armed buy.
- Resolves the armed buy using a future block hash; on a win the buyer receives 80% of the pot claimable via claimPrize(), provided they still hold the tokens.
- Restricts pool creation to the launcher and rejects any other external pool initialization with this hook.
- Swap behaviour
- Buys and sells pay a fee in ETH. The kickoff fee falls from 60% to 4% over 15 minutes after trading opens, then stays at 4%. Buy fees are split 75% to the pot and 25% to feeRecipient; sell fees go 100% to the pot. Buys of at least minBuy ETH arm the bomb with the current chance, and pending armed buys are resolved on swaps in later blocks.
- Liquidity behaviour
- No liquidity callbacks. Pool creation seeds single-sided token liquidity (tokens only, no ETH) through the position manager at createPool(); the hook does not otherwise manage liquidity.
- Fee behaviour
- Kickoff fee starts at 60% on trading open and falls linearly to 4% over 15 minutes; after that a fixed 4% on buys and sells. Fees are always taken in ETH via poolManager.mint. On buys 75% goes to the pot and 25% to feeRecipient; on sells 100% goes to the pot. Fees are returned as beforeSwap or afterSwap return deltas.
- Owner & admin controls
- No admin controls after openTrading(): the launcher cannot pause, blacklist, change fees, limits or upgrade. Before openTrading() the launcher alone can call createPool() once and openTrading() once. feeRecipient and minBuy are immutable; collectFees() can only send project fees to feeRecipient.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize blocks any external pool creation with this hook (reverts PoolCreationClosed). beforeSwap enforces trading open, resolves pending bomb outcomes, and takes the ETH fee via a return delta on exact-in buys and exact-out sells. afterSwap takes the fee on the other side via a return delta and arms the bomb on qualifying buys. beforeSwapReturnDelta and afterSwapReturnDelta are enabled to let the hook take fees.
Security & trust assessment
Risk level: low (verified source, high confidence).
Who controls it: After openTrading() the launcher has no privileged powers. Before that, the launcher controls pool creation and the starting price, and can choose the token amount deposited as liquidity. The launcher address and feeRecipient are fixed at deploy.
Risk to user funds: The hook holds all ETH from fees and prizes as PoolManager claims and can send them only to the pot, feeRecipient, or prize claimants. It cannot pull tokens from users. The 100% kickoff fee and 4% ongoing fees are a cost to traders by design, and the winner's share of the pot depends on a random roll that cannot be controlled by the launcher.
Security findings
- [info] Randomness and tx.origin usage: Winner is tx.origin, and the random roll is keccak of the armed block hash, round and buyer. The buyer can use a contract wallet or pre-choose timing, but cannot know the hash when sending the buy, so the outcome is not predictable in advance.
- [info] Forfeit condition: A winner must still hold the tokens received from the armed buy at resolution, otherwise the prize is forfeited and stays in the pot. Winners who sell before resolution lose the prize.
- [low] Blockhash expiry window: Resolution must happen within 256 blocks of the armed buy; otherwise the armed buy expires and the prize is not awarded. Anyone can call resolve(), so resolution is not dependent on a specific party.
- [info] Funds held as PoolManager claims: Prizes and fees are held as PoolManager ERC-6909 claims of the hook. Users must claim via claimPrize(); unclaimed prizes remain in the pool manager until then.
- [low] Single armed buy slot: Only one armed buy is tracked at a time; buys in the same block as an armed buy do not arm, and an unresolved armed buy blocks new arming until it is resolved or expires.
Contract details
- Verified source
- Yes (HotpotHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 11,913 bytes
- Upgradeable proxy
- No
- Detected patterns
- launchpad, return-delta, self-unlock
Pools using HotpotHook
- ETH / tHOTPOT (0.30% fee) — 24h volume $12, TVL $4.34, 3 swaps today