How a market is decided

Fairness & settlement

No bookmaker and no admin picks the winner. The contract takes the first feed price after each deadline and can prove it; anyone can trigger it.
01OpenRounds, rivalries and targets follow a fixed public schedule. The first bet on a slot opens it on-chain (and earns its 1% creator fee); the same slot always maps to the same market.
02BetStakes go into the side's pool until the lock time. No bets after it, so nobody can bet once the opening price is known.
03LockAfter the lock time, anyone can submit a feed round. The contract checks it is the first round published at or after the deadline: its own timestamp is later, and the round before it is earlier.
04SettleAfter the end time, the same proof picks the closing price. Lock and settle can happen in one call, so a market resolves even if nobody touched it in between.
05ClaimWinners settle and collect in a single transaction, or claim later. Ties, one-sided pools, and markets the oracle never priced are void and refund every stake in full.

The payout math

Pari-mutuel: there is no bookmaker taking the other side. The winning side splits both pools in proportion to stake, after fees. Fees are 2% of the pot to the protocol, plus 1% to the player who opened the duel, and never more than the losing pool, so backing the winner never returns less than your stake.

Example · NVDA vs AMD, player-made

Pool on NVDA600 USDG
Pool on AMD400 USDG
Pot1,000 USDG
Fees (2% + 1%)−30 USDG
NVDA wins: paid to NVDA backers970 USDG
Your 60 on NVDA returns60 × 970 / 600 = 97.0 (1.62x)
If AMD had won, 40 on AMD returns40 × 970 / 400 = 97.0 (2.43x)

Who holds what

Admin (deployer wallet)

CanList assets and their feeds, set fees (capped at 10% combined) and limits, pause new markets and bets, name operators.

CannotMove stakes, pick a winner, or block claims and refunds. Each market copies its feeds when it opens, so swapping a feed later can’t reach it.

Keeper (operator, optional)

CanSettle due markets so players find them final, and push a price into a relay feed when a deadline needs one. It can also pre-open the schedule without a seed and with no creator fee.

CannotSettle with a price other than the first round after the deadline. Anyone can settle; if the keeper is down, players settle their own markets when they claim.

Price feeds

CanTessera's relay feeds (AggregatorV3 interface), fed from Yahoo Finance and Coinbase when a deadline needs a price. This is a trust assumption: you rely on the operator to publish honest prices. Every price stays on-chain to audit. Chainlink's own Robinhood Chain feeds update too rarely for 5-minute rounds; Chainlink Data Streams is the planned replacement.

CannotRewrite history: every round is stored, so a settlement can always be re-checked.

Contracts

Robinhood Chain · chain id 4663
TesseraMarkets, pools, settlement, claims0x9c24779b7c9d5015aa6008601d09669f82819c27 ↗
Global Dollar (USDG)6-decimal dollar stablecoin by Paxos, the stake token0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 ↗
FeedBatcherPushes all relay prices in one transaction0xb8bd098201b22cbd636feafef67779cf4d84e304 ↗

On-chain proof

Deployed, and you can check it

Every contract and the transaction that created it, on both networks. Deployer, admin and treasury: 0x6C079ff20B77fBbc89Fb5C90c5f43Cf24166d7D4.

MAINNETGET STARTED