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 and timeframe; the Pull-only Receiver path is fixed by the protocol.
Why would you create a market?#
Creating a market lets you be first to open a prediction window on an upcoming event and earn the configured creator share of taker fees. The shipped default is 5%; see fee defaults.
<!-- src: program/src/logic/fee.rs:168 FeeSplit4::TARGET.creator_bps --> <!-- F-01: update with builder fee allocation -->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 | Fixed Pull-only Receiver path; not a market setting. | Pyth Pull |
| Capacity | How many distinct traders the market can hold. | Small, Standard (default), Large |
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 integration: Pull-only#
Pull is the sole oracle flow: the protocol fetches the exact boundary update through the Pyth Solana Receiver. For 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. Pick on the depth you expect, not on cost: Small suits markets you expect to stay thin, Standard is the default and the safe choice for anything you expect to trade, and Large is for feeds you expect to saturate a 512-order book. You cannot change capacity after creation.
The create-market screen shows the exact rent for the tier you pick, read live from the network — don't rely on a figure quoted anywhere else. Rent is roughly 0.07 SOL for Small and 0.5 SOL for Standard today, and a pending Solana upgrade cuts every rent figure by about ten times. 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 the required
EnsureTraderLedgerSpace and EnsureDeepOrderbookSpace 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 the configured creator share of the taker fee, which accrues inside the market account until you claim it. The shipped default allocates 5% to the creator and 40% to eligible makers. These percentages apply to the fee, not the trade's value.
<!-- src: program/src/logic/fee.rs:168 FeeSplit4::TARGET -->fee_bps(price) = min(fee_cap_bps, floor(decay_rate_bps × (10000 − price) / 10000))
With the shipped fee curve and creator share, these are illustrative earnings for the stated trade notional. Actual fees use the current config and integer rounding; they are not an earnings forecast.
<!-- src: program/src/logic/fee.rs:70 DEFAULT_FEE_CAP_BPS --> <!-- src: program/src/logic/fee.rs:96 DEFAULT_DECAY_RATE_BPS --> <!-- src: program/src/logic/fee.rs:168 FeeSplit4::TARGET.creator_bps -->| Trade size | At 50% (coin flip) | At 90% (high confidence) |
|---|---|---|
| $100 | $0.10 | $0.02 |
| $1,000 | $1.00 | $0.20 |
| $10,000 | $10.00 | $2.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.
- Use the fixed Pull-only oracle path.
- Choose capacity. Standard is preselected; drop to Small only for a market you expect to stay thin.
- 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 and asset are immutable once the market is created; the Pull-only oracle path is fixed protocol behavior, not a market parameter.
- 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 the creator and maker allocations
- 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 — the Pull-only Receiver flow
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) |