PairV5LaunchV2NativeFeeHook on Robinhood Chain

Uniswap v4 Hook Contract 0xd2f759a1cf13c30127c551c3aee04629aea200c0 on Robinhood Chain · Oracle · Verified contract

Volume (24h)
$308
Value locked (TVL)
$16.79K
All-time volume
$5.34M
Pools using this hook
432
Swaps (24h)
101 (38 traders)
Total swaps
53,967

What it does

Observation-only hook for registered Launch V2 pools that records tick snapshots on swaps to build a 30-minute TWAP price oracle, without changing fees or taking any funds.

How it works step by step

  • A registrar contract registers pools that must use this hook, a fixed 1% fee (10000) and tick spacing 200. The pool's token, quote token, vault and position id are stored, and the pair must be token/quote.
  • On registration the hook reads the pool's current slot0 through StateView, stores it as the launch boundary sqrt price and writes the first tick observation.
  • On every swap, beforeSwap increments a per-pool swap counter and writes a (timestamp, tick) observation into a 32-slot ring buffer, at most once per 60 seconds.
  • consult() returns the time-weighted average tick over exactly 30 minutes. getQuote() converts that TWAP into an amount quote, rounded in a direction depending on swap direction. Both revert if history is insufficient or the newest observation is older than 5 minutes.
  • buybackExecutor() validates and returns a buyback executor address by cross-checking the registrar engine, coordinator and executor contracts. These are read-only integration views.
Swap behaviour
beforeSwap requires the pool to be registered with this hook, fee 10000 and tick spacing 200 (otherwise it reverts with UnknownPool). It counts the swap, reads the current tick from StateView and may record an observation, then returns a zero delta and no fee override. afterSwap only re-validates the pool and returns zero.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Uses the pool's static fee. Registration requires a 1% (10000) fee and the hook returns 0 as the fee override, so it never sets or takes fees. The source states it never requests return deltas.
Owner & admin controls
No owner, pause or upgrade functions. The immutable registrar address alone can call registerPool for new pools; registered pools cannot be re-registered and no function removes or edits them. Launchpad, registrar and StateView are fixed in the constructor.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap

beforeSwap validates the pool, bumps the swap counter and records a tick observation for the TWAP. afterSwap only re-checks the pool is registered and returns a zero delta.

Security & trust assessment

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

Who controls it: There is no owner. The registrar, a fixed external contract, controls which pools get registered and with what metadata. It cannot alter fees, pause swaps on registered pools or move funds through this hook.

Risk to user funds: The hook holds no balances, takes no deltas and has no transfer logic. The only exposure is a swap-blocking revert for unregistered pools or if StateView fails, and reliance on its TWAP by integrators.

Security findings

  • [info] No fund-moving permissions: Only beforeSwap and afterSwap are enabled, with no return-delta flags. Both callbacks return zero deltas and fee override 0, so the hook cannot take or redirect swap proceeds.
  • [low] Registrar-gated pool registration: registerPool reverts with OnlyRegistrar unless called by the immutable registrar. A faulty or malicious registrar could register pools with arbitrary vault and positionId metadata, though the hook does not use these for transfers.
  • [low] Swaps revert on unregistered pools: Both swap callbacks revert with UnknownPool if the pool is not registered or its fee or tick spacing differs. A pool that initializes with this hook but is never registered would be unswappable.
  • [low] TWAP manipulability and staleness: Observations are tick snapshots taken at the start of swaps, at most one per 60 seconds, in a 32-slot buffer. Consumers of consult or getQuote must handle reverts when history is stale (over 5 minutes) or insufficient, and thin pools could still have the price moved.
  • [info] External calls to registrar and StateView: beforeSwap calls StateView.getSlot0, and buybackExecutor() calls into registrar, coordinator and executor contracts. These are fixed addresses, but swaps depend on StateView behaving correctly.

Contract details

Verified source
Yes (PairV5LaunchV2NativeFeeHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
9,016 bytes
Upgradeable proxy
No
Detected patterns
launchpad, oracle

Pools using PairV5LaunchV2NativeFeeHook