Fee sharing hook on Ethereum

Uniswap v4 Hook Contract 0xc50373838b1e670c997e04ff96a6f6e631e3c0cc on Ethereum · Fee sharing

Volume (24h)
$13.01K
Value locked (TVL)
$203
All-time volume
$13.01K
Pools using this hook
1
Swaps (24h)
97 (46 traders)
Total swaps
97

What it does

This hook charges a buy-side or sell-side fee on swaps through return deltas, with the fee taken in the currency routed to the hook and later paid out via payClaim; which direction pays more could not be determined from the decoded constants.

How it works step by step

  • Exposes BUY_FEE_BPS and SELL_FEE_BPS constants and a FEE_DENOMINATOR, indicating direction-dependent fee rates on swaps
  • Runs beforeSwap and afterSwap callbacks that can return a delta, so the hook can take a portion of swap amounts via the pool manager
  • Calls take(address,address,uint256) on the pool manager to withdraw currency owed to the hook
  • Exposes token() and payClaim(address,uint256), suggesting the hook accumulates a token balance that is later paid out to a recipient
  • Has liquidity and donate callbacks present in the interface but the bytecode shows swap-focused logic
Swap behaviour
beforeSwap and afterSwap are active and can return deltas; the hook takes a buy-side fee (BUY_FEE_BPS) or sell-side fee (SELL_FEE_BPS) depending on swap direction, with the exact rates and which direction pays more not determinable from the decoded constants alone.
Liquidity behaviour
Liquidity callbacks (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) are present in the dispatch table but no liquidity-specific logic has been identified.
Fee behaviour
Uses separate buy and sell fee rates in basis points, expressed against FEE_DENOMINATOR; the hook takes these fees via return deltas on swaps, and the destination of the collected fees is not determinable from bytecode alone.
Owner & admin controls
No admin controls found in decoded bytecode; no owner or setter selectors were identified, though fee constants and payClaim may be controlled by an unseen mechanism.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeSwap is used to gate or compute the swap-side fee; afterSwap is used to take the post-swap fee amount; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to alter the amounts settled with the pool manager; the liquidity and donate callbacks appear to be implemented but are not clearly used.

Security & trust assessment

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

Who controls it: Without source it cannot be confirmed who may call payClaim or whether any party can change the fee constants; if payClaim is gated to an owner, that party controls where accumulated fees go.

Risk to user funds: The hook can take currency from swaps through return deltas and the pool manager take call, so traders pay the hook's fee on each affected swap, and accumulated balances are held by the hook until paid out via payClaim.

Security findings

  • [medium] Hook takes currency via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are enabled and the bytecode calls take on the pool manager, so the hook can withdraw a portion of every swap's currency.
  • [info] Fee rates are fixed constants in bytecode: BUY_FEE_BPS and SELL_FEE_BPS are exposed as view functions, which suggests immutable or constant fee rates rather than admin-adjustable ones.
  • [medium] Payout function callable externally: payClaim(address,uint256) is a nonpayable external function; without source it is unclear whether it is restricted, so accumulated fees may be claimable by a privileged or arbitrary caller.
  • [info] No source verification: Analysis relies solely on decoded bytecode, so access checks and exact fee math cannot be confirmed.

Contract details

Verified source
No
Bytecode size
3,552 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta

Pools using Fee sharing hook