WLimitOrderHook on Arbitrum

Uniswap v4 Hook Contract 0x63d3132013839ed98e9dbc375a88d5eebf52d040 on Arbitrum · Limit orders · Verified contract

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$6.77K
Pools using this hook
2
Swaps (24h)
0 (0 traders)
Total swaps
57

What it does

A Uniswap v4 hook that lets users place limit orders on pool tick ranges, filled automatically when a swap moves the price through them, and offers a combined swap-then-place helper in one transaction.

How it works step by step

  • Lets users place single-sided limit orders on a tick range of a v4 pool via placeOrder, with liquidity recorded per user and per order id.
  • Fills crossed limit orders inside afterSwap, when a swap moves the pool price across their tick range.
  • Lets users cancel an unfilled order or withdraw a filled order's proceeds using cancelOrder and withdraw.
  • Provides swapAndPlaceOrder, which performs an exact-input swap and then places a limit order atomically in one transaction.
  • Enforces an optional minimum output amount on the helper swap to guard against sandwich attacks.
  • Restricts unlock callbacks to the PoolManager and uses a sentinel value to separate the helper swap from the base order callbacks.
Swap behaviour
afterSwap fills any limit orders on ticks crossed by the swap. The swapAndPlaceOrder helper performs an exact-input swap inside an unlock callback, settles and takes deltas against the payer, enforces an optional minAmountOut, then places the order.
Liquidity behaviour
No liquidity callbacks. Limit orders are recorded as single-sided positions on tick ranges (placeOrder, cancelOrder, withdraw), with liquidity tracked per user and per order id rather than through afterAddLiquidity or afterRemoveLiquidity.
Fee behaviour
Uses the pool's static fee. The hook takes no fee of its own; swaps pay the pool fee set at initialization.
Owner & admin controls
No admin controls found. The hook has no owner, pause or upgrade functions in the verified ABI; order placement, cancellation and withdrawal are per-user operations.

Enabled Uniswap v4 callbacks

afterInitialize, afterSwap

afterInitialize initializes per-pool order bookkeeping (such as the last tick lower). afterSwap is used to fill crossed limit orders when a swap moves the price through their tick range.

Security & trust assessment

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

Who controls it: No privileged role was found in the verified source, so no single key can change parameters, pause the hook or redirect user funds.

Risk to user funds: The hook holds user liquidity deposited into limit-order positions and releases it only to the depositing address on cancel or withdraw. Swap settlement in swapAndPlaceOrder pulls the payer's input tokens and sends output to the same payer. Funds are exposed to smart-contract bugs in the base library and to the optional zero-minAmountOut sandwich risk, but no owner can seize or freeze them.

Security findings

  • [medium] Optional slippage protection: The swapAndPlaceOrder helper takes minAmountOut, and passing 0 disables the slippage check. The source documents this as a sandwich-attack risk.
  • [info] Callback routing is restricted: The unlock callback is guarded by onlyPoolManager and the swap sentinel is distinct from the CallbackType enum values, so arbitrary external callers cannot supply a payer for swaps.
  • [info] Permissionless order management: The contract is the verified WLimitOrderHook wrapper on top of the OpenZeppelin LimitOrderHook base. It exposes order placement, cancellation and withdrawal to any user for their own orders, with no admin escape hatch.

Contract details

Verified source
Yes (WLimitOrderHook)
Compiler
solc 0.8.33+commit.64118f21
Bytecode size
17,835 bytes
Upgradeable proxy
No
Detected patterns
limit-orders

Pools using WLimitOrderHook