AdamHook on Ethereum

Uniswap v4 Hook Contract 0x8e406c6c6cf6cfb859ca7de009c66b18560a20cc on Ethereum · Dynamic fee · Verified contract

Volume (24h)
$4.52K
Value locked (TVL)
$12.38K
All-time volume
$539.36K
Pools using this hook
1
Swaps (24h)
3 (3 traders)
Total swaps
1,292

What it does

Charges an ETH-denominated fee on every buy and sell of the ETH/ADAM pool, starting high at 20% for the first 30 minutes and settling at 1.5%, with the fee routed to a Treasury address.

How it works step by step

  • Restricts pool initialization to the owner and requires the pool to be native ETH paired with ADAM
  • Starts a 30-minute linear anti-snipe fee decay from 20% to the steady-state fee on the first filled swap
  • Takes the fee in ETH from the PoolManager and sends it directly to the immutable Treasury address
  • Grosses up the fee on exact-output swaps using fee/(1-fee) to keep the fee proportional to the ETH leg
  • Reverts partially filled ETH-specified swaps so unfilled requests are never charged
  • Allows the owner only to lower the steady-state fee, with no way to raise it
Swap behaviour
beforeSwap prepays the fee on ETH-specified swaps (exact-input buys, exact-output sells); afterSwap takes the fee on ADAM-specified swaps (exact-output buys, exact-input sells) and reverts any partial fill of ETH-specified swaps.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Fee is taken in ETH on every swap: starts at 20.00% at first filled swap and decays linearly to feeBps (1.50% at deployment) over 30 minutes; owner can only lower feeBps. Fee is sent directly to the Treasury via poolManager.take.
Owner & admin controls
Owner (Ownable2Step) can only lower the steady-state fee via lowerFee, never raise it; owner is the only account allowed to initialize the pool; ownership transfer is two-step; no pause or upgrade mechanism found.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool creation to the owner and the native ETH/ADAM pair; beforeSwap starts the launch clock and prepays the ETH fee on ETH-specified swaps; afterSwap takes the fee on ADAM-specified swaps and rejects partial fills of ETH-specified swaps; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to adjust swap deltas to collect the fee.

Security & trust assessment

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

Who controls it: The owner can lower the fee to zero but cannot raise it, cannot pause swaps, cannot move funds, and cannot upgrade the contract. Owner controls who initializes the pool only before initialization.

Risk to user funds: The hook never holds funds; every fee is taken from the PoolManager and sent directly to the immutable Treasury address. Users pay the decaying fee in ETH on each swap, and ETH-specified swaps that cannot fully fill revert.

Security findings

  • [info] Owner can reduce fee: The owner can lower feeBps to any value below the current one, including 0, which removes the protocol fee for all future swaps.
  • [info] No partial fills for ETH-specified swaps: ETH-specified swaps revert unless fully filled, so partial fills due to price limits or thin liquidity fail rather than execute.
  • [low] Hook takes value via return deltas: The hook uses return deltas to take ETH from swaps and pays it to the Treasury, which is a fixed address set at deployment; the Treasury address is immutable.
  • [info] Launch timer started by first swap: The first swap after deployment sets launchTimestamp for anyone to trigger, so the launch time depends on the first swapper.

Contract details

Verified source
Yes (AdamHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
6,753 bytes
Upgradeable proxy
No
Detected patterns
launchpad, ownable, return-delta

Pools using AdamHook