Access control hook on Ethereum
Uniswap v4 Hook Contract 0x9f7b869526bb4a605b86e01ad52bafb99e2860c0 on Ethereum · Access control
- 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 hook records a pool identifier when the pool is initialized and otherwise passes swaps through unchanged, so traders and LPs pay the pool's normal static fee with no extra cost or discount for any trade direction.
How it works step by step
- Hook is enabled for beforeInitialize, beforeSwap and afterSwap only; liquidity and donate callbacks are present in the ABI but not enabled by permissions.
- beforeInitialize records a pool identifier in storage slot 1 and sets an initialized flag in slot 2 (one-time setup per hook instance).
- beforeSwap and afterSwap are view functions that read the stored pool id and initialized flag; they do not appear to move tokens or change state.
- Exposes getters for poolId, token, poolManager, TICK_SPACING and LP_FEE, suggesting the hook is tied to one specific pool configuration.
- Ownable: owner can renounce or transfer ownership, but no owner-gated parameter setter was identified in the decoded selectors.
- Swap behaviour
- beforeSwap and afterSwap are view functions with no state changes or return deltas; swaps are not blocked or re-priced by the decoded logic, so this appears to be a passive pass-through hook.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- Uses the pool's static fee.
- Owner & admin controls
- Ownable with owner(), renounceOwnership() and transferOwnership(address); no pause, fee setter or upgrade path was identified in the decoded selectors.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap
beforeInitialize records the pool id and marks the hook initialized; beforeSwap and afterSwap are enabled but implemented as views that only read storage and do not modify fees or balances.
Security & trust assessment
Risk level: low, estimated (decoded bytecode, medium confidence).
Who controls it: The owner can transfer or renounce ownership; based on decoded selectors it cannot change fees, pause swaps or extract funds.
Risk to user funds: No token transfers, return deltas or currency movement were identified; the hook does not appear to hold or block user funds.
Security findings
- [info] Owner present but no value-moving controls found: Ownership functions exist (transferOwnership, renounceOwnership) but no decoded function sets fees, pauses swaps or moves tokens.
- [info] Initialization gate on beforeInitialize: beforeInitialize writes slots 1 and 2 and is nonpayable; a re-initialization path would need inspection of the bytecode to rule out overwriting the stored pool id.
- [low] Source unavailable: Analysis is from decoded bytecode only; a hidden branch or delegatecall in the 3759-byte runtime could alter behaviour not visible in selectors.
Contract details
- Verified source
- No
- Bytecode size
- 3,759 bytes
- Upgradeable proxy
- No
- Detected patterns
- ownable
Pools using Access control hook
- ETH / DAEMON (1.25% fee) — 24h volume $0, TVL $0, 0 swaps today