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
- ETH / SLOP (0.00% fee) — 24h volume $27, TVL $26.65K, 2 swaps today