VPOOLS
Documentation

How the layer works.

What the router reads, how it chooses, where the stock-token guard sits, and which parts are live today versus still on the way. Plain facts, kept in step with the code.

Overview

VPOOLS is a liquidity layer for Robinhood Chain. Instead of asking traders to pick a pool, it looks at every venue that can fill an order between two listed assets and returns the route with the best output. It is made of three contracts: a router (VpoolsSwitchyard), an asset registry (VpoolsManifest) and a liquidity locker (VpoolsStrongbox). The router charges no fee of its own; you pay the pool fees and gas, nothing else.

What is live today: venue discovery, exact-size quotes, the oracle check on stock tokens, the pool and stock tables in the app, and the public read API. What is not live yet: on-chain execution and locks, which open when the contracts are deployed, and everything listed under Roadmap.

How routing works

1. Discover venues

For every listed asset the router asks the Uniswap v3 factory for its pool against USDG and against WETH at each fee tier (0.01%, 0.05%, 0.3%, 1%). Only addresses the factory returns are used; no pool is typed in by hand.

2. Price every path at your size

Each direct pool between the two assets, and each path through WETH or USDG, is priced by QuoterV2 for the exact amount you enter (the site compares direct and two-step paths; the router contract accepts up to four hops). Prices at your size already include each pool's fee and the price impact of your trade.

3. Apply the guards

  • Stock-token fills are compared with their Chainlink reference (see the oracle band below).
  • Execution carries a minimum output from your slippage setting and a deadline, so a stale or moved quote cannot fill.

4. Return the best executable route

The highest output that passes every guard wins. The answer includes the path, fee tiers, every candidate that was priced and the gas the quoter measured.

Oracle guard

Every asset the router can touch is listed in VpoolsManifest with a class, a price source and a bound. WETH, cbBTC and the stock tokens are guarded against their Chainlink USD feeds; USDG is priced at a fixed $1 peg and left unguarded.

On every hop that touches a guarded asset, the router compares the pool's spot price before the swap with the ratio of the two reference prices. If the gap is larger than the wider of the two assets' bounds, or either feed is older than its allowed age, the hop is refused and the whole swap reverts. A hop between two unguarded assets needs no reference.

Suggested settings

  • Stock tokens: 4% bound, feed age up to four days (equity feeds pause outside US market hours).
  • WETH and cbBTC: 3% bound, feed age up to 25 hours.
  • USDG: $1 peg, 1% bound when it meets a guarded asset.

The registry owner sets the final values on chain, and can change them. The guard watches where a pool sits before your trade; your own price impact is limited separately by the minimum output you accept.

Listed assets

Settlement and hop assets: WETH and USDG, plus cbBTC. Stock tokens are the official Robinhood tokens, identified by the token beacon in their bytecode rather than by symbol, each with its feed:

  • SPY SPDR S&P 500 ETF Trust
  • QQQ Invesco QQQ
  • NVDA NVIDIA
  • AAPL Apple
  • TSLA Tesla
  • MSFT Microsoft
  • META Meta Platforms
  • AMZN Amazon
  • GOOGL Alphabet Class A
  • COIN Coinbase
  • MSTR Strategy Inc.
  • SLV iShares Silver Trust

Contracts

External contracts the router reads: Uniswap v3 factory 0x1f7d7550b1b028f7571e69a784071f0205fd2efa and QuoterV2 0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7. The full list, with explorer links, is on the home page.

Liquidity locks

VpoolsStrongbox holds LP tokens (any ERC-20) or a position NFT until an unlock time chosen when it is locked. The lock, its owner and its date are public. The owner can push the date later or hand the lock to another address, never bring it forward; the position comes back only once the date has passed. For Uniswap v3 positions the owner can keep collecting trading fees while the liquidity stays locked. The contract has no owner and no admin functions.

API

Read-only JSON over HTTPS. The quote and market endpoints allow cross-origin requests, so a browser app can call them directly.

GET /api/quote

Query: in and out (symbol or address of a listed asset), amount (decimal, in units of in).

GET /api/quote?in=WETH&out=USDG&amount=1
{
  "tokenIn": "WETH", "tokenOut": "USDG", "amountIn": "1000000000000000000",
  "best": { "kind": "direct", "path": ["WETH","USDG"], "fees": [100],
            "amountOut": "2530596055", "gasEstimate": 108306 },
  "candidates": [ ... every priced path ... ],
  "oracle": null
}

GET /api/markets

Every discovered pool (pair, fee, price, balances, value held) and every stock token with its Chainlink answer, update time, pool-implied price, deviation and status. Cached for 30 seconds.

GET /api/chain

Latest block and its time, gas price, ETH/USD, and whether each configured VPOOLS contract address holds code.

Limits

Quotes are limited per network to keep the shared RPC healthy. Answers with status 429 mean slow down and retry.

Roadmap

Listed in the order they are expected to ship. None of these are live, and none are presented as live anywhere on the site.

  • Router execution and liquidity locks on mainnet, after deployment and source verification.
  • Pons adapter: quotes and fills for launch-curve tokens, with lifecycle checks around graduation.
  • Uniswap v4 routing, and exact-output swaps.
  • Dynamic-fee pools on Uniswap v4 hooks, fee following realised volatility.
  • Registry-gated real-world asset listings.
  • Credit against locked LP positions.
  • $VPOOLS staking, protocol fee share, buyback and burn, and governance over new pools and risk settings.
  • A typed SDK over the same endpoints.

Risks

  • Smart contracts can contain bugs, and the VPOOLS contracts are new. Start with amounts you are comfortable with.
  • Quotes reflect pool state at the moment they are read. Prices can move before a transaction is mined; the minimum output protects you by making the swap fail instead.
  • Thin pools move a lot on size. The route shown already includes your price impact; read it before you sign.
  • Oracle feeds can be late or pause. The guard only works when the feed is fresh, which is why stale feeds stop routes through that asset.
  • The registry owner can list, delist or re-tune assets. That can block routes or loosen a bound; it cannot move anyone's tokens, because the registry holds none.
  • Tokens that take a fee on transfer or rebase are not supported on a route.

FAQ

Does VPOOLS hold my funds?

No. Quotes are read-only. Once the router is deployed, a swap moves tokens from your wallet through the chosen pools and back to your wallet in the same transaction; nothing rests in the router between trades.

Why is the best route sometimes not a VPOOLS pool?

Because the router's job is the best output you can actually get, not volume for its own pools. Today every route runs over Uniswap v3 pools that already exist on Robinhood Chain.

What happens to a stock-token trade outside market hours?

Chainlink equity feeds follow US market sessions. Each stock token has a maximum feed age set in the registry; the suggested four days keeps routes open over a weekend against Friday's close. Past that age the feed counts as stale and routes through that token are refused. A shorter age closes stock routes whenever the market is closed.

Is $VPOOLS live?

Not yet. The contract address is published on this site and on X at launch. Until then every address field reads "published at launch".