BallpitHook on Base
Uniswap v4 Hook Contract 0x13e916f95892b08c65bf50bf5b4d72e294f7a080 on Base · Launchpad · Verified contract
- Volume (24h)
- $1.00K
- Value locked (TVL)
- $8.35
- All-time volume
- $1.00K
- Pools using this hook
- 1
- Swaps (24h)
- 6 (3 traders)
- Total swaps
- 6
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.
This read was written for the hook 0xd3ed…6080 on Base and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
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
- WETH / HP104 (2.00% fee) — 24h volume $1.00K, TVL $8.35, 6 swaps today