Fee sharing hook on Robinhood Chain

Uniswap v4 Hook Contract 0xeea5dd05f29640501e85744b80b200141fffa0cc on Robinhood Chain · Fee sharing

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

What it does

Every swap on the Dross/ETH home pool pays a fixed 0.75% to 5% toll in ETH on both buys and sells, taken from the swap itself, while liquidity providers and other pools are not supported by this hook.

This read was written for the hook 0x11c7…a0cc 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

  • Charges a toll in ETH on every swap through its own home pool, between 0.75% and 5% of the swap, set once at deployment and immutable thereafter.
  • Pulls the toll via return deltas in beforeSwap or afterSwap depending on which leg the trader specified, so the toll is taken from the swap rather than from a separate transfer.
  • Mints an ERC-6909 ETH claim inside the PoolManager owned by the hook for each toll so that all stashed ETH is backed by PoolManager balances.
  • Splits each toll across four caches: 80% to the caster side (divided between caster and moulder by creditsBps), 10% to the fettler, and the remainder including rounding dust to the cupola/melter.
  • Lets only the keeper of each cache call empty() to withdraw its ETH via unlock, burning the claim and sending ETH to the keeper.
  • Hooks the rest of the lifecycle (liquidity callbacks, donate, pool initialisation beyond the home pool) with reverts, so only the home pool's swaps are active.
Swap behaviour
Every swap on the single home pool (ETH/Dross, fee 0, tick spacing 1) is tolled. Buys with exact ETH in and sells for exact ETH out are tolled in beforeSwap by reducing the ETH input or grossing up the ETH output, so the pool sees the net amount. Buys for exact coins out and sells for exact coins in are tolled in afterSwap based on the ETH actually moved, and must fill completely or the swap reverts with PartialFill. Swaps on any other pool using this hook revert with StrangeTrough.
Liquidity behaviour
No liquidity callbacks. All add and remove liquidity and donate hooks revert with NotWired, so liquidity cannot be added or removed through the hook-enabled pool.
Fee behaviour
The pool's LP fee is static at 0; the trading cost is the hook's toll of tollBps (75 to 500 basis points, fixed at deployment) taken in ETH on each swap. Within each swap the toll is ceil-computed on the ETH figure. Because the toll is a percentage of ETH on both buys and sells, buys and sells pay the same rate on the ETH side; the coin side is not charged a separate fee.
Owner & admin controls
Ownership is renounced in the constructor, so owner() reads zero. There is no pause, no blacklist, no fee setter and no upgrade path; tollBps, creditsBps, caster, moulder, fettler and melter are immutable. Each cache can only be emptied by its own keeper, and the keeper addresses are fixed.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool initialisation to the Cupola with the exact canonical key. beforeSwap and afterSwap take the toll via return deltas and mint the ETH claim. beforeSwapReturnDelta and afterSwapReturnDelta are enabled so the hook can take the toll from the trader's swap amounts. The remaining hook callbacks are present but revert with NotWired.

Security & trust assessment

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

Who controls it: No privileged key can change the fee or pause trading; ownership is renounced in the constructor. Centralisation is limited to the fixed keeper addresses that can withdraw their cache's ETH, and the Cupola which can only initialise the home pool once.

Risk to user funds: The hook holds ETH inside the PoolManager as an ERC-6909 claim tracked against the four caches, and it can take the toll from trader swap amounts via return deltas. It cannot move other users' LP funds, since liquidity callbacks revert. Cache balances are only withdrawable by their fixed keepers.

Security findings

  • [info] Immutable 0.75% to 5% toll on every swap: The toll rate is set once in the constructor and cannot be changed, and it applies to all swaps through the home pool. Traders pay it regardless of direction, so it should be weighed against the alternative pools for the same pair.
  • [medium] Hook takes value via return deltas: beforeSwap and afterSwap return non-zero deltas and call poolManager.mint, so the hook can alter the amounts a trader receives. Swaps that fill partially or move an unexpected ETH amount revert, which can block some trades.
  • [low] Cache withdrawals restricted to fixed keepers: empty() is gated by keeperOf(which), which returns immutable addresses, so only those addresses can ever extract the stashed ETH. Funds in caches are not reachable by the cupola or any other party.
  • [info] Swap revert paths for non-canonical pools: Any pool using this hook other than the lit home key reverts with StrangeTrough, and amounts beyond int128 range revert with AmountOffScale; this is by design but means off-canonical routing will fail.

Contract details

Verified source
No
Bytecode size
8,100 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, ownable, return-delta, self-unlock

Pools using Fee sharing hook