GazzFeeHook on Robinhood Chain

Uniswap v4 Hook Contract 0xed4b32249a657228207c0a429dd8668690afe0cc on Robinhood Chain · Fee sharing · Verified contract

Volume (24h)
$5.23K
Value locked (TVL)
$23.86K
All-time volume
$2.37M
Pools using this hook
1
Swaps (24h)
63 (25 traders)
Total swaps
15,150

What it does

Adds a fixed 2% fee in native ETH on every swap in gazz.fun pools, forwarded to a fee splitter that distributes it.

How it works step by step

  • Charges a flat 2% fee (200 bps) on the native ETH side of every swap in gazz.fun pools, in either direction.
  • Takes the fee from the pool manager to the immutable feeSink address via poolManager.take.
  • Calls onFee on the GazzFeeSplitter with the pool token address so the splitter can apply the correct split.
  • Rejects pool initialization unless currency0 is native ETH, so it only serves ETH-paired pools.
  • Uses before- and after-swap return deltas so the fee is settled within the swap without changing the token being traded.
Swap behaviour
On each swap the hook takes 2% of the ETH amount: in beforeSwap for exact-input ETH sells and exact-output token sells, and in afterSwap for exact-input token sells and exact-output ETH buys. The fee is sent to feeSink and the hook calls onFee with the token address.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Charges a flat 2% (200 bps) fee on every swap, always taken in native ETH: in beforeSwap when ETH is the specified currency, otherwise in afterSwap on the ETH amount of the delta. The fee is taken from the pool manager to feeSink and then onFee is called on the sink tagged with the token address (currency1) so the splitter can route it.
Owner & admin controls
No admin controls found. feeBps is immutable (capped at 5% in constructor) and feeSink is immutable; no owner, pause or upgrade functions exist in the source.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize rejects any pool whose currency0 is not native ETH. beforeSwap takes the ETH fee on swaps where ETH is the specified side and returns a before-swap delta equal to the fee. afterSwap takes the ETH fee on swaps where ETH is the unspecified side and returns it as an after-swap delta. The return-delta flags let the hook settle the fee against the swap amounts.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: No privileged role exists in the hook itself. Fee rate and sink address are fixed at deployment, so the team cannot change them after deployment; trust lies with the feeSink (GazzFeeSplitter) contract and its owner, which receives and distributes all fees.

Risk to user funds: The hook can take up to 2% of the ETH side of each swap and send it to feeSink; it never takes the traded token and cannot block swaps by itself, though a reverting feeSink would cause swaps to revert.

Security findings

  • [medium] Return-delta accounting controls user funds: The hook takes tokens from the pool manager and sends them to feeSink through beforeSwap and afterSwap return deltas. Correct delta accounting is critical; the source states it was fork-tested for all four swap directions.
  • [low] Trust in external fee sink: onFee is called on an external feeSink with the token address. If the sink is malicious or reverts, every swap in pools using this hook can be affected.
  • [info] Rounding to zero on dust swaps: Fee is computed as a percentage of the ETH amount with integer division and skipped when it rounds to zero, so very small swaps pay no fee.
  • [info] Immutable fee and sink: feeBps and feeSink are immutable and feeBps is hard-capped at 500 bps, so no admin can raise the fee or redirect fees after deployment.

Contract details

Verified source
Yes (GazzFeeHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
2,990 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta

Pools using GazzFeeHook