PushBaseDynamicFeeHook on Base

Uniswap v4 Hook Contract 0x1b993c37768f78bcb03cfa1d7b08f43dbcd540c4 on Base · Dynamic fee · Verified contract

Volume (24h)
$3.05K
Value locked (TVL)
$2.81K
All-time volume
$264.57K
Pools using this hook
1
Swaps (24h)
208 (113 traders)
Total swaps
5,868

What it does

A dynamic-fee hook where an off-chain keeper pushes the pool LP fee within set bounds and the hook charges an extra fee on each swap that is credited to a treasury.

How it works step by step

  • Stores per-pool min, max, default fee, hook fee and default TTL set by operators.
  • Lets pushers set a live LP fee inside the band with an expiry timestamp.
  • Falls back to defaultFee when the pushed fee expires.
  • Takes hookFee of the unspecified swap amount and mints it to the treasury.
  • Rejects pool keys that do not point at this hook or lack the dynamic-fee flag.
Swap behaviour
beforeSwap applies the pushed fee while its TTL is live, otherwise defaultFee, both with the override flag. afterSwap takes hookFee of the unspecified token and mints it to the treasury as ERC-6909 claims.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
A keeper pushes a live LP fee within a per-pool [minFee, maxFee] band with a TTL; after expiry swaps fall back to defaultFee. Each swap also charges hookFee of the unspecified token, minted to the treasury as ERC-6909 claims, so swappers pay lpFee plus hookFee in total.
Owner & admin controls
Owner (Ownable) can transfer or renounce ownership and set operators via setOperators. Owner or operators can set pool fee bands and hook fee via setFeeConfig and add or remove pushers via setPushers. Owner or operators or pushers can push the live dynamic LP fee via pushFee. Treasury address is immutable. No pausing or upgrade mechanism found.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap, afterSwapReturnDelta

beforeSwap returns the active dynamic fee with the override flag. afterSwap takes hookFee of the unspecified amount and mints it to the treasury. afterSwapReturnDelta is enabled so the hook can take a share of swap output.

Security & trust assessment

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

Who controls it: The owner, operators and pushers can set any fee within the configured band, including the hookFee up to near 100% of the unspecified amount, and can push fees with no step limit or cooldown. A compromised pusher key can therefore move pool pricing in one transaction within the band.

Risk to user funds: The hook does not hold user principal, but it takes hookFee from swap outputs via afterSwapReturnDelta and mints it to the treasury, and the fee band controlled by privileged keys determines the price paid by swappers.

Security findings

  • [medium] Unbounded fee movement by pushers: pushFee has no max step per push and no cooldown, so a pusher can move the live fee anywhere within [minFee, maxFee] in a single transaction.
  • [medium] Hook fee lacks a practical cap: hookFee is only bounded by FEE_DENOMINATOR, so a misconfigured setFeeConfig can take almost the entire unspecified amount of a swap.
  • [low] Operator can escalate to pusher: setPushers is callable by operators, so operators can grant pusher rights, making operators and pushers effectively the same trust tier.
  • [low] No deadline on pushFee: pushFee has no deadline parameter, so a delayed transaction can land and apply a stale fee.
  • [info] Slot0 fee does not reflect live pricing: slot0.lpFee is not authoritative; off-chain readers must derive the live fee from feeConfig or simulate swaps.

Contract details

Verified source
Yes (PushBaseDynamicFeeHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
9,010 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, ownable, return-delta

Pools using PushBaseDynamicFeeHook