Placing Orders#
How to buy and sell YES/NO shares on Seesaw, and what's actually happening each time you tap Buy or Sell.
In plain English#
Tapping Buy does one of two things, depending on what's already on the book:
- Someone is offering shares at or below your price. Your order matches theirs immediately, you pay, and you walk away with shares right away. You are the taker and pay a small fee.
- Nobody is offering shares cheap enough yet. Your order sits in the waiting line ("the book") at the price you picked. This is called a resting order — it stays there, visible to everyone, until someone matches it, you cancel it, or it expires. You are the maker and pay no fee.
Tapping Sell works the same way from the opposite direction.
The three order modes#
| Mode | What it does |
|---|---|
| Limit | Try to fill as much as possible right now at your price; whatever's left rests on the book. The default. |
| Post-Only | Only rest on the book — reject the order if it would fill immediately. Useful when you specifically want the zero-fee maker side. |
| Immediate-or-Cancel (IOC) | Fill as much as possible right now; cancel the rest. Use this when you want to take liquidity and don't want a resting order left behind. |
What "resting" means#
A resting order is your standing offer sitting in the order book waiting for a match. It costs you nothing to rest there, but your collateral (for a buy) or your shares (for a sell) are locked while it rests. You can cancel any resting order at any time to unlock them instantly.
Fees, briefly#
- Maker (your order rests): no fee.
- Taker (your order matches immediately): up to 2% at coin-flip prices, sliding toward zero at very confident prices. See Referrals and Fees for the full curve.
The fill preview (slippage)#
Before you sign, the app shows a fill estimate: how many shares you'll
likely receive, the average price, the worst fill price, and the fee.
This estimate is calculated from the current live book. It's accurate but
not binding — the on-chain protection is your limit price (for Limit /
Post-Only orders) or your worst_acceptable_price_bps bound (for IOC).
See how slippage is estimated.
Tick rounding#
The order book enforces a minimum price step (tick). The default tick is 100 bps (1%). When you enter a price, the app rounds it to the nearest tick:
- Buy orders round down (you pay less than or equal to what you entered).
- Sell orders round up (you receive more than or equal to what you entered).
Both directions are conservative for you.
The maker price band#
To prevent junk orders far from the real market, resting orders must price near the book:
- Two-sided book: your order must be within ±10% (±1000 bps) of the midpoint. Example: midpoint 5500 bps → you can rest anywhere from 4500 to 6500.
- One-sided or empty book: a wider static band of 1%–99% (100–9900 bps) applies.
IOC orders are exempt — they never rest, so the band doesn't apply.
If your order lands outside the band (e.g., the mid moved while your transaction was in flight), you get an "order price out of band" error. Nothing is lost; just re-submit closer to the market.
Order TTL and expiring orders#
Every resting order can have an optional time-to-live (max_age_seconds).
If set, the order expires at placement_time + max_age_seconds (but never
after the market's end time). Expired resting orders become reclaimable:
anyone can submit a ReclaimExpiredOrder transaction that refunds the
maker's collateral or shares. The caller who reclaims a bid-side order
earns a small bounty (10 bps of the refunded stablecoin, capped at
0.1 USDT) for their trouble. Set max_age_seconds = 0 to disable the TTL.
Free-funds orders#
If you have a balance inside the trader ledger (deposited via the
"free funds" flow), you can place orders without a per-order token transfer.
These *WithFreeFunds variants work identically to the standard order
instructions — same matching, same fees — but settle against your ledger
balance. For the technical background on how the order book stores and
matches these, see Order Book.
Post-only mode and paused markets#
The protocol has two admin safety switches that affect order placement: Post-only mode forces all orders to rest (no immediate fills); Paused blocks new order placement entirely. Settlement is always available in both states — you can cancel orders, redeem, and claim. For the full scope of what these switches can and cannot do, see Risks and Order Book.
Collateral and escrow#
Selling locks your shares in an on-chain escrow PDA until the order fills or you cancel. Buying locks USDT in the market vault. Fills transfer already-locked tokens — no new minting happens at match time.
After market resolution#
Unfilled resting buy orders are not automatically refunded when the market resolves. Their locked collateral comes back only when you Claim (Redeem) within the 7-day grace window. After that window, the locked collateral can be forfeited to the market creator during teardown. See Claiming Winnings and Risks.
Technical reference#
Order types#
| Type | Behavior | Best for |
|---|---|---|
| Limit | Match what's possible, rest remainder | Most trading |
| Post-Only | Reject if would match immediately | Market making, zero-fee placement |
| Immediate-or-Cancel (IOC) | Match what's possible, cancel rest | Taking liquidity, fast exits |
Canonical conversion#
All orders are stored on a single YES book. Your intent is converted:
| Your order | Canonical form |
|---|---|
| Buy YES @ p | BID @ p |
| Sell YES @ p | ASK @ p |
| Buy NO @ q | ASK @ (10000 − q) |
| Sell NO @ q | BID @ (10000 − q) |
Buy order flow#
Collateral required = (price_bps × quantity) / 10000
Example: Buy 100 YES @ 6000 bps → 60 USDT locked.
Sell order flow#
You can only sell shares you own. No naked shorting.
Taker fee curve#
fee_bps(price) = min(fee_cap_bps, decay_rate_bps × (10000 − price) / 10000)
Defaults: fee_cap_bps = 200 (2%), decay_rate_bps = 600.
| Fill price | Taker fee |
|---|---|
| ≤ 6666 bps (≤ 66.66%) | 2.00% (cap) |
| 8000 bps (80%) | 1.20% |
| 9000 bps (90%) | 0.60% |
| 9500 bps (95%) | 0.30% |
| 9900 bps (99%) | 0.06% |
Makers pay 0. Fees round up. The fee split is 50% protocol / 10% market creator / 40% referrer; see Referrals and Fees.
Order book depth visualization#
BTC/USD 15-min market
BIDS ASKS
Price Qty Total | Price Qty Total
─────────────────────────────────────────────────
5500 1,000 1,000 | 5600 500 500 ← spread: 100 bps
5400 2,500 3,500 | 5700 1,200 1,700
5300 800 4,300 | 5800 3,000 4,700
Best bid: 5500 bps Best ask: 5600 bps Mid: 5550 bps
Price band (two-sided): [4550, 6550]
Best practices for takers#
- Check the fill preview — see slippage estimation before sizing up; the app shows average price and worst fill price.
- Use IOC with a worst-price bound — set
worst_acceptable_price_bpsfor hard on-chain slippage protection. - Split large orders — better execution across multiple price levels.
- Mind the fee curve — taker fees shrink as the price approaches 1.00; see the curve table above or Referrals and Fees.
Common errors#
| Error | Cause | What to do |
|---|---|---|
TradingNotStarted | Market not yet in TRADING state | Wait for the start snapshot |
TradingEnded | Market past t_end | Cannot trade after t_end |
InsufficientBalance | Not enough USDT | Add USDT to your wallet |
InsufficientBalance (sell) | Selling more than you own | Reduce quantity |
WouldCross | Post-Only order would have matched | Use Limit type or re-price |
OrderbookFull | 63 orders per side limit reached | Wait for orders to fill or cancel old ones |
OrderPriceOutOfBand | Price outside the maker band | Re-price closer to the market |
MarketPaused | Market in paused/post-only state | Wait for unpause; settlement still works |
Next steps#
- Managing Positions — cancelling, monitoring, P&L
- Claiming Winnings — what happens after the market resolves
- Risks — the 7-day claim deadline and other things that can go wrong
- Slippage estimation — how the fill preview works
Technical reference#
| Mechanism in this page | Instruction |
|---|---|
| Place order | PlaceOrder (0x0B) |
| Batch post-only | PlaceMultiplePostOnlyOrders (0x0C) |
| IOC with free funds | SwapWithFreeFunds (0x0D) |
| Limit with free funds | PlaceLimitOrderWithFreeFunds (0x0E) |
| Cancel order | CancelOrder (0x10) |
| Cancel all | CancelAllOrders (0x12) |
| Reclaim expired order | ReclaimExpiredOrder (0x19) |