RhMosFeeHookV2 on Robinhood Chain

Uniswap v4 Hook Contract 0xb0c700d7d93e38a6e27af8335733b1b2c9bfa544 on Robinhood Chain · Fee sharing · Verified contract

Volume (24h)
$566
Value locked (TVL)
$285
All-time volume
$298.66K
Pools using this hook
1
Swaps (24h)
5 (3 traders)
Total swaps
1,164

What it does

Takes a fixed 2% fee on every exact-input swap of the official rhMOS/USDG pool and routes it to a fixed fee sink, while letting any account add or remove liquidity without restriction.

How it works step by step

  • Charges a fixed 2% fee (rounded up) on the gross output of each exact-input swap in the official pool.
  • Takes the fee in USDG on sells and in rhMOS on buys, sending it to the immutable feeSink.
  • Returns the fee as a hook delta so the swapper receives output minus the fee.
  • Opens the rhMOS transient transfer allowance for exactly the amount moved in each swap or liquidity change.
  • Allows any account to add or remove liquidity on the official pool with no wallet exemptions.
  • Rejects pools that do not match the single official configuration and rejects exact-output swaps.
Swap behaviour
Exact-input swaps only. On sells (rhMOS in, USDG out) the 2% fee is taken from the USDG output; on buys (USDG in, rhMOS out) the fee is taken from the rhMOS output. Exact-output swaps revert with ExactOutputNotSupported. The hook uses only afterSwap, returning the fee as a delta.
Liquidity behaviour
Open liquidity: afterAddLiquidity and afterRemoveLiquidity open the rhMOS token's transient transfer allowance for exactly the rhMOS amount the PoolManager moves, so any account can add or remove liquidity on the official pool through a standard liquidity router. No fee is charged on liquidity operations and no wallet allowlist is applied. The hook emits LiquidityAllowanceOpened for each such operation.
Fee behaviour
Charges a fixed 2% fee (FEE_BPS = 200) with ceiling rounding on the gross output of each exact-input swap: on sells the fee is taken in USDG output, on buys the fee is taken in rhMOS output. Fees are sent to the immutable feeSink via PoolManager.take and returned as the afterSwap hook delta so the swapper receives gross minus fee. Trades whose fee would consume the entire output revert.
Owner & admin controls
No admin controls found. The hook has no owner, pause, upgrade or parameter-setter functions; fee rate (FEE_BPS), pool key and feeSink are immutable constants or constructor-set immutables. The feeSink address is fixed at deployment and cannot be changed.

Enabled Uniswap v4 callbacks

beforeInitialize, afterAddLiquidity, afterRemoveLiquidity, afterSwap, afterSwapReturnDelta

beforeInitialize restricts pool initialization to the single official pool configuration. afterAddLiquidity and afterRemoveLiquidity open the transient rhMOS transfer allowance for the amount moved, enabling open LP. afterSwap computes and collects the 2% output fee, opens the transient allowance for swap transfers, and returns the fee as a hook delta (afterSwapReturnDelta). beforeSwap and other callbacks are not enabled and revert if called.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: No privileged key exists in the contract. Nothing can be changed after deployment, so no single party can alter fees, redirect the feeSink, pause trading or upgrade logic. The rhMOS token it calls into (increaseTransferAllowance) is controlled by its own separate contract, which is outside this analysis.

Risk to user funds: The hook cannot custody user principal, but it does skim 2% of every exact-input swap output into the feeSink and opens transient rhMOS allowances that let any account move rhMOS during liquidity operations. It does not block swaps or liquidity, since no pause or admin exists, and it reverts only on exact-output swaps, non-official pools, or trades whose fee would consume the whole output.

Security findings

  • [info] Swap output fee taken via return delta: The hook returns a non-zero afterSwap delta and calls PoolManager.take to pull 2% of every swap's output to the feeSink, so it directly takes value from swappers' outputs.
  • [medium] Open liquidity bypasses token transfer restrictions: afterAddLiquidity and afterRemoveLiquidity open a transient transfer allowance on the rhMOS token for any sender, so unrestricted parties can move rhMOS through the pool; the token's transfer restrictions are bypassed for these operations by design.
  • [low] Fee avoidance through liquidity operations: The contract source states that range orders are filled without paying the swap fee, a deliberate consequence of open liquidity handling.
  • [low] Immutable fee recipient with no recovery path: The feeSink is an immutable constructor parameter with no way to change it; if it was set to an address that cannot receive or manage rhMOS, accrued fees could be stuck, but no owner can correct this.

Contract details

Verified source
Yes (RhMosFeeHookV2)
Compiler
solc 0.8.30+commit.73712a01
Bytecode size
4,757 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta

Pools using RhMosFeeHookV2