Auction hook on Base
Uniswap v4 Hook Contract 0xa49d29aa9813eb0e1f325c4134b6cf844d3138e0 on Base · Auction
- Volume (24h)
- $0
- Value locked (TVL)
- $209.39K
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 0
What it does
A Uniswap v4 hook that runs a time-bounded, tick-scheduled sale mechanism: it sets a dynamic LP fee on swaps, enforces start and end times and proceeds thresholds, and blocks outside liquidity additions and donations.
This read was written for the hook 0x9a58…38e0 on Base and reused here: the two run the same code.
How it works step by step
- Records pool key, initial LP fee and starting and ending ticks on initialization
- Blocks external liquidity additions and donations by reverting in beforeAddLiquidity and beforeDonate
- Enforces a start time and reverts swaps that occur before it
- Dynamically updates the LP fee during swaps using a gamma parameter
- Tracks proceeds against minimum and maximum thresholds and reverts when insufficient or when the maximum is reached
- Uses the pool manager unlock and take flow to move currency during settlement
- Swap behaviour
- beforeSwap enforces the start time and tick-based schedule and dynamically sets the LP fee; afterSwap records outcomes against proceeds thresholds and can settle currency through the pool manager.
- Liquidity behaviour
- beforeAddLiquidity reverts with CannotAddLiquidity, so liquidity can only be provided through the hook's own unlock flow; beforeDonate is also blocked (CannotDonate); removal paths are present (beforeRemoveLiquidity, afterRemoveLiquidity) and the hook tracks positions by bytes32 key.
- Fee behaviour
- Sets the pool fee dynamically via updateDynamicLPFee during swaps, using an initial LP fee and a gamma parameter; the exact fee schedule cannot be confirmed from bytecode alone.
- Owner & admin controls
- No owner or pause function found in the dispatch table; the hook has a one-time initializer (initializer(), SenderNotInitializer error) and a migrate(address) entry point that is callable externally and may be restricted; exact access checks cannot be confirmed without source.
Enabled Uniswap v4 callbacks
beforeInitialize, afterInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeDonate
beforeInitialize and afterInitialize validate and record pool configuration (poolKey, initialLpFee, tick range); beforeAddLiquidity and beforeDonate restrict liquidity and donations; beforeSwap enforces start time and tick-based schedule and dynamically sets the LP fee; afterSwap records swap outcomes and proceeds against minimum and maximum thresholds and can take or settle currency through the pool manager.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: The hook appears to be designed around an initializer and a migrate call; a privileged initializer or migrator could redirect the migration path, but the scope of that power cannot be confirmed without source.
Risk to user funds: The hook can take and settle currency through the pool manager during swaps and afterSwap, and it can block swaps through proceeds-based reverts, so user funds in the pool are exposed to the hook's logic; no direct owner withdrawal function was identified.
Security findings
- [medium] Hook moves pool currency: The hook calls take and unlock on the pool manager and holds an unlockCallback, so it moves currency between the pool and itself during swaps and settlement.
- [medium] Swap gating by proceeds thresholds: Swaps revert after the start time when proceeds are insufficient, and maximum proceeds trigger a dedicated error, so trading can be halted by the proceeds logic.
- [medium] Externally callable migrate function: migrate(address) is externally callable; if it lacks access control it could move state, but this cannot be verified from bytecode.
- [info] Dynamic fee controlled by hook: The hook uses a dynamic LP fee set via updateDynamicLPFee, so the fee rate is controlled by hook logic rather than fixed at pool creation.
- [info] Liquidity and donations blocked: Liquidity addition and donations are disabled, which limits external participation in the pool.
Contract details
- Verified source
- No
- Bytecode size
- 22,113 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, moves-currency, self-unlock
Pools using Auction hook
- ETH / T.PLAY (Dynamic fee) — 24h volume $0, TVL $209.39K, 0 swaps today