Fee sharing hook on Ethereum

Uniswap v4 Hook Contract 0x8835d467e8feb79aa555c1e591ba984af9438044 on Ethereum · Fee sharing

Volume (24h)
$2.18K
Value locked (TVL)
$0
All-time volume
$2.18K
Pools using this hook
1
Swaps (24h)
10 (10 traders)
Total swaps
10

What it does

This hook takes an owner-adjustable tax from swaps through its after-swap return delta and sends it to a treasury, so traders receive less output than the pool quote while LP liquidity in the locked position stays restricted until its unlock time.

How it works step by step

  • Hook with afterSwap and afterSwapReturnDelta permissions, so it can take a share of each swap's output as a post-swap delta
  • Tax rate taxBps is stored in slot 7 and can be changed by the owner through setTaxBps, bounded by a MAX_TAX_BPS constant
  • Collected tax is directed to a treasury address (slot 6 offset 1) that the owner can set via setTreasury
  • Pool initialization and a locked liquidity position are handled through initializePool and addLockedLiquidity, with a lock duration and unlock time
  • Liquidity removal is gated by lock state (isLocked, unlockTime) and tracked via lockedLiquidity and liquidityBurned
  • Contract is Ownable and includes sweep, collectFees and unlockCallback paths that move ERC20 tokens held by the hook
Swap behaviour
After each swap the hook computes a tax in basis points on the swap and returns that amount as a hook delta, so a portion of the trade output is diverted to the hook and then to the treasury. Swaps in either direction appear to be taxed by the same taxBps rate, though the exact direction-dependent logic cannot be confirmed from decoded bytecode alone.
Liquidity behaviour
Liquidity can be added to a locked position via addLockedLiquidity, with removal gated by the lock state and unlock time. Beforeadd and beforeremove callbacks are exposed in the selector list but their logic is not confirmed; the hook does not clearly modify liquidity beyond the locked-position mechanism.
Fee behaviour
The pool's static fee is used by the pool, and the hook adds a separate tax taken from swaps through the afterSwap return delta. The tax rate is taxBps, adjustable by the owner up to MAX_TAX_BPS, and the proceeds are routed to the treasury.
Owner & admin controls
The owner can call setTaxBps to change the tax rate up to MAX_TAX_BPS, setTreasury to change the recipient of collected tax, transferOwnership and renounceOwnership, and sweep to move tokens out of the hook. No pause or upgrade mechanism was identified in the decoded selectors.

Enabled Uniswap v4 callbacks

afterSwap, afterSwapReturnDelta

afterSwap is used to compute and take the tax on swap output; afterSwapReturnDelta allows the hook to return a delta that moves a share of the swap amount to the hook.

Security & trust assessment

Risk level: high, estimated (decoded bytecode, low confidence).

Who controls it: A single Ownable owner controls the tax rate, the treasury destination, token sweeping and ownership transfer, so a compromised or malicious key could raise taxes and extract hook-held funds.

Risk to user funds: The hook takes a percentage of swap output through the return delta and holds tokens in the contract, which the owner can sweep or redirect; traders pay the tax on every swap and LP funds in the locked position are restricted until unlock.

Security findings

  • [high] Owner-adjustable tax rate: setTaxBps lets the owner change taxBps (slot 7), so the owner can raise the tax on every swap up to MAX_TAX_BPS, taking a larger share of trader output.
  • [high] Owner can redirect tax and sweep tokens: setTreasury (slot 6) sets where collected tax goes, and sweep(address) can move tokens the hook holds, so a privileged key can divert accumulated funds.
  • [medium] Hook takes tokens via return delta: afterSwapReturnDelta lets the hook take a share of swap output on each trade, so users receive less than the pool's quoted output.
  • [info] Locked liquidity controls: Liquidity is locked for a duration with unlockTime and isLocked state; removal depends on lock status, which limits LP exit until the lock ends.

Contract details

Verified source
No
Bytecode size
11,598 bytes
Upgradeable proxy
No
Detected patterns
erc20, fee-sharing, launchpad, moves-currency, ownable, return-delta, self-unlock, tax

Pools using Fee sharing hook