Custom pricing hook on Robinhood Chain

Uniswap v4 Hook Contract 0xf019ea5cbdaedf31eaa6a62953f2ce5ce1daaacc on Robinhood Chain · Custom pricing

Volume (24h)
$21
Value locked (TVL)
$0
All-time volume
$21
Pools using this hook
1
Swaps (24h)
21 (2 traders)
Total swaps
21

What it does

This hook charges a tax on swaps that is partly kept as ETH for the tax recipient and partly set aside for keepers, so traders pay more than the pool's base fee and liquidity providers receive the pool fee without the tax share.

How it works step by step

  • Hook exposes beforeSwap and afterSwap with return deltas, so it can take a currency cut from swaps via the PoolManager
  • Taxes swaps using a TAX_BPS parameter; a portion of tax accrues as ETH (totalTaxEth, accruedEth) and is sent to a taxRecipient
  • Sets aside a keeper gas share (KEEPER_GAS_BPS, totalToKeeperGas) that is used to fund keeper or rewards payouts
  • Uses an unlockCallback flow that calls unlock on the PoolManager to settle and take currency during collect and rewards distribution
  • Tracks swap counts and a seeded flag, and has an antidump configuration (setAntiDump selector referenced), suggesting dynamic gating of sells
  • beforeAddLiquidity is nonpayable and writes a flag that is set by the seed routine, indicating a liquidity seeding phase controlled by the hook
Swap behaviour
Swaps go through beforeSwap and afterSwap, and both can return deltas. A tax is applied to trades, and the hook takes a portion of the swap currency into its own accounting. Based on the decoded bytecode, the exact direction that pays more (for example sells versus buys) cannot be confirmed; the antidump selector suggests sells may be taxed or gated differently, but this is not verified.
Liquidity behaviour
beforeAddLiquidity is nonpayable and can change storage, apparently gated by the seeded flag. beforeRemoveLiquidity is view and does not change state. Liquidity seeding appears to be a one-time or controlled phase.
Fee behaviour
The pool fee is POOL_FEE, and an additional tax in basis points (TAX_BPS) is taken from swaps through return deltas. Part of the tax is accumulated as ETH (totalTaxEth, accruedEth) and sent to taxRecipient; another share is set aside for keepers (KEEPER_GAS_BPS).
Owner & admin controls
A taxRecipient address and a positionManager are present. setAntiDump is referenced, so parameters may be adjustable. Owner or upgrade controls could not be determined from the decoded bytecode.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: pool setup validation. beforeAddLiquidity: gated liquidity seeding and state updates. beforeRemoveLiquidity: view-only check. beforeSwap: applies the tax and antidump logic and may return a delta. afterSwap: records swap count and accrues tax, returning a delta. beforeSwapReturnDelta and afterSwapReturnDelta: the hook takes currency from swaps.

Security & trust assessment

Risk level: high, estimated (decoded bytecode, medium confidence).

Who controls it: A privileged key may control the tax recipient, antidump parameters and possibly the seeding phase, and could alter fees or redirect accrued ETH.

Risk to user funds: The hook can hold and move currency through return deltas, take, and the accrued ETH balance, and it may block or tax swaps. Users are exposed to these taxes and any admin-adjustable parameters.

Security findings

  • [medium] Swap return deltas take user currency: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can take a share of each swap's input or output, which is a direct cost to traders.
  • [high] Adjustable antidump and tax parameters: The setAntiDump selector is referenced and TAX_BPS and KEEPER_GAS_BPS exist, so a privileged key may be able to change the tax and gate sells, which could block or heavily tax trades if it is not bounded.
  • [medium] Self-unlock and currency movement: The hook calls unlock on the PoolManager and uses take inside unlockCallback, so it moves pool currency during collect and rewards flows; correctness of accounting could not be verified without source.
  • [info] Unverified source: No verified source is available, so function behaviour, access control and upgradeability are inferred from bytecode only.

Contract details

Verified source
No
Bytecode size
5,224 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta, rewards, self-unlock, tax

Pools using Custom pricing hook