Creating Your Own Market#
Anyone can create a Seesaw market. You don't need permission, you don't need to operate the protocol, and you don't need to write any code. You pick the asset, the timeframe, and optionally the oracle mode. Seesaw handles the rest.
Why would you create a market?#
Creating a market lets you be first to open a prediction window on an upcoming event and earn 10% of every taker fee automatically — no operation required once the market is live. The duration you choose (from 60 seconds to 7 days) sets the character of the market: short windows feel like a coin flip; longer ones attract real directional bets.
What you set when you create one#
| Field | What it means | Example |
|---|---|---|
| Asset | Which price feed the market tracks. Must be a supported Pyth feed. | SOL/USD, BTC/USD, ETH/USD |
| Duration | How long the market is open before resolving. | 60 s, 5 min, 15 min, 1 hr, 1 day, 7 days |
| Oracle mode | Push (default) or Pull. Affects how the price is captured. | Push |
| Capacity | How many distinct traders the market can hold. | Small (128), Standard, Large, Max |
The start time is set automatically by the protocol the moment your market goes live — it's the current epoch boundary for the duration you chose. You don't pick the outcome either; the Pyth price feed does.
Duration choices#
Markets can run from 60 seconds to 7 days. Shorter durations (60 s, 5 min) feel more like a coin flip; longer ones (1 day, 7 days) attract traders who want a real directional call. Multiple markets for the same asset can exist simultaneously with different durations — they don't interfere. For the timing formula see How It Works.
Oracle mode: push vs pull#
Push (default): the protocol reads from a permanent Pyth feed account on-chain — simple, no extra infrastructure needed. Pull: the crank fetches the exact first post-boundary price from Hermes and posts it on-chain, making firstness fully deterministic. Leave it as Push unless you are building infrastructure that fetches pull prices. For full details see Oracle Integration.
Capacity and rent#
Capacity is the maximum number of distinct traders who can hold a position. You pre-pay Solana rent to cover the ledger storage — and that rent is returned to you when the market is closed after it resolves. Start with Small (~128 traders, ~0.07 SOL rent) unless you expect a busy market; you cannot change capacity after creation. For the full tier table and exact byte sizes see Market Capacity.
What it costs to create a market#
Creating a market costs a small amount of SOL to cover:
- The on-chain storage for the market account (a few cents).
- The trader-ledger space deposit (returned at teardown, amounts above).
- A lifecycle-crank reward pre-deposit — the protocol pre-funds up to 5 crank rewards (default 0.0002 SOL each = ~0.001 SOL total) so permissionless keepers can run your market's lifecycle.
There is no protocol creation fee. You don't need to seed liquidity — anyone can trade the moment it's live.
The creation prelude (handled by the SDK)#
Solana limits how much a single instruction can grow an on-chain account.
For larger capacity tiers, the SDK automatically bundles several
EnsureTraderLedgerSpace calls before the CreateMarket instruction —
you don't see or sign them separately. If you're integrating directly,
use the create_market_bundle helper:
- TypeScript:
createSeesawClient(...)→ixs.createMarketBundle(...) - Python:
create_market_bundle(params, accounts) - Rust:
create_market_bundle(params, accounts)
What you earn from your market#
For every taker trade in your market you earn 10% of the taker fee, automatically, with no action required. The fee accrues inside the market account until you claim it.
fee_bps(price) = min(200, 600 × (10000 − price) / 10000)
Your 10% cut of that fee:
| Trade size | At 50% (coin flip) | At 90% (high confidence) |
|---|---|---|
| $100 | $0.20 | $0.06 |
| $1,000 | $2.00 | $0.60 |
| $10,000 | $20.00 | $6.00 |
How to claim: open the Earnings screen, select your market, tap
Claim. The ClaimCreatorFees instruction sends accumulated USDT to
your wallet. You can claim any time, even before the market resolves.
The teardown sweep — read this#
After a market resolves, traders have 7 days to claim their winnings. After 7 days the market becomes eligible for teardown. Here is what happens to your market's remaining funds:
- The
CloseMarketteardown sweeps vault dust and any abandoned, unclaimed funds to you as the market creator. - Rounding dust is unavoidable and legitimate. Abandoned value (traders who didn't claim in time) is also swept to you — creators cannot cause traders to abandon funds, but they are the beneficiary if traders do.
- The creator also gets back all the rent deposited at creation.
The full teardown mechanics are explained from the trader's perspective in Risks and Claiming Winnings.
Step by step#
- Open the Create Market screen. Tap + in the Markets tab.
- Pick an asset. Choose from the supported Pyth price feeds.
- Pick a duration. A short window (60 s, 15 min) resolves fast and trades like a coin flip. A long window (1 day, 7 days) is more of a directional forecast.
- Choose oracle mode. Leave it as Push unless you're building infrastructure that fetches pull prices from Hermes.
- Choose capacity. Start Small; upgrade via a new market if needed.
- Confirm. Sign the transaction. A few seconds later your market is live and anyone can trade.
- Share the link. Every market has a shareable URL — more trading means more earnings.
- Claim earnings whenever you want from the Earnings screen.
A few honest things to know#
- Your market needs traders. Zero trading = zero fees. Pick events people care about and share the link.
- You cannot change the outcome. The Pyth oracle decides. You're providing the venue, not the resolution.
- You cannot change market parameters after creation. Duration, asset, and oracle mode are immutable once the market is created.
- Duplicate markets exist. If several markets cover the same asset and window, users should prefer the canonical market the app surfaces.
- You can trade in your own market. Self-trade prevention means your own orders skip each other, but you can match against other traders.
- You're not on the hook if traders lose. Creators don't put up capital.
After your market resolves#
- The protocol captures the closing price from Pyth automatically.
- It compares to the opening price (also from Pyth).
- YES wins if end price ≥ start price; NO wins if end price < start price.
- Traders claim their winnings via the app's Claim button.
- You collect creator fees at any time via the Earnings screen.
- After 7 days, the market becomes eligible for teardown and you get back your rent plus any remaining vault funds.
Next steps#
- Referrals and Fees — the full fee model, including your 10% creator slice
- Placing Orders — order book mechanics if you also want to trade in your own market
- Risks — what can go wrong, written honestly
- How the oracle works — push vs pull in detail
Technical reference#
| Mechanism | Instruction |
|---|---|
| Allocate ledger space (prelude) | EnsureTraderLedgerSpace (0x2E) |
| Create market + capture start price | CreateMarket (0x03) |
| Capture end price | SnapshotEnd (0x04) |
| Resolve outcome | ResolveMarket (0x05) |
| Oracle-outage fallback | ExpireMarket (0x06) |
| Claim creator fees | ClaimCreatorFees (0x23) |
| Permissionless owner-paying sweep | MarkPositionSettled (0x1C) |
| Market teardown + creator sweep | CloseMarket (0x1E) |