Likely liquidity management hook on Base

Uniswap v4 Hook Contract 0xa6df7309fd4f1d953e67023cae93264f7f002ac0 on Base · Liquidity management

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
3
Swaps (24h)
17 (1 traders)
Total swaps
17

What it does

A Uniswap v4 hook that gates pool initialization, liquidity changes and swaps, with keeper and trusted-router controls and custom residue handling, likely for managed liquidity or custom accounting.

How it works step by step

  • Gates pool initialization through beforeInitialize
  • Restricts add and remove liquidity via beforeAddLiquidity and beforeRemoveLiquidity
  • Runs custom logic in beforeSwap and afterSwap, using a gas policy and trusted routers
  • Moves currency with take, transfer and sweep, using a self-unlock callback
  • Routes leftover amounts to an admin-set residue recipient
  • Supports a global pause and keeper whitelist for operations
Swap behaviour
beforeSwap and afterSwap run custom logic on each swap, with gas policy parameters and trusted router checks, and may move currency through the self-unlock flow.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity are implemented and appear to gate or restrict liquidity operations, with third-party liquidity possibly blocked (ThirdPartyLiquidityBlocked error present) and a self-unlock pattern via unlock/unlockCallback used to move currency with the pool manager.
Fee behaviour
Hook does not appear to override the pool fee in the decoded selectors; fee exposure is not clearly determinable from bytecode alone.
Owner & admin controls
Owner-style admin address (slot 0) can set admin via setAdmin, toggle globalPaused via setGlobalPaused, manage trusted routers (setTrustedRouter), trusted quoters (setTrustedQuoter), keepers (setKeeper), set the residue recipient (setResidueRecipient) and gas policy (setGasPolicy). Admin is an EOA or multisig holding these privileges; no upgrade proxy pattern was identified.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap

beforeInitialize validates pool initialization; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; beforeSwap and afterSwap run custom logic around swaps and may interact with pool accounting using the self-unlock pattern.

Security & trust assessment

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

Who controls it: Admin key can pause the hook globally, change trusted routers and quoters, add keepers, redirect residue funds via the residue recipient, and alter gas policy parameters that influence swap execution.

Risk to user funds: The hook takes and sends currency through the pool manager and transfers tokens, so it can hold residual balances and redirect residue to the configured recipient. Pausing can block user operations but does not directly seize funds based on the observed selectors.

Security findings

  • [medium] Admin pause can block swaps and liquidity: A global pause flag (globalPaused) can be toggled by admin, which can block swap or liquidity callbacks.
  • [medium] Admin-controlled residue recipient: Admin can change the residue recipient, which controls where leftover balances from rounding or partial fills are sent.
  • [medium] Hook moves currency during callbacks: The hook moves currency (take, transfer, transferFrom, sweep) and uses the self-unlock pattern, so it can hold and move pool or user funds in its own balance.
  • [low] Privileged router and keeper whitelists: Trusted routers and keepers are whitelisted by admin, granting them privileged paths into swap execution.
  • [info] Unverified source: Contract is about 24KB and without verified source the exact logic cannot be confirmed.

Contract details

Verified source
No
Bytecode size
24,389 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, self-unlock

Pools using Likely liquidity management hook