Limit orders hook on Base

Uniswap v4 Hook Contract 0xa848e063a63d164f2a25d71446c90449b9ba6040 on Base · Limit orders

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
11

What it does

A Uniswap v4 hook that appears to implement owner-managed swap limits with an exemption list for specific addresses, though the exact mechanism cannot be confirmed without verified source.

How it works step by step

  • Runs a beforeInitialize check when the pool is created.
  • Runs an afterSwap hook that reads a limitsEnabled flag and a limitExempt mapping.
  • Lets the owner exempt specific addresses from limits via setLimitExempt.
  • Lets the owner permanently disable limits via removeLimits.
  • Lets the owner set a numeric parameter stored in slot 1 that is read during swaps.
  • Ownable with transferOwnership for admin handover.
Swap behaviour
afterSwap executes after every swap and reads limit-related state (limitsEnabled flag and per-address exemption mapping), with an owner-controlled numeric parameter also consulted; the precise enforcement logic is not determinable from decoded bytecode.
Liquidity behaviour
No liquidity callbacks are enabled; beforeAddLiquidity, beforeRemoveLiquidity and related selectors exist in the ABI but the hook permissions only enable beforeInitialize and afterSwap.
Fee behaviour
Uses the pool's static fee; afterSwap and the uint256 setter may track or adjust per-swap limits but no fee-taking or fee-sharing mechanism is evident.
Owner & admin controls
Owner (slot 0) can call setLimitExempt(address,bool) to exempt addresses and transferOwnership(address); removeLimits() can be called by the owner to disable the limits flag permanently; fe69546c (uint256 setter writing slot 1) is a non-standard owner-gated parameter setter, likely used to set the pool fee or a limit parameter.

Enabled Uniswap v4 callbacks

beforeInitialize, afterSwap

beforeInitialize: runs on pool initialization, likely to validate or record pool parameters (token, fee, tick spacing). afterSwap: runs after each swap, likely to update limit or tracking state (limitsEnabled, exempt mapping read).

Security & trust assessment

Risk level: medium, estimated (decoded bytecode, low confidence).

Who controls it: The owner can transfer ownership, exempt addresses from limits, remove limits entirely and call the uint256 setter (fe69546c); a compromised owner key could change swap-related limit state for the pool.

Risk to user funds: The hook does not appear to take or hold tokens via return deltas, so user funds are not directly custodied; however, the owner-controlled parameters in afterSwap could restrict or alter swap outcomes for non-exempt users.

Security findings

  • [info] Swap-time limits gated by owner-controlled flags: afterSwap reads the limitExempt mapping and limitsEnabled flag, indicating swap-level restrictions that the owner can modify.
  • [info] Limits can be removed irreversibly by owner: removeLimits() sets the limitsEnabled bool (slot 2) to false and is callable by the owner; the flag is never re-enabled in the decoded functions, so removal appears irreversible.
  • [medium] Unidentified owner-controlled numeric parameter: Owner-only setter (selector fe69546c) writes a uint256 storage slot that is read in afterSwap; its purpose cannot be confirmed without source, and it could change swap behaviour.
  • [low] Single-owner control without timelock: Ownable pattern with transferOwnership; no timelock or multisig evident from the bytecode.

Contract details

Verified source
No
Bytecode size
3,819 bytes
Upgradeable proxy
No
Detected patterns
ownable

Pools using Limit orders hook