NavJitHookV17 on Robinhood Chain

Uniswap v4 Hook Contract 0xb672a5d825f82dea8574711d1da696fcc48d2ae0 on Robinhood Chain · Liquidity management · Verified contract

Volume (24h)
$55.83K
Value locked (TVL)
$128
All-time volume
$56.52K
Pools using this hook
7
Swaps (24h)
1,755 (179 traders)
Total swaps
1,904

What it does

A Uniswap v4 hook that makes a USDG pool for a tokenized stock basket by quoting swaps at NAV and just-in-time providing liquidity, so traders trade against NAV while only the owner can supply standing liquidity.

How it works step by step

  • Keeps a zero-fee USDG/basket pool whose effective price tracks NAV plus configured spreads
  • Places just-in-time liquidity inside beforeSwap and removes it in afterSwap within the same transaction
  • Mints or redeems basket tokens and routes underlying stock legs through external v4 or v3 venues
  • Reverts swaps when pool price deviates from NAV beyond the band or the trade is unprofitable
  • Sends profit in USDG to a treasury address
  • Owner can seed and withdraw a standing liquidity position for the pool
Swap behaviour
beforeSwap reads NAV from the navGuard, quotes buy or sell price with spreads, sizes inventory, mints or sources basket units and places JIT liquidity; afterSwap removes JIT liquidity, verifies pool price is within bandBps of NAV, restores the standing position, redeems and sells underlying stocks, and sends USDG profit to treasury.
Liquidity behaviour
Third-party addLiquidity and removeLiquidity revert; the hook alone adds just-in-time liquidity around NAV during swaps and removes it afterwards, plus an owner-seeded standing position.
Fee behaviour
Pool fee is 0; economics come from buy and sell spreads (default 25 bps buy, 100 bps sell) applied to NAV, with profit taken as USDG delta and sent to treasury.
Owner & admin controls
Owner (Ownable2Step, renounce disabled) can set params (spreads up to bandBps, band up to 10%, size buffer up to 20%, width up to 2000 ticks), set treasury, set navGuard, open venues, seed and withdraw the standing liquidity position, and sweep funds via withdrawStanding. Owner can also change the basket registry dependencies through the factory and registry contracts.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeDonate

beforeInitialize blocks external pool creation except via openVenue; beforeAddLiquidity and beforeRemoveLiquidity block third-party LPs; beforeDonate is disabled; beforeSwap quotes NAV-based price, mints basket units and places JIT liquidity; afterSwap removes JIT liquidity, checks the pool price is within band of NAV, restores standing liquidity, redeems basket and sells constituents, and pays profit to treasury.

Security & trust assessment

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

Who controls it: The owner can withdraw the standing liquidity position, change treasury and navGuard (which gates pricing via checkedNavPerUnit18), and adjust spreads; a malicious or compromised navGuard could misprice swaps and drain value. Ownership transfer is two-step but there is no timelock.

Risk to user funds: The hook holds USDG and basket tokens during swaps and the owner-seeded standing position. Swaps revert if the price is outside the band or profit is negative, so users are not forced into losing trades, but the owner controls the funds in the standing position and the NAV source.

Security findings

  • [high] Owner-replaceable NAV oracle guard: Pricing, swap execution and profit accounting depend on the owner-settable navGuard contract; a compromised or buggy guard can set NAV arbitrarily.
  • [medium] Owner can withdraw standing liquidity: withdrawStanding lets the owner remove the standing liquidity and send the tokens to any address, and treasury can be redirected by the owner.
  • [medium] Dependence on external pools and registries: The hook calls out to external v3-family pools and routers via fallback and probe functions; these depend on factory and registry configuration that can be changed by the owner.
  • [info] Complex transient-state execution flow: beforeSwap and afterSwap rely on transient storage locks and cached state; reentrancy is guarded but the flow is complex and only partly verified from the provided excerpt.

Contract details

Verified source
Yes (NavJitHookV17)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
24,322 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, ownable, self-unlock

Pools using NavJitHookV17