VS
Mechanics

Direction doesn't matter.
Performance does.

01
PICK A FIGHT

Choose a market between two assets. NVDA vs AMD. AAPL vs META. SPY vs BTC. Each market has a fixed open and close time.

02
PICK A SIDE

Buy shares of the asset you believe will perform better over the window. Prices are quoted in cents and always sum to $1 across both sides — they are the market's implied probability.

03
TRADE THE ODDS

Shares trade against a fixed-product pool the whole time the market is open. If the odds move your way, sell early and lock in the gain. You never have to wait for settlement.

04
WINNER TAKES $1

At close, both assets' returns since open are computed from verified onchain oracle prices. The better-performing asset's shares redeem for $1 each. The other side redeems for $0. A dead heat pays 50¢ each.

Worked example
NVDA
−4.00%
VS
AMD
−9.00%
Both fell. NVDA still wins — it outperformed AMD by 5 percentage points. NVDA shares pay $1. AMD shares pay $0.
Settlement formula
perfA = endPriceA / startPriceA − 1
perfB = endPriceB / startPriceB − 1

perfA > perfB  →  A wins  (A = $1, B = $0)
perfB > perfA  →  B wins  (B = $1, A = $0)
perfA = perfB  →  tie     (both = $0.50)

Start and end prices are read from Chainlink feeds at the market's open and close timestamps. Robinhood Stock Token feeds are multiplier-adjusted, so splits and corporate actions don't decide a fight.

If a valid, fresh price can't be obtained inside the resolution window, the market is cancelled and every share refunds 50¢ — a complete set (1 A + 1 B) always returns exactly $1. Nobody can pick a winner by hand.

Under the hood

No order book.
No oracle committee.

01
CHAINLINK
PRICE FEEDS

Every asset is wired to a Chainlink Data Feed on Robinhood Chain. Stock Token feeds report the multiplier-adjusted per-token price, so splits and dividends cancel out of the end ÷ start ratio. Feeds run 24/5 with a 0.5% deviation trigger and a 24h heartbeat. A feed is registered once and can never be swapped.

02
DETERMINISTIC
SNAPSHOTS

Open and close prices aren't "whatever the feed says when someone clicks". The market binary-searches Chainlink round history for the last round at or before its exact open and close timestamps. Anyone can call open() or resolve() at any point in the window and get the same answer. A round older than 25h, or none at all, means no guess — the market cancels and refunds.

03
FIXED-PRODUCT
AMM

Shares price off a constant-product pool, reserveA × reserveB = k, the same curve behind Uniswap v2 and Gnosis conditional-token markets. Buying A mints complete sets into the pool and pulls A out until k holds. Selling solves the quadratic in reverse. Price of A = reserveB ÷ (reserveA + reserveB), so the two sides always sum to $1. Math rounds in the pool's favour; every trade carries a slippage guard.

04
COMPLETE SETS
ERC-1155

1 USDG locks into the market and mints one complete set: 1 share of A + 1 share of B, as ERC-1155 tokens. A set can be merged back into exactly 1 USDG at any time, in any market state. Total sets outstanding always equals the supply of either side, and the contract can never hold less collateral than sets plus fees.

05
OPEN
LIQUIDITY

Anyone can LP. Adding liquidity mints sets into the pool and hands back the over-weighted side so the price doesn't move, then issues LP tokens for the position. Remove any time for a pro-rata slice of both reserves. After settlement, redeem what comes out. A 1% protocol fee is charged on every buy and sell.

06
IMMUTABLE.
PERMISSIONLESS.

Each market is its own contract, deployed once with no upgrade path and no admin trading, pricing or resolution functions. open(), resolve() and cancel() can be called by anyone; a keeper bot calls them so nobody has to. The single admin hook cancels a market before it opens and refunds every set in full. No key can pick a winner, move collateral or pause a live market.

Chain
Robinhood Chain
Collateral
USDG
Oracle
Chainlink Data Feeds
Shares
ERC-1155
Curve
x · y = k
Fee
1% per trade
Pricing math
reserveA × reserveB = k

priceA = reserveB / (reserveA + reserveB)
priceB = reserveA / (reserveA + reserveB)
priceA + priceB = 1

buy A with c USDG:
  fee  = 1% of c;  net = c − fee
  mint net sets → reserveA += net, reserveB += net
  send out sharesA such that
  (reserveA − sharesA) × reserveB ≥ k

Buying one side makes it scarcer in the pool and pushes its price up. Selling pushes it down. The pool never needs a counterparty and can never go short: it only ever pays out shares it holds.

How it works — VS