For traders¶
You buy a contract. It pays $1 per unit if the asset's price at a chosen future hour falls inside a range you picked, $0 otherwise. Each contract costs between $0 and $1 (in USDC), so the price the market quotes you is the implied probability.
Two examples:
- "BTC closes between $50,000 and $80,000 at 18:00 UTC on Friday." This is a closed range. If the settlement price is anywhere in
[50,000, 80,000], you receive $1 per unit. - "BTC closes at or above $80,000 at 18:00 UTC on Friday." This is an open-above range. Pays $1 per unit if BTC ≥ $80,000 at that hour, $0 otherwise.
Range bounds are inclusive and snap to a per-asset tick. Maturities are always whole UTC hours.
What happens when you click "buy"¶
- The UI sends your requested range, maturity, and quantity to the orchestrator, along with your wallet address.
- The orchestrator asks every connected solver for a price. They respond within a fraction of a second.
- The lowest-priced offer comes back to your UI as a signed commitment — a time-limited (~1 minute), single-use ticket from a specific solver pledging to sell you exactly that contract at exactly that price.
- You submit a single transaction to the smart contract that includes the commitment. The contract verifies the solver's signature, transfers your premium into escrow, freezes the solver's collateral to back your payout, and mints you a position NFT.
You can only redeem a commitment that's addressed to your wallet — nobody can front-run you with it.
Where your money lives¶
While the contract is open:
- Your premium sits in the smart contract's escrow. The orchestrator and the solver cannot touch it.
- The solver's matching collateral is frozen in the same smart contract — also untouchable while your position is open.
At settlement, the contract routes both amounts: $1 per unit to you if you won, otherwise to the solver who sold you the contract.
This is why the platform is non-custodial: the only entity that can move funds is the smart contract itself, and it only does so under the rules above.
Selling back early¶
You can close a position before maturity by selling it back. The orchestrator runs a new quote request — usually including the original solver, who is often the best counterparty because closing the position releases their frozen collateral. If you accept, you submit a buyback transaction; you receive the buyback price, your units are burned (or transferred to a new solver, depending on the winner), and you're done.
If no one quotes a buyback you find acceptable, you just hold the position to maturity. There's no penalty for that.
Settlement¶
After your maturity hour passes:
- Anyone — including you — calls
recordPriceon the Pyth settlement oracle, submitting a signed price update for that hour. There's no admin step; this is fully permissionless. In practice the team runs a relayer that does this automatically. - Once the hour's price is recorded, anyone can call
settleon your position. The contract reads the price live from the oracle, pays out, and burns your NFT. Settlement callers earn a small ETH bounty from a pool funded by tiny per-buy fees.
You don't have to wait for anyone in particular. If you're the first to settle, you collect the bounty too.
What if nobody settles?¶
A graceful-shutdown mechanism guarantees you get something back even if the orchestrator, the team, and every other actor disappear:
- After a 7-day grace period from maturity, if no settlement price has been recorded, anyone can call
emergencyCancelon your position. - This refunds your original premium in full and releases the solver's collateral back to them.
You always get your money back — either as the $1 payout (if you won), $0 (if you lost and the price was recorded), or your original premium (if the oracle failed entirely).
What it costs¶
| Item | What it is |
|---|---|
| The quoted price | The premium you pay per unit (between $0 and $1, USDC). Nothing on top. |
| Open fee | A small fixed amount of ETH attached to each buy() transaction. Funds the settlement bounty pool — not protocol revenue. |
| Gas | Standard L1/L2 network fee for submitting the transaction. |
No protocol fee on the trade itself.
Where you can look at your positions¶
- The UI shows your live and historical positions.
- Under the hood it reads from the API service (
/positions?owner=<address>). You can query that endpoint directly if you want to integrate with portfolio trackers or build your own view. - Everything is on-chain — positions are ERC-1155 tokens, transfers and settlements are events — so any block explorer is a fallback.
Trust at a glance¶
- The orchestrator can be censored / go down. You can still hold positions to maturity and settle them directly against the smart contract.
- A solver can go down. Their frozen collateral remains in the contract and pays out at settlement regardless of whether the solver is online.
- The team can't move your money. The contract has no admin function that would let anyone touch escrowed premium or frozen collateral.
See Protocol reference for the full trust model.
Next steps
- Browse the Glossary if any of the terms above were unfamiliar.
- Read the Protocol reference for the formal model.
- If you're integrating programmatically, jump to For integrators.