MotionFeeHook on Robinhood Chain
Uniswap v4 Hook Contract 0x9e93f900d314a95f0b6532c2d8a617ffcffbe8cc on Robinhood Chain · Dynamic fee · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $7.21K
- All-time volume
- $1.38M
- Pools using this hook
- 2
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 5,267
What it does
A Uniswap v4 hook that charges a manager-set protocol fee on every swap of graduated launch pools and splits it among the treasury, creator recipients and an optional dividend vault.
How it works step by step
- Takes a protocol fee on the quote side of every swap in authorized launch pools via poolManager.take
- Splits each fee into an optional dividend slice, a creator share and a treasury remainder
- Credits creator slices to the CreatorFeeVault or pushes them directly to recipients, falling back to the treasury on failure
- Restricts pool initialization to pools authorized by the manager and liquidity adds to the position locker
- Reverts on exact-output swaps and on the unused liquidity remove, donate and after-hook callbacks
- Swap behaviour
- On buys (input is the non-token side), beforeSwap takes hookFeeBps of the exact input and distributes it; on sells, afterSwap takes hookFeeBps of the quote output and distributes it. Exact-output swaps revert with ExactOutputNotSupported.
- Liquidity behaviour
- beforeAddLiquidity only permits adds where the sender is the authorized positionLocker (reverts NotLocker otherwise). No remove-liquidity callback logic (reverts HookNotImplemented if reached).
- Fee behaviour
- Pools carry a 0 LP fee. The hook charges a protocol fee of manager.hookFeeBps() on the quote side of each swap, taking it via poolManager.take on buys (beforeSwap, specified amount) and sells (afterSwap, quote output). Fee is split into an optional dividend slice (divBps), a creator share (creatorShareBps) distributed to recipients or accrued in the CreatorFeeVault, and the remainder sent to the treasury.
- Owner & admin controls
- Owner (OwnableUpgradeable) can upgrade the implementation via UUPS _authorizeUpgrade (onlyOwner) and transfer or renounce ownership. The manager (ILaunchManager) sets authorized pools via authorizePool and controls the hookFeeBps and fee context, which the owner's manager can change. No pause function found in the decoded surface.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize: rejects pool initialization unless the pool was authorized by the manager. beforeAddLiquidity: restricts liquidity adds to the position locker. beforeSwap: charges the protocol fee on the non-token side for buys and returns a before-swap delta to take it. afterSwap: charges the protocol fee on the quote output for sells and returns an after-swap delta. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take fee amounts that offset the swap's delta.
Security & trust assessment
Risk level: high (verified source, high confidence).
Who controls it: The owner can upgrade the implementation at will, which could replace fee logic, redirect fees, or block swaps entirely. The manager controls hookFeeBps, the fee context (creator share, dividend share, recipients, treasury, vault) and pool authorization, so a privileged key can set fees up to 100% of swap output and reroute them. Because the proxy is upgradeable, these powers are not bounded by the code currently visible.
Risk to user funds: The hook can hold and move swap proceeds: it takes the protocol fee from every swap of an authorized pool and routes it to the treasury, creator recipients or the dividend vault. A malicious upgrade or fee change could divert a large share of swap output. Liquidity adds are gated to the position locker, so the hook does not custody LP principal directly.
Security findings
- [high] Upgradeable proxy controlled by a single owner: The owner can call upgradeToAndCall to replace the implementation, which could change any swap, fee or custody logic with no timelock visible in the source.
- [medium] Hook fee has no policy cap: BPS_DENOMINATOR is the only ceiling on fees per the source comments, and manager.hookFeeBps() has no lower or upper policy cap, so the owner can set fees up to 100% of the quote side of each swap.
- [medium] Hook takes swap proceeds via return deltas: The hook takes tokens via poolManager.take and returns deltas from beforeSwap and afterSwap, so it directly moves user swap proceeds into its own balance before forwarding to recipients, treasury or the vault.
- [low] Fallback routes failed slices to treasury: Fee distribution falls back to the treasury when a recipient or vault fails, so a misconfigured or malicious recipient silently redirects creator slices to the treasury.
- [info] Manager and locker are privileged single points: Pool authorization and fee context are set by the manager, and beforeAddLiquidity restricts adds to a single positionLocker address.
Contract details
- Verified source
- Yes (MotionFeeHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 130 bytes
- Upgradeable proxy
- Yes
- Detected patterns
- erc20, moves-currency, ownable, return-delta, upgradeable
Pools using MotionFeeHook
- ETH / MOTION (0.00% fee) — 24h volume $0, TVL $4.65K, 0 swaps today
- ETH / MCAT (0.00% fee) — 24h volume $0, TVL $2.56K, 0 swaps today