TaxHook on Robinhood Chain

Uniswap v4 Hook Contract 0xf1ee073811b14359d850825e48d200483200edcd on Robinhood Chain · Launchpad · Verified contract

Volume (24h)
$610.33K
Value locked (TVL)
$5.21M
All-time volume
$112.25M
Pools using this hook
1
Swaps (24h)
455 (237 traders)
Total swaps
77,263

What it does

A launch-phase tax hook for the canonical ETH/STANDARD pool that charges a decaying ETH tax on trades, limits third-party liquidity while the launch is live, and tracks per-epoch net flow for the protocol.

How it works step by step

  • Charges a decaying launch tax in ETH on buys and sells, starting high and decaying to floors over an immutable window or half-life curve
  • Lets the owner override the tax with manual rates capped at 10% per side, which permanently retires the decay schedule
  • Restricts third-party liquidity provision to POL while the launch schedule is live and taxes non-POL principal withdrawals
  • Accumulates per-epoch net ETH flow and tax totals for an external CentralBank to pull at each epoch boundary
  • Maintains a time-weighted average tick used as a slippage reference by protocol cranks
Swap behaviour
Swaps are taxed on the ETH leg at the live buy or sell rate; exact-output swaps are grossed up to the same effective rate. Each swap updates the net-flow window and TWAP tick and enforces a full fill for ETH-specified swaps.
Liquidity behaviour
While the launch schedule is live, only the POL manager may add liquidity; third-party adds revert. Once the schedule decays or is overridden, anyone may add. A non-POL add may not end on exactly one usable tick extreme (reserved for POL). Non-POL liquidity removals of principal are taxed at live rates; POL removals are exempt.
Fee behaviour
Charges a launch tax in ETH on swaps and on non-POL liquidity withdrawals. Rates decay from start values to floors over an immutable window (optionally exponentially with a half-life), until owner override via setTaxes capped at 10% per side. Buy tax applies to the ETH leg of buys; sell tax to the ETH leg of sells; exact-output shapes are grossed up to the same effective rate. Non-POL removals also pay the buy rate on withdrawn STANDARD, which is burned. Accrued LP fees are not taxed. Taxes are held by the hook and forwarded to a FeeSplitter permissionlessly.
Owner & admin controls
Owner (Ownable2Step) can set manual buy and sell tax rates via setTaxes, each capped at 10%, which permanently retires the launch decay schedule; owner can transfer or renounce ownership. Schedule parameters are immutable. The owner of the registry and the CentralBank (not this hook) control the venue gate, launch holding cap and bank-level settings in STANDARD. Pool and epoch windows are armed only by the CentralBank.

Enabled Uniswap v4 callbacks

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

beforeInitialize locks the hook to the single canonical ETH/STANDARD pool and starts the decay clock. beforeSwap takes the ETH-specified leg tax. afterSwap records net-flow, updates the TWAP tick, verifies a full fill for ETH-specified swaps, and taxes the ETH leg for unspecified swaps; it reverts if the pool has no liquidity. beforeAddLiquidity enforces the POL-only launch gate and tick-extreme reservation. afterAddLiquidity and afterRemoveLiquidity authorize the STANDARD leg with the token venue gate. afterRemoveLiquidity also taxes non-POL principal withdrawals and burns the STANDARD tax. beforeSwapReturnDelta and afterSwapReturnDelta are used to return a hook fee delta that is realized via take; afterRemoveLiquidityReturnDelta returns the removal tax delta.

Security & trust assessment

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

Who controls it: The owner can set both tax rates anywhere from 0% up to 10% at any time, instantly, including during an active trading period, and can permanently disable the decay schedule. The owner cannot change the schedule duration or floors. Owner can transfer ownership to another address after a two-step acceptance, or renounce it. Owner has no direct power to freeze or block swaps in this hook, though the pool's price-deviation and liquidity checks can revert swaps that leave the price unquoted.

Risk to user funds: The hook holds ETH taxes temporarily until forwardTaxes pushes them to the FeeSplitter, and it burns STANDARD taxed on non-POL removals. It does not custody LP principal. The owner can raise taxes up to 10% per side, which reduces trader proceeds on swaps and removals.

Security findings

  • [medium] Admin can change tax rates instantly: Owner can set buy and sell taxes to any value up to 10% per side instantly via setTaxes, with no timelock.
  • [info] LP entry closed during launch: While the launch schedule is live, third-party liquidity provision reverts, so only POL can add liquidity; LPs outside POL cannot participate until the schedule decays or is overridden.
  • [low] Swaps can revert in edge conditions: afterSwap reverts when the pool has zero liquidity, and an ETH-specified swap reverts on a partial fill at a price limit, which can block some trades.
  • [info] Hook holds and routes user-paid taxes: The hook holds accrued ETH taxes between forwarding calls and takes tokens via return deltas; the forwarding target is set by the registry, which the owner controls.

Contract details

Verified source
Yes (TaxHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
14,444 bytes
Upgradeable proxy
No
Detected patterns
launchpad, moves-currency, oracle, ownable, return-delta, tax

Pools using TaxHook