Fee sharing hook on Ethereum

Uniswap v4 Hook Contract 0x9338644744b78a28db36cbf535c7d4e4eb17a888 on Ethereum · Fee sharing

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
57
Swaps (24h)
2 (2 traders)
Total swaps
48

What it does

A Uniswap v4 hook that can take over part of swap flow through return deltas, has a token jar that receives funds collected from pools, and exposes a quote function, with the owner-style controls and fee behaviour not clearly visible from the decoded bytecode.

How it works step by step

  • Enables beforeInitialize, beforeAddLiquidity, beforeSwap and beforeSwapReturnDelta, so it runs on pool creation, liquidity addition and swaps, and can return a delta that changes how a swap settles.
  • Contains a token jar address (tokenJar, TOKEN_JAR) and a pollTokenJar function, indicating it routes collected tokens to a separate jar contract.
  • References a protocolFeeController, protocolFeeMultiplier and protocolFeeFlags, suggesting it reads or applies protocol fee settings for pools it manages.
  • Exposes a quote(bool,int256,bytes32) function that computes swap output values, returning three uint256 values.
  • Tracks initialized pools in an address array and a mapping keyed by pool id, and reports a pseudoTotalValueLocked per pool id.
  • Makes external calls including transfer, transferFrom, take, settle, sync and swap on the pool manager, and also calls back into pools for Uniswap V3 and PancakeSwap V3 style swap callbacks.
Swap behaviour
beforeSwap is implemented and can return a return delta through beforeSwapReturnDelta, meaning the hook can adjust amounts settled on a swap. It also moves currency via transfer and take/settle calls and runs afterSwap-related logic, so swap outcomes depend on hook-side accounting.
Liquidity behaviour
beforeAddLiquidity is enabled and can gate or inspect liquidity additions. beforeRemoveLiquidity and afterRemoveLiquidity selectors are present but the hook permissions do not enable removal callbacks, so those selectors are likely not reached by the pool manager.
Fee behaviour
Fee handling is not clearly determined from the decoded functions. protocolFeeMultiplier and protocolFeeFlags suggest protocol fee logic, and funds are routed to a token jar, but the exact fee rate and how it is applied cannot be confirmed without source.
Owner & admin controls
pollTokenJar is a state-changing function callable by anyone, which indicates a permissionless trigger for moving collected tokens. No owner or pause functions were identified in the decoded selectors, but the protocolFeeController reference implies an external controller may set fee parameters. Upgradability could not be determined.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, beforeSwapReturnDelta

beforeInitialize records or checks pool creation; beforeAddLiquidity inspects or restricts liquidity additions; beforeSwap runs custom logic before each swap; beforeSwapReturnDelta lets the hook alter the amounts settled in a swap, which is the main source of its influence over user funds.

Security & trust assessment

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

Who controls it: The main privileged influence is through whoever controls the protocol fee controller and the token jar address, which can affect fee amounts and the destination of collected tokens. No direct owner key was identified in the decoded functions.

Risk to user funds: The hook can hold and move pool and user funds through transfer, take, settle and sync calls, and can alter settlement through its swap return delta. Whether it can block swaps depends on logic not visible in the decoded selectors.

Security findings

  • [medium] Return delta swap interception: beforeSwapReturnDelta is enabled and the bytecode performs transfer, take and settle calls, so the hook can alter the amounts users receive or pay on swaps.
  • [medium] Protocol fee parameters from external controller: The hook references protocolFeeController, protocolFeeMultiplier and protocolFeeFlags; if the controller can change these values, fees charged to traders could change without a hook upgrade.
  • [low] Permissionless token jar poll: pollTokenJar is a nonpayable function with no visible access check in the selector list, so anyone can trigger transfer of collected tokens to the jar; the destination is fixed by the tokenJar address stored in slot 0.
  • [info] Unverified bytecode: No verified source is available, so the exact access checks, fee arithmetic and upgrade mechanisms cannot be confirmed from selectors alone.

Contract details

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

Pools using Fee sharing hook