Dynamic fee hook on Monad
Uniswap v4 Hook Contract 0x14a233aacbfa823d2fad13b3e52ee3ddbc6c9080 on Monad · Dynamic fee
- Volume (24h)
- $0
- Value locked (TVL)
- $0.32
- All-time volume
- $23
- Pools using this hook
- 5
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 3
What it does
A Uniswap v4 hook for launch pools that sets a time-dependent dynamic swap fee and restricts pool initialization to approved launcher flows.
How it works step by step
- Validates that pool initialization comes from an approved launcher and pool manager.
- Stores per-pool fee state in a mapping keyed by pool id at storage slot 0.
- Computes a time-based fee with feeAt(uint40,uint256) and reads it via poolFeeState.
- Applies the computed fee on each swap in beforeSwap via the override flag.
- Exposes pool identity helpers poolIdOf and hookBindingHash for off-chain indexing.
- Swap behaviour
- beforeSwap computes the current dynamic fee for the pool and returns it with the override flag, so each swap pays the scheduled fee.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- Uses a dynamic fee. afterInitialize and beforeSwap are dispatched and the hook references updateDynamicLPFee and an OVERRIDE_FEE_FLAG plus fee tiers (0.3%, 0.5%, 1%). feeAt(uint40,uint256) and poolFeeState(bytes32) indicate a time-dependent fee schedule keyed per pool, with an override flag returned from beforeSwap.
- Owner & admin controls
- No admin controls found. No owner, pause or upgrade selectors are dispatched; launchAuthority() is exposed as a view, and the hook references launcher() and isApproved(address), which suggests launch-time gating via an external launcher contract rather than a direct owner.
Enabled Uniswap v4 callbacks
afterInitialize, beforeSwap
afterInitialize: records initial pool state and fee schedule when a pool is created, validating the initializer against the launcher. beforeSwap: computes the time-based dynamic fee for the swap and returns it with the override flag so the pool applies it.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, medium confidence).
Who controls it: No privileged owner key is evident in the dispatch table. Access appears gated by launcher and approval checks, so the main trust point is the launcher and the approval registry it consults rather than an individual key.
Risk to user funds: The hook does not appear to take custody of tokens or use return deltas; it only sets the swap fee. User funds are exposed only through the fee level it applies, not through token movement.
Security findings
- [info] Caller gating on initialization: The hook validates initializers and pool managers with UnauthorizedInitializer and UnauthorizedPoolManager errors, so only approved callers can initialize pools.
- [medium] Fee computed on every swap: beforeSwap returns a fee override via the OVERRIDE_FEE_FLAG; a fee computation bug in feeAt could push fees to a level that harms swappers, but no bound beyond the known tier constants is visible without source.
- [low] External dependency on launcher: Fee logic depends on the launcher and isApproved registry; if those are mutable or compromised, pool fee behaviour could change for existing pools.
Contract details
- Verified source
- No
- Bytecode size
- 3,541 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, launchpad
Pools using Dynamic fee hook
- MON / MonCat (Dynamic fee) — 24h volume $0, TVL $0.11, 0 swaps today
- MON / MonDog (Dynamic fee) — 24h volume $0, TVL $0.21, 0 swaps today
- TMETH / WETH (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- TMUSD / USDC (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- MON / TMMON (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today