Fee sharing hook on Robinhood Chain
Uniswap v4 Hook Contract 0xe76ed4e293baca4bd8fcb2726d75f796f11eaacc on Robinhood Chain · Fee sharing
- Volume (24h)
- $24
- Value locked (TVL)
- $0.71
- All-time volume
- $24
- Pools using this hook
- 1
- Swaps (24h)
- 13 (3 traders)
- Total swaps
- 13
What it does
This hook charges a tax on swaps, collects ETH for the hook, and splits it between a treasury and a holder rewards pool, so traders pay an extra fee on top of the pool fee while LPs are not directly rewarded by it.
This read was written for the hook 0x088d…6acc on Robinhood Chain and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.
How it works step by step
- Takes a tax on swaps through beforeSwapReturnDelta and afterSwapReturnDelta, accruing ETH as taxes on the hook contract
- Splits accumulated tax between a treasury address and a holder rewards pool according to basis-point shares (HOLDER_SHARE_BPS, TAX_BPS)
- Tracks swap count and running totals of tax sent to holders and to treasury in storage
- Runs a seed flow in beforeAddLiquidity that gates or triggers the seeded state before liquidity is added
- Uses the pool manager unlock flow (unlock, unlockCallback, take) to move collected ETH out of the pool manager
- Includes a collect() function and a keeper gas reimbursement parameter (KEEPER_GAS_BPS) for whoever triggers collection
- Swap behaviour
- Swaps go through beforeSwap and afterSwap; the hook takes a tax (TAX_BPS of the swap, applied via return deltas) and increments swapCount. The exact direction of taxation (buys vs sells) cannot be determined from bytecode alone.
- Liquidity behaviour
- beforeAddLiquidity is non-view and can set the seeded flag and interact with the seed state; beforeRemoveLiquidity is present but only view-level logic is visible. Liquidity is not otherwise shaped by the hook.
- Fee behaviour
- The hook applies a tax in basis points (TAX_BPS) on swaps via return deltas, on top of the pool's POOL_FEE; accrued tax is tracked in accruedEth and totalTaxEth and split between holders and treasury.
- Owner & admin controls
- No owner or admin selector was decoded; setAntiDump(uint256,uint256) is referenced in the bytecode and may be an admin-only parameter setter, but access control cannot be confirmed without source. Treasury address is stored and readable.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize sets up initial pool state; beforeAddLiquidity and beforeRemoveLiquidity gate or record liquidity changes; beforeSwap and afterSwap run swap accounting and tax logic; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of swap amounts as tax.
Security & trust assessment
Risk level: high, estimated (decoded bytecode, medium confidence).
Who controls it: Without source, it is unclear whether treasury, TAX_BPS, HOLDER_SHARE_BPS or anti-dump parameters can be changed by a single key; if they can, that key controls the tax rate and where fees go.
Risk to user funds: The hook takes a percentage of swap value through return deltas and holds accrued ETH until collect() is called, so users pay the tax on swaps and the hook can hold funds before distribution.
Security findings
- [medium] Swap tax via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can take a portion of every swap's amounts (TAX_BPS) and move ETH out through the pool manager.
- [medium] Possible admin parameter setter: setAntiDump(uint256,uint256) is referenced in bytecode; if it is callable by a privileged key, tax or anti-dump thresholds could be changed after launch.
- [info] Treasury and holder split: Collected ETH is split between a treasury address and holder rewards using basis-point shares, meaning a treasury change or share change would redirect fees.
- [info] Self-unlock pattern: The hook calls unlock and implements unlockCallback to pull currency from the pool manager during collect(), so collection timing and any gating of collect() determine when funds move.
Contract details
- Verified source
- No
- Bytecode size
- 5,695 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, return-delta, self-unlock
Pools using Fee sharing hook
- ETH / ROACH4 (0.30% fee) — 24h volume $24, TVL $0.71, 13 swaps today