FXMemeHookV6 on Arc

Uniswap v4 Hook Contract 0xc555d361dee2062a0560678d3f663784887265cc on Arc · Dynamic fee · Verified contract

Volume (24h)
$0
Value locked (TVL)
$892
All-time volume
$141.91K
Pools using this hook
20
Swaps (24h)
0 (0 traders)
Total swaps
1,217

What it does

A Uniswap v4 hook for FX meme-token pools that charges a fixed normal swap fee split into protocol, holder-reward and creator shares, plus a temporary launch-only buy surcharge that decays after activation.

How it works step by step

  • Charges a fixed normal fee on swaps split into protocol, holder-reward and creator claims.
  • Applies a decaying launch-only buy surcharge in the first seconds after market activation when enabled.
  • Takes fees via before-swap and after-swap return deltas backed by native PoolManager claims.
  • Records per-second liquidity observations for the protocol token pool on liquidity changes and swaps.
  • Restricts pool initialization and market registration/activation to the registered initializer and the factory.
  • Exposes claim and withdrawal paths so holders, creators and treasury can withdraw attributed fees.
Swap behaviour
Swaps are charged a normal fee in both directions and, for buys in opening-enabled markets, an additional decaying surcharge. Fees are taken as before-swap or after-swap return deltas and minted as native claims to the hook, which then distributes them to protocol, creator, treasury and holder reward accounts.
Liquidity behaviour
Hook observes liquidity: after add and remove liquidity it only records a per-second liquidity observation for the protocol token pool (via observations.record). It returns zero deltas and does not alter liquidity amounts. beforeAddLiquidity, beforeRemoveLiquidity, beforeDonate and afterDonate revert.
Fee behaviour
Fees are charged on every swap in the buy direction and both directions for the fixed normal fee: a protocol share of 0.10%, plus any reward and creator shares configured per market (Triangle markets use 0.15% total). Launch-only buy surcharges decay on a fixed curve from an initial bps down to zero over a few seconds after activation, when the market's opening scope applies. Fees are taken via native PoolManager claim minting (poolManager.mint) and accrued to holder, creator, treasury and protocol claimable balances.
Owner & admin controls
No owner or upgrade functions in the hook. Immutable addresses (poolManager, factory, treasury, revenueVault, buybackExecutor, observations, releasePolicy) are fixed at construction. The only setter-like state is protocolToken, set once on registration by the factory. Opening surcharge and fee parameters come from the immutable FXReleasePolicy. Registration and activation are restricted to the factory. No pause function found.

Enabled Uniswap v4 callbacks

beforeInitialize, afterAddLiquidity, afterRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: restricts pool initialization to the registered initializer for the registered pool key. afterAddLiquidity and afterRemoveLiquidity: record observation checkpoints for the protocol token pool only. beforeSwap: enforces market activation and swap bounds, computes the normal and opening fee, and takes the fee via a before-swap return delta. afterSwap: charges the fee on the unspecified side via an after-swap return delta, records observations for the protocol token pool, and clears transient context. beforeSwapReturnDelta and afterSwapReturnDelta: enable the hook to take a portion of swap amounts as fees.

Security & trust assessment

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

Who controls it: No privileged owner key exists in the hook; configuration is immutable after deployment. The factory is the only caller allowed to register and activate markets, so the factory's correctness determines which markets and pools can be created. The protocol token's creator fees are routed to a revenue vault, and treasury/revenue vault can withdraw attributed claims via takeRevenue.

Risk to user funds: The hook holds PoolManager claims rather than raw tokens, and withdrawals are gated by per-account claimable balances and liability checks. Users can exit their claimable balances via withdrawTo or deliver, and swaps can be blocked only if a market is not activated or the swap bounds are violated, not by any admin pause. Principal liquidity sits in FXMemePositions, which has no principal withdrawal API.

Security findings

  • [info] Native claim-based fee accounting: Fees are settled by minting native PoolManager claims to the hook and tracking per-account claimable balances. Claimants withdraw via withdrawTo or deliver, which burn claims and take tokens out of the PoolManager. Accounting correctness is central to solvency.
  • [low] Reentrancy paths between hook and rewards contract: Holder reward distribution calls out to the reward contract via notifyReward and reward payouts call back into withdrawTo on the hook. The hook guards against nested swaps and withdrawals with active and withdrawing flags, and the reward contract uses a processing lock.
  • [info] Launch opening surcharge: Launch buy surcharges start at a fixed high initial bps and decay within seconds, so early buyers in opening-enabled markets pay a steep extra fee. This is by design but materially affects early trades.
  • [info] No upgrade path: Immutable configuration and no proxy or owner reduce admin-key risk, but any bug in the factory, observations or reward accounting cannot be patched in place.

Contract details

Verified source
Yes (FXMemeHookV6)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
15,084 bytes
Upgradeable proxy
No
Detected patterns
liquidity-management, moves-currency, return-delta, self-unlock

Pools using FXMemeHookV6