Fee sharing hook on Robinhood Chain
Uniswap v4 Hook Contract 0xd08b89c67cade2f3a576d88f63c5c2acbbf620cc on Robinhood Chain · Fee sharing
- Volume (24h)
- $296
- Value locked (TVL)
- <$0.01
- All-time volume
- $296
- Pools using this hook
- 1
- Swaps (24h)
- 4 (2 traders)
- Total swaps
- 4
What it does
Wage takes a fixed cut of 0.75% to 5% in ETH from every home-pool swap, so buyers pay more ETH and sellers receive less, except for wallets on the fixed cut-free list, which pay nothing.
This read was written for the hook 0x382e…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
- Acts as the ERC20 token and the hook of its own Uniswap v4 pool; the home pool is initialised only once from the Payroll with the exact canonical key (native ETH on currency0, this token on currency1, zero fee, tick spacing 1).
- On each swap through the home pool, takes a cut of cutBps (75 to 500 bps, fixed at deployment) denominated in ETH via return deltas, so the pool pays out less or the trader receives less depending on direction and exact-in/exact-out mode.
- Takes the cut as ERC-6909 claims minted to the hook inside the PoolManager and sorts it into four envelopes: hirer (80% of cut, minus the floor share), floor (credits share of the hirer side), pool (10%) and desk (remainder).
- Each envelope can be withdrawn only by its fixed payee via payOut, which burns the claim and sends native ETH to the payee.
- Cut-free status is decided per transaction by tx.origin being on a list fixed in the constructor; wallets on that list pay zero cut.
- Hook slots for liquidity callbacks and donate revert with NotWired, so the pool cannot be used for liquidity provision through the hook.
- Swap behaviour
- Buys with exact ETH input and sells for exact ETH output have the cut taken in beforeSwap from the ETH side, reducing the swap amount or grossing up the ETH required. Buys for exact coin output and sells for exact coin input have the cut taken in afterSwap as a slice of the ETH actually paid or produced, and the swap reverts with ShortShift if a pre-cut leg did not fill exactly. Trades from cut-free origin wallets pay zero cut; all other trades pay cutBps of the ETH side, so the trader pays more in ETH on buys and receives less ETH on sells.
- Liquidity behaviour
- No liquidity callbacks. Add, remove and donate hooks all revert with NotWired, and the hook does not change liquidity; liquidity handling is left to the PoolManager.
- Fee behaviour
- The pool's LP fee is static at zero. The hook charges an additional cut of cutBps in ETH on swaps, split into envelopes: about 80% to the hirer side (with creditsBps of that side going to the floor envelope), 10% to the pool envelope and the remainder to the desk envelope. Cut-free origin wallets are exempt.
- Owner & admin controls
- Ownership is renounced in the constructor, so owner() returns zero. The contract is not upgradeable and has no pause, blacklist or parameter setters; cutBps, creditsBps, the payee addresses and the cut-free list are immutable or fixed at deployment. Payee-only withdrawals are the only privileged actions and each envelope is controlled by its own payee.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize validates the home pool key and records the pool id. beforeSwap takes the cut on exact-in buys and exact-out sells from the ETH side and returns the cut as a before-swap delta. afterSwap takes the cut on exact-out buys and exact-in sells once the ETH amount is known and returns it as an after-swap delta. beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take this currency.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, medium confidence).
Who controls it: No privileged key remains: ownership is renounced in the constructor, the contract has no admin functions or upgrade path, and parameters are immutable. The only privileged roles are the four fixed payees, each of whom can withdraw only their own envelope.
Risk to user funds: Users' ETH is exposed only through the swap cut, which is taken from the ETH side of trades in the home pool and held as ERC-6909 claims by the hook until the payees withdraw. The hook does not hold the token supply beyond the fixed mint to the hire source and cannot block transfers of the ERC20 itself, although swaps can revert on certain amounts.
Security findings
- [info] Return-delta cut on every swap: The hook takes up to 5% of the ETH side of every home-pool swap via beforeSwapReturnDelta and afterSwapReturnDelta, so the hook holds claim balances and users pay the cut on each trade except cut-free origin wallets.
- [medium] Swap reverts on unusual amounts or short fills: beforeSwap reverts with AmountOffScale when amounts exceed int128 or the cut would consume the whole input, and afterSwap reverts with ShortShift if a pre-cut exact-in or exact-out leg does not fill exactly, which can block trades that partially fill.
- [low] Cut-free exemption keyed on tx.origin: The cut-free check reads tx.origin rather than the immediate caller, so a contract wallet on the list could be used as an intermediary, but the list is fixed at deployment and cannot be edited by anyone.
- [low] Envelope withdrawals via PoolManager unlock: payOut calls poolManager.unlock with a reentrancy guard flag and the unlockCallback burns and takes native ETH to the payee; the flow is restricted to fixed payees and the claim accounting is minted in lockstep with the cut.
Contract details
- Verified source
- No
- Bytecode size
- 8,182 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, moves-currency, ownable, return-delta, self-unlock
Pools using Fee sharing hook
- ETH / DESKHAND (0.00% fee) — 24h volume $296, TVL <$0.01, 4 swaps today