StampHook on Robinhood Chain

Uniswap v4 Hook Contract 0xb07382187852485d485a171dd87b100bf4f1a8cc on Robinhood Chain · Launchpad · Verified contract

Volume (24h)
$9.43K
Value locked (TVL)
$0
All-time volume
$171.29K
Pools using this hook
1
Swaps (24h)
383 (181 traders)
Total swaps
4,627

What it does

A launch hook for the STAMP token that seeds a one-time single-sided liquidity position, takes a fixed 4% fee on every IMD-side swap for the protocol, and blocks outside liquidity additions.

How it works step by step

  • Opens one STAMP/IMD v4 pool exactly once, with the starting price set by startTick and launchSupply STAMP placed single-sided above it.
  • Keeps the launch liquidity locked forever: the hook has no path to remove that position.
  • Takes a fixed 4% fee on the IMD side of every swap, accrues it as protocol claims, and lets anyone push it to feeRecipient.
  • Reverts partial fills so the fee cannot be underpaid by swaps stopping early at a price limit.
  • Blocks external pool initialization and liquidity additions via beforeInitialize and beforeAddLiquidity.
  • Deploys a buy/sell router and an ETH router that route through the STAMP pool and an IMD/ETH pool.
Swap behaviour
Every swap in the STAMP/IMD pool is charged a 4% fee on the IMD side, taken in beforeSwap or afterSwap depending on swap direction; partial fills revert and each swap emits a Trade event.
Liquidity behaviour
Only the hook itself adds liquidity, once, during openPool: launchSupply STAMP is placed single-sided above the starting price and the position is never removed (no beforeRemoveLiquidity path; that hook is disabled). Unused STAMP on the contract is burned to 0xdead. External liquidity adds are rejected via beforeAddLiquidity revert.
Fee behaviour
A fixed 4% fee (FEE_BPS = 400) is charged on the IMD side of every swap in the STAMP/IMD pool and credited to the hook as a protocol claim balance; pool LP fee is set to 0. Accumulated fees are minted as ERC-6909 claims and can be withdrawn to feeRecipient by anyone via collectProtocolFees.
Owner & admin controls
Owner (two-step transfer via transferOwnership/acceptOwnership) can call openPool once to launch the token pool, and can renounce ownership only after openPool. Owner or the current feeRecipient can change feeRecipient via setFeeRecipient. No pausing, no upgrade mechanism, no fee-rate changes (FEE_BPS is a constant at 4%).

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize and beforeAddLiquidity revert to block any external pool initialization or liquidity addition. beforeSwap charges the 4% fee via return delta and records it in transient storage. afterSwap verifies full fills (reverts on partial fills), settles the fee on the unspecified side via afterSwapReturnDelta, and emits the Trade event with the trader address.

Security & trust assessment

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

Who controls it: The owner controls only the one-time pool opening and the fee recipient address. Whoever controls the feeRecipient receives all protocol fees; the owner or current recipient can redirect all future fee collection to any address. Ownership can be permanently renounced after launch, which then leaves only the fee recipient able to change its own address. No ability to pause swaps, change fee rates, or move the locked liquidity.

Risk to user funds: The hook holds protocol fee claims (ERC-6909) and an owned, locked liquidity position but no user deposits. Traders' IMD and STAMP move through the PoolManager and routers; swaps are reverted rather than partially filled. The hook cannot move user funds outside normal swaps, and the only fund-redirecting power is the fee recipient setting, which affects protocol fees only.

Security findings

  • [low] Fee recipient can be changed at any time: The owner or current feeRecipient can redirect all future protocol fees to an arbitrary address via setFeeRecipient, with no timelock.
  • [info] Launch liquidity is permanently locked: The launch position is single-sided liquidity owned by the hook with no removal path, so the launch STAMP is permanently locked, which benefits holders but means no LP exit exists.
  • [info] Partial fills are rejected: The afterSwap check reverts any swap that does not fully fill, so swaps that hit a price limit or run out of liquidity fail rather than partially executing.
  • [info] Chain-specific block number lookup: Hook depends on the arbBlockNumber precompile at address 100 for L2 block numbers, with a fallback to block.number when unavailable; this is informational for chain-specific behaviour.

Contract details

Verified source
Yes (StampHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
10,886 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, launchpad, moves-currency, ownable, return-delta, self-unlock

Pools using StampHook