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
- WETH / ZKHOOD (1.00% fee) — 24h volume $75, TVL $1.72K, 2 swaps today
- GOOGL / MORE (1.00% fee) — 24h volume $36, TVL $1.32K, 9 swaps today
- SPCX / MORE (1.00% fee) — 24h volume $23, TVL $1.32K, 5 swaps today
- SPY / PAIRHOOD (1.00% fee) — 24h volume $23, TVL $1.61, 1 swaps today
- WETH / MORE (1.00% fee) — 24h volume $19, TVL $1.31K, 3 swaps today
- USDG / INTERN (1.00% fee) — 24h volume $18, TVL $4.61, 4 swaps today
- RDDT / MIM (1.00% fee) — 24h volume $17, TVL $58, 3 swaps today
- USDG / TRUCK (1.00% fee) — 24h volume $12, TVL $24, 3 swaps today
- WETH / SUMDUM$$ (1.00% fee) — 24h volume $10, TVL $2.78, 14 swaps today
- RDDT / Artcoin (1.00% fee) — 24h volume $9.96, TVL $24, 2 swaps today
- SPCX / BYTE (1.00% fee) — 24h volume $9.60, TVL $21, 2 swaps today
- TSLA / BYTE (1.00% fee) — 24h volume $9.58, TVL $5.52, 2 swaps today
- SPY / MORE (1.00% fee) — 24h volume $8.92, TVL $1.31K, 4 swaps today
- WETH / asd (1.00% fee) — 24h volume $5.31, TVL $922, 2 swaps today
- SPY / asd (1.00% fee) — 24h volume $5.03, TVL $890, 1 swaps today
- SPCX / MDMA (1.00% fee) — 24h volume $4.85, TVL $69, 1 swaps today
- TSLA / MDMA (1.00% fee) — 24h volume $4.85, TVL $31, 1 swaps today
- AAPL / NIGGA (1.00% fee) — 24h volume $3.25, TVL $20, 1 swaps today
- NVDA / ASSDAQ (1.00% fee) — 24h volume $3.11, TVL $11, 1 swaps today
- INTC / ASSDAQ (1.00% fee) — 24h volume $3.10, TVL $3.06, 1 swaps today