Fee sharing hook on Ethereum
Uniswap v4 Hook Contract 0xfc25c1d270a5d14221cb9929952415d93eeaa0cc on Ethereum · Fee sharing
- Volume (24h)
- $12.64K
- Value locked (TVL)
- $273
- All-time volume
- $12.64K
- Pools using this hook
- 1
- Swaps (24h)
- 55 (31 traders)
- Total swaps
- 55
What it does
A launch-style hook that skims a share of swap fees into team, platform and reward accounts and applies an extra tax to protected buyers during an early protection window.
How it works step by step
- Captures a share of swap value via beforeSwapReturnDelta and afterSwapReturnDelta
- Splits accrued fees into team, reward and platform portions using basis points
- Tracks pending team fees and reward balances, paid out by claimTeamFees() and flushRewards()
- Applies address-based protection and extra tax for protected buyers during an early window
- Records initialization state and pool key in beforeInitialize
- Swap behaviour
- Before and after each swap, the hook applies return deltas that take a fee share from the swap, records buyer and protection data, and may apply an additional tax for flagged addresses.
- Liquidity behaviour
- Add and remove liquidity callbacks (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) are exposed in the selector list, but their behaviour cannot be fully confirmed from the decoded bytecode; the hook does not enable them in its permissions, so they are not invoked by the pool manager.
- Fee behaviour
- The hook takes a portion of swap fees as a return delta (afterSwapReturnDelta / beforeSwapReturnDelta), split into fee parts by feeParts(uint256) using TEAM_BPS, REWARD_BPS and platformBps with DENOMINATOR as the base. Team fees accumulate as pendingTeamFees() and are paid out via claimTeamFees(). Reward fees accumulate in pendingRewards(id) and totalPendingRewards() and are distributed by flushRewards(). The pool's lpFee() is also exposed, so a base LP fee is present alongside the hook's split.
- Owner & admin controls
- No owner or pause function is among the dispatched selectors. Admin-like surfaces are permissionless triggers: claimTeamFees() (0x4196223c) and flushRewards(uint256) (0x5fa3e2bf) are nonpayable and appear not to be restricted to a privileged caller in the decoded selectors. Recipients are fixed at runtime via teamRecipient(), platformRecipient and feeVault() getters; no setter selectors were decoded.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize: records initialization state and the pool key during pool creation. beforeSwap: applies protection/buyer checks and a pre-swap return delta. afterSwap: records swap data (protection, buyer, amounts) and applies an after-swap return delta that skims fees. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take or reroute swap amounts, which is how the fee skim is realised.
Security & trust assessment
Risk level: medium (decoded bytecode, medium confidence).
Who controls it: Team and platform recipients are fixed addresses read at runtime; any authority over the recipient or fee configuration could not be confirmed from the decoded selectors. Callable claim and flush functions suggest that anyone may trigger payouts, which limits privileged-key risk but also means timing of distributions is not controlled by a single party.
Risk to user funds: The hook can take a portion of swap amounts through return deltas and holds accrued team, platform and reward balances in storage (slots 0, 8, 9, 10). Swaps from addresses flagged by the protection logic may be taxed at a higher rate. It does not appear to lock pool liquidity, but it can reduce proceeds for traders.
Security findings
- [medium] Hook takes swap value via return deltas: The hook enables beforeSwapReturnDelta and afterSwapReturnDelta, so it can take a share of every swap's input or output and route it to team, platform and reward accounts.
- [low] Payout functions appear permissionless: claimTeamFees() and flushRewards(uint256) are nonpayable with no decoded caller check, so the timing of payouts and reward flushes can be triggered by anyone.
- [medium] Address-based protection tax: The hook stores protection and buyer state (boughtDuringProtection, protectedBuyer, protection, startedAt, walletTokenLimit, additionalTaxPpmForBuyer), indicating an anti-sniper or launch-protection tax that can change effective fees for specific addresses.
- [info] Unverified source: The source is unverified and function names are partly inferred from selectors, so the exact fee arithmetic and any hidden owner-only setters could not be confirmed.
Contract details
- Verified source
- No
- Bytecode size
- 11,355 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc6909-claims, moves-currency, return-delta, self-unlock
Pools using Fee sharing hook
- ETH / POLICE (0.00% fee) — 24h volume $12.64K, TVL $273, 55 swaps today