Token hook on Arc
Uniswap v4 Hook Contract 0x28a516a99fe93eaacdbf082512c7bfcd6f63a0cc on Arc · Token
- Volume (24h)
- $0
- Value locked (TVL)
- $10.75K
- All-time volume
- $106.89K
- Pools using this hook
- 1
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 950
What it does
Charges a fixed tax on swaps in this pool and accumulates it in the hook until it is flushed to a tax recipient.
How it works step by step
- Takes TAX_BPS basis points of swap output via afterSwapReturnDelta
- Tracks accrued tax in pendingTax and cumulative totalTaxCollected
- Holds collected tax in the hook contract until flushTax() is called
- Forwards flushed tax to taxRecipient
- Exposes launchToken() and an afterInitialize hook, suggesting a token launch flow
- Swap behaviour
- beforeSwap and afterSwap run on each swap; afterSwap applies the tax via return delta and records it in pendingTax and totalTaxCollected.
- Liquidity behaviour
- beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity are dispatched; their bodies appear to be pass-through checks, with no clear state changes identified.
- Fee behaviour
- Applies a tax of TAX_BPS basis points on swaps via afterSwap return delta; accrued tax is tracked in pendingTax/totalTaxCollected and forwarded to taxRecipient when flushTax() is called. Exact tax rate and base token cannot be determined from the bytecode alone.
- Owner & admin controls
- Decoded functions show a flushTax() with no visible owner or pause check in the selector list; taxRecipient() is readable, but whether it is settable or immutable cannot be confirmed without source. No explicit owner setter was decoded.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize: validates or sets up the pool at creation. beforeSwap: pre-swap checks or setup. afterSwap: calculates and collects the tax on the swap output. beforeSwapReturnDelta and afterSwapReturnDelta: let the hook take a share of swap amounts, which is how the tax is taken.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: A privileged key controlling taxRecipient or the ability to change tax parameters could redirect accrued tax; the presence of flushTax and launchToken suggests a launchpad-style deployer role, but this is unconfirmed.
Risk to user funds: The hook holds accrued tax tokens within its own balance between swaps and flushTax() calls, and it can take a share of every swap's output via return delta. Users pay the tax on swaps that route through this pool.
Security findings
- [medium] Hook takes swap funds via return delta: The hook uses afterSwapReturnDelta, so it can take a portion of every swap's output token and hold it in the contract until flushTax() is called.
- [info] Currency movement through PoolManager: The take(address,address,uint256) selector appears in the bytecode, indicating the hook moves currency through the PoolManager.
- [info] Reentrancy guard present: A ReentrancyGuardReentrantCall error selector is present, suggesting reentrancy protection on at least some entry points.
- [medium] Mutability of tax parameters unknown: Without source, it is unclear whether taxRecipient or the tax rate can be changed after deployment, which limits assessment of admin risk.
Contract details
- Verified source
- No
- Bytecode size
- 5,473 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, return-delta
Pools using Token hook
- USDC / ASHIT (0.00% fee) — 24h volume $0, TVL $10.75K, 0 swaps today