Auction hook on Base
Uniswap v4 Hook Contract 0x6fa57d27307010729d2465ec56f8e423906c38e0 on Base · Auction
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 0
What it does
This appears to be a Dutch-style or price-discovery auction hook that gates swaps and liquidity over a fixed time window and settles proceeds, but the exact mechanics could not be fully confirmed from bytecode alone.
This read was written for the hook 0x1b15…f8e0 on BNB Chain and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
How it works step by step
- Stores a starting and ending tick and time window for the auction
- Blocks swaps before the start time and after maturity based on proceeds thresholds
- Blocks external liquidity additions and donations
- Sets the pool's dynamic LP fee via the pool manager
- Pulls and settles tokens through take and unlock callbacks
- Tracks maximum and minimum proceeds targets
- Swap behaviour
- beforeSwap and afterSwap enforce a start time and an ending/maturity condition, reverting with CannotSwapBeforeStartTime and InvalidSwapAfterMaturity variants depending on whether minimum proceeds were reached, and track proceeds during the swap.
- Liquidity behaviour
- beforeAddLiquidity reverts with CannotAddLiquidity (external liquidity is blocked); beforeRemoveLiquidity and afterRemoveLiquidity are present and afterAddLiquidity is decoded but restricted by the same logic.
- Fee behaviour
- Uses dynamic fee via updateDynamicLPFee on the pool manager; initialLpFee is read in initialization. Fee changes depend on the auction/PD-slug logic in the bytecode.
- Owner & admin controls
- Not stated.
Enabled Uniswap v4 callbacks
beforeInitialize, afterInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeDonate
beforeInitialize and afterInitialize set up pool state and the starting/ending tick and time; beforeSwap and afterSwap gate swaps by start time and maturity and track proceeds; beforeAddLiquidity blocks outside liquidity; beforeDonate reverts with CannotDonate.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: Initialization is gated to a single initializer address (SenderNotInitializer), and migrate is callable to move the hook to a new state, so the initializer key can influence pool lifecycle.
Risk to user funds: The hook takes and settles pool currency through the pool manager during auction flows; user swap and LP exposure depends on the initializer and the settlement logic, which could not be fully verified without source.
Security findings
- [medium] Privileged initializer and migrate path: Bytecode contains migrate(address) and a SenderNotInitializer guard, so a privileged initializer controls lifecycle transitions.
- [medium] Hook moves currency via pool manager: The hook calls take and unlock on the pool manager and an unlockCallback exists, so it moves pool currency during auction settlement.
- [low] Swaps can revert based on time and proceeds: Swaps revert before start time and after maturity depending on proceeds thresholds, so trading can be blocked by design.
Contract details
- Verified source
- No
- Bytecode size
- 21,830 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, erc20, moves-currency, self-unlock
Pools using Auction hook
- WETH / LG-ST (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today