MoonsendFeeHook_RH on Robinhood Chain

Uniswap v4 Hook Contract 0xd34e9fd6b28281c67ddd41d0028214e1b34cb000 on Robinhood Chain · Dynamic fee · Verified contract

Volume (24h)
$17
Value locked (TVL)
$32.42K
All-time volume
$457.19K
Pools using this hook
16
Swaps (24h)
1 (1 traders)
Total swaps
4,077

What it does

Sets a fixed, pre-registered swap fee (1.33% to 4.20%) on Moonsend token pools when they are initialized, and only allows pools the factory has registered to start.

How it works step by step

  • The factory registers a pool ID with one fee tier from the allowlist {13300, 20000, 27500, 34000, 42000} via registerPool, and each pool ID can be registered only once.
  • beforeInitialize reverts unless the pool ID is registered, so only factory-registered pools can be initialized with this hook.
  • afterInitialize calls poolManager.updateDynamicLPFee(key, fee) to write the registered fee into the pool, then emits PoolInitialized for indexers.
  • No swap, liquidity or donate callbacks are enabled, so swaps and LP actions are not intercepted by the hook.
  • The contract holds no tokens or ETH and has no balance tracking, approvals or token transfers.
Swap behaviour
No swap callbacks.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Each pool's fee is set once at registration from a fixed allowlist of five tiers and written to the pool at initialization through updateDynamicLPFee. There is no function to change a registered pool's fee.
Owner & admin controls
The owner can set the factory address (setFactory, no zero-address check) and transfer ownership (transferOwnership, zero-address check). The owner cannot change fees of registered pools, pause, or upgrade the contract. The contract is not a proxy.

Enabled Uniswap v4 callbacks

beforeInitialize, afterInitialize

beforeInitialize checks that the pool is registered in this hook before the pool is created. afterInitialize sets the pool's dynamic LP fee to the registered tier and emits PoolInitialized.

Security & trust assessment

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

Who controls it: The owner can change which factory may register new pools and can transfer ownership. The owner cannot alter fees, balances or swaps of existing pools. The factory picks the fee tier for new pools within the allowlist.

Risk to user funds: The hook does not hold, move or block user or pool funds. It has no swap or liquidity callbacks and returns no deltas, so it cannot block trades or alter amounts.

Security findings

  • [low] Owner can redirect pool registration: setFactory lets the owner point registration to any address, and the new factory can register fee tiers for new pool IDs. Registered pools are unaffected, and fees are limited to the five-tier allowlist.
  • [info] Factory can set fee tier for future pools: registerPool is onlyFactory and validates the fee against the allowlist, but the factory chooses which tier applies to each pool ID. Pools are only initializable after registration.
  • [info] setFactory has no zero-address check: Setting factory to address(0) would stop any new pool registration, unlike transferOwnership, which rejects zero addresses. This is an availability issue for new pools only.
  • [info] Fee application depends on PoolManager behaviour: afterInitialize relies on poolManager.updateDynamicLPFee succeeding for the pool key. Whether it does depends on the PoolManager and the pool key flags, which are not in the provided input.

Contract details

Verified source
Yes (MoonsendFeeHook_RH)
Compiler
solc 0.8.34+commit.80d5c536
Bytecode size
2,632 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, ownable

Pools using MoonsendFeeHook_RH