PhoenixV4ReturnDeltaHook on Base
Uniswap v4 Hook Contract 0xa36587df6533adafa569e4eeea326c6fbdeccccc on Base · Custom pricing · Verified contract
- Volume (24h)
- $102
- Value locked (TVL)
- $16.50K
- All-time volume
- $11.50K
- Pools using this hook
- 1
- Swaps (24h)
- 3 (1 traders)
- Total swaps
- 288
What it does
Taxes every buy and sell on the official PXT/USDC Uniswap v4 pool by skimming USDC through return deltas, with sells also burning PXT and large dumps facing a penalty rate that can be rebated.
How it works step by step
- beforeSwap classifies each swap as buy or sell on the official pool and takes the fee in USDC via poolManager.take.
- afterSwap burns 1.85% PXT on sells and records a pending skim for attributeSell or orphan finalization.
- Skimmed USDC is forwarded to PhoenixFeeCollector, which pays donation and marketing wallets and funds buybacks.
- Large sells within a 24 hour window that exceed 10% of starting balance are charged a penalty skim.
- beforeAddLiquidity restricts LP adds to the FeeCollector while the sell lock is active.
- Swap behaviour
- Buys skim 2.7% in USDC. Sells skim 5.4% USDC plus a 1.85% PXT burn, or a 37.8% USDC skim during a dump window that can be partly rebated via attributeSell. Swaps are blocked while a same-tx sell skim is pending.
- Liquidity behaviour
- beforeAddLiquidity blocks LP mints from non-FeeCollector senders while sells are locked (before sellUnlockTimestamp). afterAddLiquidity records PXT owed for same-tx settlement. No remove-liquidity callbacks.
- Fee behaviour
- Fees are taken via return deltas in USDC, not the pool LP fee. Buys skim 2.7% (1.45% donation, 1.25% marketing) in beforeSwap/afterSwap. Sells skim 5.4% USDC (donation, marketing, buyback) plus a 1.85% PXT burn; sells with dump-window penalty use 37.8% USDC skim with rebate via attributeSell. Skimmed USDC is forwarded to PhoenixFeeCollector.
- Owner & admin controls
- Owner (Ownable, set at deploy) can call setFeeCollector once, setOfficialPool once, and transferOwnership/renounceOwnership. Owner cannot change fee rates in this hook; fee tiers are hardcoded in PxtFeeModel. Fee collector and official pool are one-shot. Pxt token side grants RECIPIENT_APPROVER_ROLE and owner-only setters, which can gate contract recipients and anti-bot seller until renounced.
Enabled Uniswap v4 callbacks
beforeAddLiquidity, afterAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeAddLiquidity: restricts LP adds during sell lock to FeeCollector. afterAddLiquidity: tracks PXT owed by LP minter. beforeSwap: classifies buy/sell, blocks swaps while a same-tx sell skim is pending, takes fees in USDC or PXT. afterSwap: finalizes fee accounting, burns PXT on sells, records pending skim. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take and return deltas to adjust the swap amounts and fees.
Security & trust assessment
Risk level: medium (verified source, medium confidence).
Who controls it: The owner can set the fee collector and official pool once, then renounce. After renounce, the hook logic is fixed. Before renounce, the owner can point fees to a chosen collector and designate the pool, which determines where skimmed USDC goes. The Pxt token's RECIPIENT_APPROVER_ROLE holder can block transfers to unapproved contracts and the anti-bot seller can gate the first public sell.
Risk to user funds: The hook takes USDC from buy and sell swaps and forwards it to the PhoenixFeeCollector, and it burns PXT on sells. Users cannot avoid the skim on the official pool. Penalty skims can be large for dump sellers. The hook does not hold user principal beyond pending skims and transient same-tx state, but skimmed funds sit with the collector until collect or buyback.
Security findings
- [info] Return-delta fee skimming on every swap: The hook takes fees through return deltas, so every official-pool buy and sell has USDC or PXT withheld from the swap. The fee amount is fixed by constants and not configurable.
- [medium] Dump penalty with conditional rebate: Sells in a 24h window that exceed 10% of the wallet's starting balance are charged 37.8% USDC skim up front. The excess is refunded only if the seller later calls attributeSell in the same settlement, otherwise it finalizes as an orphan fee.
- [medium] Same-tx swap blocking and orphan finalization: Swaps revert while a same-tx sell skim is pending, and finalizeOrphanedSell is blocked during unlock. A router or pool-manager interaction that never settles can leave the sell skim open, which may block that transaction.
- [low] Owner-set fee collector and pool before renounce: The owner can set the fee collector and official pool before renouncing ownership. Until renounce, the owner controls where fees accrue. The source comments say the collector is frozen when renounced, but the owner is not restricted from configuring it while Ownable is still active.
- [info] Dependence on external collector and token contracts: The hook imports and uses the PhoenixFeeCollector, Pxt token, and buyback logic. Decoded bytecode does not show a proxy or upgrade path, but the external dependencies are not fully verified from the provided input.
Contract details
- Verified source
- Yes (PhoenixV4ReturnDeltaHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 15,077 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, moves-currency, ownable, return-delta
Pools using PhoenixV4ReturnDeltaHook
- USDC / PXT (0.00% fee) — 24h volume $102, TVL $16.50K, 3 swaps today