AquinasPoolHook on Base

Uniswap v4 Hook Contract 0xd3c1f2174f37f88811f99b1b1b4c1356c0246000 on Base · Access control · Verified contract

Volume (24h)
$0
Value locked (TVL)
$17.56K
All-time volume
$6.76M
Pools using this hook
24
Swaps (24h)
0 (0 traders)
Total swaps
143,258

What it does

Restricts who can create a given Aquinas DAO pool: only the Safe address the factory registered for that pool can initialize it, and only once.

How it works step by step

  • Enables only the beforeInitialize callback; all other hook callbacks are disabled.
  • The factory calls authorizePoolInitializer once per pool to record the Safe allowed to initialize it, and a second authorization for the same pool reverts.
  • On PoolManager.initialize, the hook checks that the caller (sender) equals the authorized Safe for that pool ID and reverts otherwise.
  • A separate initialized mapping ensures each pool can be initialized through this hook only once.
  • Holds no tokens, takes no swap or liquidity deltas, and has no fee logic.
Swap behaviour
No swap callbacks.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Uses the pool's static fee.
Owner & admin controls
The factory address is immutable and is the only caller allowed to authorize initializers. Authorization is one-time per pool and cannot be changed or revoked. There is no owner, pause, upgrade path or parameter setter in the source. The PoolManager and factory addresses are fixed at construction.

Enabled Uniswap v4 callbacks

beforeInitialize

beforeInitialize is used to verify that the initializer is the authorized Safe for the pool and that the pool has not already been initialized, then records initialization and emits PoolInitialized.

Security & trust assessment

Risk level: low (verified source, high confidence).

Who controls it: The factory can authorize one initializer per pool and cannot change it afterward. It cannot pause pools, change fees, move funds, or alter hook logic. The contract has no upgrade mechanism.

Risk to user funds: The hook does not hold, move or take user or pool funds, and it does not return deltas. Its only effect on funds is to block pool initialization for unauthorized callers or for pools that have already been initialized.

Security findings

  • [info] Pool creation depends on factory authorization: If the factory never calls authorizePoolInitializer for a pool, or registers the wrong Safe, no one can initialize that pool through this hook, and the authorization cannot be corrected because it is one-time only.
  • [info] Initializer must call PoolManager directly: The check compares the immediate caller of PoolManager.initialize with the stored Safe. If the Safe initializes through an intermediary contract such as a router or multicall, the check will fail.
  • [info] No restriction on liquidity after initialization: The hook only gates initialization. Once a pool is initialized, the hook does not restrict adding or removing liquidity or swapping, so protection against frontrunning liquidity provision depends on the pool's own design rather than on this hook.

Contract details

Verified source
Yes (AquinasPoolHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
4,661 bytes
Upgradeable proxy
No

Pools using AquinasPoolHook