Fee sharing hook on Robinhood Chain

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

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

What it does

Every swap in this coin's pool pays a fixed 0.5% to 3% quitrent in ETH on the ETH side, the same rate for buys and sells, with 85% going to the freeholder and the rest to the manor, so trades on either side pay the same percentage.

This read was written for the hook 0xb9ac…20cc 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

  • Acts as the ERC-20 coin (Deed) for a pool whose ETH side is currency0 and whose hook is this contract, with a fixed one-billion supply minted once to the Indenture in the constructor
  • Takes a quitrent of quitrentBps (50 to 300 basis points, fixed at deployment) of the ETH side of every swap in the home pool via beforeSwapReturnDelta and afterSwapReturnDelta
  • Mints an ERC-6909 ETH claim inside the PoolManager for each quitrent amount and books it into two tins: 85% to the freeholder and 15% plus rounding to the purse
  • Lets only the tin bearer (the freeholder for tin 0, the purse for tin 1) draw its ETH via draw(), which burns the claim and takes ETH to the bearer
  • Accepts pool initialisation only once, from the Indenture, for the exact canonical key (ETH as currency0, this token as currency1, fee 0, tick spacing 1)
  • Reverts all liquidity and donate hooks, so liquidity providers add and remove liquidity through Uniswap without this contract being involved
Swap behaviour
Every swap in the home pool pays a quitrent in ETH. For ETH-specified legs (buying with exact ETH in, or selling for exact ETH out) the quitrent is taken in beforeSwap from the ETH figure. For coin-specified legs it is taken in afterSwap from the ETH that moved. Buyers and sellers are charged the same rate on the ETH side, so no trade direction is favoured. Swaps on any other pool revert.
Liquidity behaviour
No liquidity callbacks. Liquidity hooks revert with NotWired, so adding and removing liquidity goes straight through the PoolManager.
Fee behaviour
The pool's own fee is fixed at 0. The quitrent is a separate, fixed percentage of the ETH side of each swap, taken as a hook return delta. 85% of it accrues to the freeholder tin and the remainder to the purse tin, both drawable only by their bearers.
Owner & admin controls
The owner is renounced in the constructor, so owner() returns the zero address and no owner-only function can be called. There is no pause, no upgrade path, no parameter setter and no blocklist. The metadata URI is set at construction and cannot change. The bearers of the two tins can withdraw their own balances; the freeholder and purse addresses are immutable.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize restricts pool creation to the Indenture and the canonical home key. beforeSwap computes and returns the quitrent delta for ETH-specified legs and gates the pool to the home key. afterSwap checks that ETH-named legs filled completely and returns the quitrent delta for coin-named legs. The return-delta flags allow the hook to take the quitrent from swap deltas.

Security & trust assessment

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

Who controls it: Effectively none. Ownership is renounced in the constructor, there are no privileged setters or pause, and the fee rate, recipients and metadata are fixed. The only privileged parties are the two tin bearers, who can withdraw only their own balances.

Risk to user funds: The hook holds quitrent ETH inside the PoolManager as ERC-6909 claims and can take a fixed percentage of the ETH side of home-pool swaps. Swaps that fail the exact-fill check revert and can be blocked, but the hook cannot move LP or trader funds beyond the quitrent, and bearer withdrawals are limited to each tin's booked balance.

Security findings

  • [info] Hook takes ETH via return deltas on every swap: beforeSwap and afterSwap return non-zero deltas, so the PoolManager credits the hook with a fixed percentage of the ETH side of every home-pool trade. This is the intended quitrent but it is a permanent tax on all trades in that pool.
  • [medium] Swaps can revert if the fill is not exact: For ETH-specified legs afterSwap reverts with Unfilled unless the ETH moved matches the pre-computed figure exactly. Partial fills or price-limit stops on such legs will revert the whole swap, which can block trades near a price limit.
  • [low] Quitrent claim accounting depends on PoolManager mint and burn: The contract mints ERC-6909 ETH claims to itself in _book and burns them in unlockCallback. Solvency relies on the PoolManager holding the ETH backing these claims; the code only ever removes the claim through draw, so the accounting is internally consistent.
  • [info] Immutable recipients and no admin: Freeholder and purse are immutable and no function can redirect tin balances. A lost or compromised bearer key would only affect that tin's own withdrawals.

Contract details

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

Pools using Fee sharing hook