Fee sharing hook on Robinhood Chain
Uniswap v4 Hook Contract 0x7f6adeef151b0079e10edf9c96647bd84567aacc on Robinhood Chain · Fee sharing
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 0
What it does
This hook launches tokens on a bonding curve and takes a share of swap amounts as fees, which are then split among the creator, holders and burns, so traders pay the fee on swaps while LPs are gated by curve state; the direction-specific fee split could not be confirmed from the bytecode.
How it works step by step
- Acts as a bonding-curve style launch hook: beforeInitialize and afterInitialize set up a curve per pool and track curve state in storage (mapping keyed by pool or token address).
- Takes a fee on swaps through afterSwapReturnDelta and beforeSwapReturnDelta, withholding part of the trade amount as hook-held currency.
- Accumulates creator fees (creatorOwed, claimCreatorFees) and holder rewards (holderRewardsPaid) from collected swap fees.
- Distributes accumulated balances through the distribute function and tracks volume and tokens burned per token.
- Uses unlockCallback and the pool manager unlock/take flow to move currency out of the PoolManager during distribution and claims.
- Gates liquidity additions and removals through beforeAddLiquidity and beforeRemoveLiquidity, with curve-state checks (CurveNotOpen, CurveAlreadyOpen errors present).
- Swap behaviour
- beforeSwap and afterSwap run on every swap. The hook uses return deltas to take a fee from swap amounts and records swap volume; the exact fee rate and which trade direction pays more could not be determined from decoded bytecode.
- Liquidity behaviour
- beforeAddLiquidity and beforeRemoveLiquidity are enabled, and afterAddLiquidity and afterRemoveLiquidity are present as functions. The hook can restrict liquidity changes depending on curve state; exact rules are not determinable without source.
- Fee behaviour
- Swap fees are captured by the hook via return deltas and then split between creator fees, holder rewards and burns, based on the curves mapping and storage balances. Exact split percentages are not determinable from decoded bytecode.
- Owner & admin controls
- A launcher and creator address are stored and referenced (launcher(), creator(), feeRecipient(), OnlyLauncher error). distribute and claimCreatorFees are callable by external parties. Whether an owner can upgrade or pause could not be confirmed; no explicit admin setter was decoded.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize and afterInitialize set up the curve for a new pool; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; beforeSwap and afterSwap track volume and take fees; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of swap amounts; afterAddLiquidity, afterRemoveLiquidity and beforeDonate/afterDonate exist as callbacks.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: A launcher or creator key could influence curve opening and fee accounting; the decoded functions do not show a direct fee-rate setter, so the scope of privileged control is uncertain.
Risk to user funds: The hook can hold fee balances in its own accounting and in PoolManager credit via take and unlock, and can reduce swap output through return deltas. It does not show a path to freeze user LP positions from the decoded selectors.
Security findings
- [medium] Hook takes swap amounts via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can withhold part of each swap. Users receive less than the pool price implies, and the split is set by hook logic that could not be fully read.
- [medium] Hook holds and moves currency: The hook calls take and unlock on the PoolManager and maintains balance mappings for creators and holders, so it custodies user fee funds until they are distributed or claimed.
- [low] Permissionless distribution and claim entry points: distribute(address) and claimCreatorFees(address) are nonpayable selectors that move balances; their access checks could not be verified from bytecode alone.
- [info] Launcher-gated curve lifecycle: Errors OnlyLauncher, CurveNotOpen and CurveAlreadyOpen indicate a launcher address controls when curves open for a pool.
Contract details
- Verified source
- No
- Bytecode size
- 18,051 bytes
- Upgradeable proxy
- No
- Detected patterns
- fee-sharing, launchpad, moves-currency, return-delta, rewards, self-unlock