BallpitHook on Base

Uniswap v4 Hook Contract 0xd3eda46abd498851c8a14fd1a133de163a9c6080 on Base · Launchpad · Verified contract

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

What it does

A launch-rules hook for new token pools that can enforce anti-snipe windows, size limits and simple dynamic surge fees on swaps.

How it works step by step

  • Stores a one-time settings record per pool, registered through the controller contract
  • Restricts pool initialization to the designated launch operator address
  • Blocks non-operator swaps during an anti-snipe window measured in blocks after configuration
  • Caps priority fees relative to base fee and caps maximum swap size per side
  • Optionally enforces zig-zag direction and ascending volume rules, or a block-based amount check
  • Overrides the LP fee to a surge or base value depending on swap size when dynamic fees are enabled
Swap behaviour
beforeSwap reverts swaps that violate configured rules (launch window before the anti-snipe block count, priority fee above a cap, exact-output orders, oversized amounts, repeated direction or non-increasing amounts when enabled, block-echo mismatch) and returns a dynamic LP fee override when dynamic fees are enabled.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
When dynamicFee is enabled, beforeSwap overrides the LP fee to surgeFee if the swap amount meets the side-specific surge threshold (quote or token), otherwise baseFee, with the override flag set. When dynamicFee is off the pool's static fee is used and previewFee returns 0. Fees are not taken by the hook and no fee sharing exists.
Owner & admin controls
No owner or pause role; the only privileged party is the immutable controller address, which alone can call configure() to register a pool's settings. Pool settings are set once per pool and cannot be changed afterwards. No upgrade mechanism found.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize: restricts pool initialization to the configured launch operator for a registered pool. beforeSwap: enforces launch rules (anti-snipe window, priority fee cap, exact-input only, max swap size, zig-zag direction flip, ascending volume ladder, block-echo amount check) and applies dynamic fee overrides.

Security & trust assessment

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

Who controls it: The controller can only configure pools once and cannot alter settings afterward or move funds. The launch operator can initialize its pool and is exempt from the anti-snipe window. The controller address is immutable.

Risk to user funds: The hook does not hold, move or take user or pool funds; it only returns a fee override and can revert swaps that break its configured rules.

Security findings

  • [medium] Swaps can be blocked by configured rules: Swap-gating rules (anti-snipe window, zig-zag direction, volume ladder, block-echo modulo check, max swap size) can revert swaps, so some trades may be blocked by design.
  • [info] Immutable per-pool settings: Settings are validated at configure time and cannot be modified later, so behaviour is fixed per pool.
  • [info] No fund custody by hook: The hook never takes tokens and returns zero before-swap delta, so it does not hold or move pool funds.
  • [low] Trust in controller contract: configure() checks msg.sender against the controller and the controller address is immutable, so the controller is a single trusted dependency that determines which pools are configured.

Contract details

Verified source
Yes (BallpitHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
9,560 bytes
Upgradeable proxy
No
Detected patterns
launchpad

Pools using BallpitHook