Mechanics
How settlement works
The short version: your stake sits in the market's own contract, the winning side splits the pot, and nobody — including us — can move the pools.
Parimutuel, not shares
There is no house and no liquidity provider. Yes bets go into a Yes pool, No bets into a No pool. When the market resolves, the losing pool is handed to the winners in proportion to their stake, minus the protocol fee.
payout = stake + (losingPool − fee) × stake ÷ winningPool
The consequence worth understanding: the price you see is the current implied probability, not a locked-in share price. If more money joins your side before close, your share of the pot shrinks. A winner always gets at least their stake back.
The fee only touches the losing pool
The protocol fee is taken from the losing pool at resolution and swept to the Treasury. It is snapshotted when the market is created and capped at 5%, so it can never be raised on a market that is already taking bets.
Resolution runs on a public clock
A bonded proposer picks the outcome after the market's stated settlement time. That opens a 24-hour dispute window in which anyone can post a bond and challenge it. With no dispute, anyone can finalise. With a dispute, it escalates to the admin multisig, which can also declare the market invalid.
Be clear about the trust here: the resolver picks a side, and nothing else. It cannot touch the pools, cannot act before the stated time, cannot act without a public delay, and cannot change an outcome once finalised.
Your money is never trapped
An invalid outcome refunds every stake in full. If a market gets no resolution at all within 30 days of its settlement time, anyone can call forceInvalid() and unlock those refunds. Pausing a market stops new bets only — claims can never be paused.
If nobody took the other side, the market resolves invalid and everyone is refunded, because there is no counterparty to pay from.
Global markets, and who runs them
The Global tab is powered by Polymarket. Every global market, price, order book and resolution is Polymarket's own: orders placed here are routed to Polymarket's central limit order book on Polygon, and markets resolve exactly as Polymarket resolves them.
Signing in gives your wallet its own Polymarket deposit wallet. Oddsy's server holds the key that signs for it, so global balances are custodial while they sit there. Deposits of ETH or USDG from Robinhood Chain go through Polymarket's bridge and arrive as pUSD, its dollar collateral; withdrawals go back the same way, only ever to the address you signed in with.
Polymarket is not available everywhere. Before routing an order we ask Polymarket's own location check; where it only allows closing positions, you can still sell and withdraw. Local markets are separate: they live entirely in Oddsy's own contracts on Robinhood Chain.
Where a question comes from
Markets carry a provenance string on-chain, sourceRef. It is empty for a question native to Robinhood Chain, and polymarket:0x<conditionId> for a global market, which mirrors the wording of a Polymarket question of that condition id. Anyone can read that field off the market contract and check it against Polymarket's own API.
What is mirrored is the wording, nothing else. Your stake goes into this market's own parimutuel pools in ETH. None of Polymarket's liquidity is involved, their price does not settle anything here, and the two books can disagree — the market page shows the reference price and the spread precisely so you can see when they do.
A mirrored market's resolution rule points at that on-chain condition id rather than at a name in prose, so the settlement criteria stay unambiguous even if a venue rebrands. If the referenced market is voided, or has not resolved by this market's settlement deadline, this market resolves Invalid and every stake is refunded.
The venue is named here and in the contract, not in the interface chrome. That is a branding choice, not a hidden one: nothing about the provenance is unavailable to you.
What lives where
Money and positions are on-chain, read from the contracts every time. Your watchlist and display preferences are the only things kept in this browser. There is no simulated tape: every fill in the activity feed is a real transaction.