SlopPoolHook on Ethereum

Uniswap v4 Hook Contract 0x75dd3c47015ea92b88557ac6ee1de07ee4d420cc on Ethereum · Fee sharing · Verified contract

Volume (24h)
$27
Value locked (TVL)
$26.65K
All-time volume
$18.83M
Pools using this hook
1
Swaps (24h)
2 (2 traders)
Total swaps
37,428

What it does

A fee hook for the ETH/SLOP pool that charges a decaying launch fee on ETH-to-SLOP buys and a flat 2% fee on SLOP-to-ETH sells, splitting the proceeds between a buy-and-void receiver and the team.

How it works step by step

  • Restricts pool initialization and swaps to the single ETH/SLOP pool with fee 0 and tick spacing 60
  • Charges a buy fee that starts at launchStartFeeBips and decays linearly to 2% over launchDecayBlocks after the first buy
  • Takes a flat 2% fee on sells, taking ETH from the pool manager
  • Splits fees: launch-fee portion and half the normal fee go to the buy-and-void receiver, the rest to the team address
  • Rejects exact-output swaps to keep fee calculation on exact input
Swap behaviour
On buys (ETH in, SLOP out) the hook sets a dynamic ETH fee via beforeSwap and records fee amounts in transient storage; on sells (SLOP in, ETH out) it takes 2% of the ETH output in afterSwap. Exact-output swaps are rejected.
Liquidity behaviour
No liquidity callbacks; liquidity add and remove are not modified or restricted by the hook.
Fee behaviour
Charges an ETH-denominated fee on ETH-to-SLOP buys (zeroForOne) via beforeSwapReturnDelta, using a launch fee that decays linearly from launchStartFeeBips to 200 bips over launchDecayBlocks after the first buy. Sells of SLOP for ETH take a flat 200 bips fee on the ETH output via afterSwapReturnDelta. Fees are split 50/50 between buy-and-void receiver and team address, with launch-fee portions going entirely to buy-and-void.
Owner & admin controls
Only the current teamAddress can call setTeamAddress (rotate the team payout address) and setBuyAndVoidFeeReceiver (redirect the buy-and-void fee sink). No pause, no upgrade proxy, no owner fee cap; the fee schedule is fixed by immutables and launch parameters.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool creation to the ETH/SLOP pool with fixed fee and tick spacing. beforeSwap computes and reserves the buy fee and enforces exact-input only. afterSwap takes fee tokens from the pool manager and distributes ETH fees. beforeSwapReturnDelta and afterSwapReturnDelta let the hook claim a portion of the swap delta as the fee.

Security & trust assessment

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

Who controls it: The teamAddress key can redirect all future team fee ETH to any address and can redirect the buy-and-void fee receiver to an arbitrary contract, which controls where a large share of collected fees go. Rotating the team address is a single-step change with no timelock.

Risk to user funds: The hook can take ETH from swaps as fees and forwards it to the buy-and-void receiver and team address. It does not hold user principal or LP positions and cannot block liquidity removal, but a misconfigured or malicious receiver could block buy swaps or capture fee flow.

Security findings

  • [medium] Single-key control over fee destinations: setTeamAddress and setBuyAndVoidFeeReceiver are gated only by msg.sender == teamAddress with no timelock or multisig requirement, so a compromised team key can redirect all future fee flows.
  • [low] Swap liveness depends on fee receiver: The buy-and-void receiver is an external contract that receives ETH via depositBuyAndVoidFees; if it reverts, swaps that generate buy-and-void fees will revert and trading is blocked.
  • [info] Return-delta fee mechanics: The hook takes ETH from the pool through poolManager.take and uses return deltas, so it holds protocol-fee value transiently within the swap; fee accounting relies on transient storage slots 0 and 1 set in beforeSwap and read in afterSwap.
  • [info] Team payout address misconfiguration risk: If the team address is set to a contract that rejects ETH, forceSafeTransferETH is used so payouts do not revert, but funds may be sent to an unrecoverable address if misconfigured.

Contract details

Verified source
Yes (SlopPoolHook)
Compiler
solc 0.8.28+commit.7893614a
Bytecode size
5,439 bytes
Upgradeable proxy
No
Detected patterns
launchpad, moves-currency, return-delta

Pools using SlopPoolHook