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
- ETH / ROACH7 (0.00% fee) — 24h volume $21, TVL $0, 21 swaps today