Likely access control hook on Ethereum
Uniswap v4 Hook Contract 0x061a28943260287cd39ed1329c28e18acbb92ac0 on Ethereum · Access control
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $2.00
- Pools using this hook
- 3
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 2
What it does
An owner-gated Uniswap v4 hook that whitelists which addresses can initialize pools and includes swap and liquidity callbacks whose exact effects could not be fully determined from bytecode alone.
How it works step by step
- Gates pool initialization via a whitelist mapping stored at slot 2, checked in beforeInitialize.
- Owner manages the whitelist with support(address,bool).
- Owner can transfer ownership through a two-step nominate and accept flow.
- Owner can withdraw tokens from the hook with withdraw(address,uint256).
- Enables beforeSwap and afterSwap callbacks that appear to move currency via take, settle and sync.
- Enables beforeAddLiquidity and beforeRemoveLiquidity callbacks, which are view functions that likely gate liquidity changes.
- Swap behaviour
- beforeSwap and afterSwap are enabled and nonpayable, and the hook references take, settle, sync and transfer selectors, so it likely interacts with currency during swaps. The exact logic could not be confirmed without source.
- Liquidity behaviour
- beforeAddLiquidity and beforeRemoveLiquidity are declared as view functions and appear to only gate liquidity actions; afterAddLiquidity and afterRemoveLiquidity are pure stubs with no state changes.
- Fee behaviour
- Uses the pool's static fee. No fee logic was identified in the decoded functions.
- Owner & admin controls
- Two-step ownership: transferOwnership(address) nominates a new owner and acceptOwnership() completes the transfer. The owner can call support(address,bool) to whitelist or un-whitelist addresses in a mapping(address=>bool) at storage slot 2, which is read by beforeInitialize. The owner can also call withdraw(address,uint256) to move tokens out of the hook.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap
beforeInitialize: checks the caller against the whitelist mapping and reverts if it is not allowed. beforeAddLiquidity and beforeRemoveLiquidity: enabled callbacks, implemented as view functions, likely used to gate liquidity actions. beforeSwap: enabled callback, nonpayable, decoded but its body logic could not be identified. afterSwap: enabled callback, nonpayable, decoded but its body logic could not be identified.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, medium confidence).
Who controls it: The owner controls which addresses may initialize pools through the whitelist and can withdraw any tokens the hook holds. A compromised owner key could drain hook-held balances or block pool initialization for non-whitelisted callers.
Risk to user funds: The hook has transfer and withdraw paths, so it may hold tokens during swap or liquidity operations. The owner can withdraw tokens from the hook. Without verified source, the full extent of exposure and any fund-holding logic cannot be confirmed.
Security findings
- [medium] Owner can withdraw hook-held tokens: withdraw(address,uint256) is callable by the owner and transfers tokens out of the hook. Its exact recipient and token handling could not be fully verified from bytecode alone.
- [low] Hook moves currency: The hook calls take, settle, sync and transfer selectors, so it moves currency during pool operations. Whether it holds user funds long-term could not be confirmed.
- [info] Two-step ownership transfer: Ownership transfer requires the new owner to call acceptOwnership(), which reduces the risk of transferring to a wrong address.
- [info] Pool initialization is gated by whitelist: Whitelist check in beforeInitialize restricts which callers can initialize pools that use this hook.
Contract details
- Verified source
- No
- Bytecode size
- 14,050 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, ownable
Pools using Likely access control hook
- USDC / USDT (0.0001% fee) — 24h volume $0, TVL $0, 0 swaps today
- USDC / USDT (0.001% fee) — 24h volume $0, TVL $0, 0 swaps today
- USDC / USDT (0.0005% fee) — 24h volume $0, TVL $0, 0 swaps today