CashCatGraduationHook on Robinhood Chain
Uniswap v4 Hook Contract 0x8526171645365821d0630f20bbe35284a3d1a040 on Robinhood Chain · Launchpad · Verified contract
- Volume (24h)
- $3.03K
- Value locked (TVL)
- $24.54K
- All-time volume
- $1.29M
- Pools using this hook
- 38
- Swaps (24h)
- 11 (5 traders)
- Total swaps
- 7,965
What it does
A singleton hook for CashCat launch pools that marks a token as graduated in the same swap that pushes the locked position's paired-currency value past the token's threshold, and that only the launchpad can use to create pools.
How it works step by step
- afterSwap reads the post-swap pool price from the PoolManager and computes how much of the paired currency the locked launch position would be worth at that price, rounding down.
- If that paired amount reaches the token's snapshotted threshold, afterSwap sets a one-way graduated flag for the pool and emits TokenGraduated. The flag is never cleared.
- beforeInitialize only allows pool creation when the initializing sender is the bound launchpad, so third parties cannot pre-initialize a launch pool key.
- register lets the launchpad store each pool's token, threshold, position liquidity and tick range once. A second registration for the same pool reverts.
- The hook takes no fees and returns zero deltas from afterSwap, so it does not take or redirect swap value.
- Swap behaviour
- afterSwap runs after every swap on a registered pool. It returns immediately once graduated is set. Before graduation it reads the pool price, computes the paired-currency principal of the locked position and latches graduation if the threshold is met. It always returns a zero delta. Unregistered pools hit a no-op path.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- Uses the pool's static fee. The hook does not set, take or share fees.
- Owner & admin controls
- There is no owner, pause or upgrade mechanism. The deployer account can call setLaunchpad once to bind the launchpad, and the bind is checked against the launchpad's own graduationHook pointer. After the bind, only the launchpad can register pools, and each pool can be registered once. Pool liquidity, token and threshold cannot be changed after registration.
Enabled Uniswap v4 callbacks
beforeInitialize, afterSwap
beforeInitialize gates pool creation so only the launchpad can initialize pools that use this hook. afterSwap records the graduation milestone after each swap and always returns a zero delta.
Security & trust assessment
Risk level: low (verified source, medium confidence).
Who controls it: The deployer can bind the launchpad once and then has no further power. The launchpad can register pool configs for pools using this hook, one per pool. No party can pause the hook, change fees, move funds or upgrade the contract.
Risk to user funds: The hook holds no tokens and returns zero deltas from afterSwap, so it cannot take, owe or redirect swap value. It has no pool-level custody. Its only influence on funds is through the graduation flag, whose downstream use is in the launchpad.
Security findings
- [low] Graduation depends on launchpad-supplied config: The threshold, token, tick range and liquidity used to compute graduation come from the launchpad's register call, and the hook trusts them once stored. A compromised or buggy launchpad could register a misleading threshold for a pool, though it cannot change it afterwards.
- [info] Graduation effects are defined outside this contract: The NatSpec describes graduation as cosmetic. The hook only sets the graduated flag and emits an event. Any effects that depend on the flag live in the launchpad, which was not provided, so they cannot be assessed here.
- [info] Pool creation reverts when the launchpad is not bound: beforeInitialize reverts for any sender other than the launchpad, and no pool can be initialized with this hook until setLaunchpad runs. This only affects pool creation, not trading on existing pools.
- [low] Swap liveness depends on afterSwap never reverting: If afterSwap ever reverted when called by the PoolManager, every swap on that pool would revert. The code relies on bounded inputs from registration, the price read and the SqrtPriceMath and TickMath primitives. The argument is reasonable but has not been independently verified here.
- [info] Unused IHooks callbacks revert: The other callbacks revert with HookNotImplemented. Their permission bits are not set in the address, so the PoolManager never calls them.
Contract details
- Verified source
- Yes (CashCatGraduationHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 6,457 bytes
- Upgradeable proxy
- No
- Detected patterns
- launchpad
Pools using CashCatGraduationHook
- ETH / ZODSCC (1.00% fee) — 24h volume $3.03K, TVL $23.98K, 11 swaps today
- ETH / CCZ (1.00% fee) — 24h volume $0, TVL $314, 0 swaps today
- ETH / MODO (1.00% fee) — 24h volume $0, TVL $221, 0 swaps today
- ETH / Zod (1.00% fee) — 24h volume $0, TVL $22, 0 swaps today
- ETH / CashDog (1.00% fee) — 24h volume $0, TVL $3.95, 0 swaps today
- ETH / LION (1.00% fee) — 24h volume $0, TVL $0.39, 0 swaps today
- ETH / General Zod (1.00% fee) — 24h volume $0, TVL $1.25, 0 swaps today
- ETH / SED (1.00% fee) — 24h volume $0, TVL $0.47, 0 swaps today
- ETH / CEPE (1.00% fee) — 24h volume $0, TVL $0.15, 0 swaps today
- ETH / GME (1.00% fee) — 24h volume $0, TVL $0.04, 0 swaps today
- ETH / GAPPY (1.00% fee) — 24h volume $0, TVL $0.72, 0 swaps today
- ETH / PIVOT (1.00% fee) — 24h volume $0, TVL $2.02, 0 swaps today
- ETH / SAUCE (1.00% fee) — 24h volume $0, TVL $0.24, 0 swaps today
- ETH / HMCAT (1.00% fee) — 24h volume $0, TVL $0.07, 0 swaps today
- ETH / SWOGE (1.00% fee) — 24h volume $0, TVL $0.07, 0 swaps today
- ETH / TENDIES (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / JUGGERNAUT (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / Jimothy (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / WINKCAT (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / CASHCAT (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today