Instructions Reference#
Complete reference for all Seesaw protocol instructions.
Instruction Overview#
Instruction Discriminators#
| # | Instruction | Discriminator | Category |
|---|---|---|---|
| 0 | initialize_config | 0x00 | Configuration |
| 1 | create_market | 0x01 | Market Lifecycle |
| 2 | snapshot_end | 0x02 | Market Lifecycle |
| 3 | resolve_market | 0x03 | Market Lifecycle |
| 4 | expire_market | 0x04 | Market Lifecycle |
| 5 | place_order | 0x05 | Trading |
| 6 | cancel_order | 0x06 | Trading |
| 7 | mint_shares | 0x07 | Token/Settlement |
| 8 | redeem | 0x08 | Token/Settlement |
| 9 | withdraw_shares | 0x09 | Token/Settlement |
| 10 | pause | 0x0A | Admin |
| 11 | unpause | 0x0B | Admin |
| 12 | update_fees | 0x0C | Admin |
| 13 | update_tick_size | 0x0D | Admin |
| 14 | force_close | 0x0E | Token/Settlement |
| 15 | close_market | 0x0F | Market Lifecycle |
initialize_config#
One-time protocol initialization.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | config | - | W | Config PDA |
| 1 | authority | S | W | Initial admin |
| 2 | treasury | - | - | Fee recipient |
| 3 | default_settlement_mint | - | - | USDC mint |
| 4 | system_program | - | - | System Program |
Arguments#
| Field | Type | Description |
|---|---|---|
| taker_fee_bps | u16 | Taker fee (max 500) |
| maker_rebate_bps | u16 | Maker rebate (<= taker) |
| crank_reward_lamports | u64 | SOL per crank |
| tick_size_bps | u16 | Price tick size |
Compute Units#
~5,000 CU
create_market#
Create a new market for an epoch.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | orderbook | - | W | Orderbook PDA |
| 2 | vault | - | W | Vault PDA |
| 3 | config | - | - | Protocol config |
| 4 | pyth_feed | - | - | Pyth price feed |
| 5 | settlement_mint | - | - | USDC mint |
| 6 | payer | S | W | Rent payer |
| 7 | system_program | - | - | System Program |
| 8 | token_program | - | - | SPL Token |
Arguments#
| Field | Type | Description |
|---|---|---|
| market_id | u64 | Epoch ID |
Compute Units#
~25,000 CU
snapshot_end#
Capture closing price from Pyth.
Accounts#
Same accounts as create_market (market, config, pyth_feed, payer, system_program).
Arguments#
None.
Compute Units#
~15,000 CU (includes order cancellation)
Side Effects#
- All open orders are cancelled
- Collateral/shares returned to users
place_order#
Submit a limit order.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | orderbook | - | W | Orderbook PDA |
| 2 | position | - | W | User position PDA |
| 3 | user_token_account | - | W | User's USDC |
| 4 | vault | - | W | Market vault |
| 5 | user | S | - | Order owner |
| 6 | config | - | - | Protocol config |
| 7 | treasury_token_account | - | W | Fee recipient |
| 8 | token_program | - | - | SPL Token |
| 9 | system_program | - | - | System Program |
Arguments#
| Field | Type | Description |
|---|---|---|
| side | u8 | 0=BuyYes, 1=SellYes, 2=BuyNo, 3=SellNo |
| price_bps | u16 | Limit price [1, 9999] |
| quantity | u64 | Share quantity |
| order_type | u8 | 0=Limit, 1=PostOnly, 2=IOC |
Compute Units#
~15,000 - 50,000 CU (depends on matching)
cancel_order#
Remove an open order.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | orderbook | - | W | Orderbook PDA |
| 2 | position | - | W | User position PDA |
| 3 | user_token_account | - | W | User's USDC |
| 4 | vault | - | W | Market vault |
| 5 | user | S | - | Order owner |
| 6 | token_program | - | - | SPL Token |
Arguments#
| Field | Type | Description |
|---|---|---|
| order_id | u64 | Order to cancel |
Compute Units#
~8,000 CU
resolve_market#
Determine outcome from snapshots.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | cranker | S | W | Crank operator |
| 2 | config | - | - | Protocol config |
| 3 | treasury | - | W | Crank reward source |
| 4 | system_program | - | - | System Program |
Arguments#
None.
Compute Units#
~6,000 CU
Resolution Logic#
mint_shares (0x07)#
Deposit USDC to receive equal YES + NO tokens.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | yes_mint | - | W | YES token mint PDA |
| 2 | no_mint | - | W | NO token mint PDA |
| 3 | user_yes_ata | - | W | User's YES token account |
| 4 | user_no_ata | - | W | User's NO token account |
| 5 | user_usdc_ata | - | W | User's USDC account |
| 6 | vault | - | W | Market vault (USDC) |
| 7 | user | S | - | User (signer) |
| 8 | token_program | - | - | SPL Token Program |
Arguments#
| Field | Type | Description |
|---|---|---|
| amount | u64 | Amount of USDC to deposit |
Compute Units#
~15,000 CU
redeem (0x08)#
Burn winning tokens for USDC after resolution.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | yes_mint | - | W | YES token mint PDA |
| 2 | no_mint | - | W | NO token mint PDA |
| 3 | user_yes_ata | - | W | User's YES token account |
| 4 | user_no_ata | - | W | User's NO token account |
| 5 | user_usdc_ata | - | W | User's USDC account |
| 6 | vault | - | W | Market vault (USDC) |
| 7 | user | S | - | User (signer) |
| 8 | token_program | - | - | SPL Token Program |
Arguments#
| Field | Type | Description |
|---|---|---|
| amount | u64 | Amount of tokens to redeem |
| token_type | u8 | Which token to redeem (0=Yes, 1=No) |
Compute Units#
~15,000 CU
Payout Calculation#
withdraw_shares (0x09)#
Convert internal position shares to SPL tokens.
Compute Units#
~10,000 CU
force_close (0x0E)#
Force-close position in expired/unresolved market. Returns full collateral.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | position | - | W | User position PDA |
| 2 | vault | - | W | Market vault |
| 3 | user_usdc_ata | - | W | User's USDC account |
| 4 | caller | S | - | Caller (permissionless) |
| 5 | config | - | - | Protocol config |
| 6 | token_program | - | - | SPL Token Program |
| 7 | settlement_mint | - | - | Settlement token mint |
Prerequisites#
current_time > t_end + expiration_window AND outcome == 0
Compute Units#
~12,000 CU
close_market (0x0F)#
Close resolved market after 7-day timeout. Transfers rent to creator.
Accounts#
| # | Account | Signer | Writable | Description |
|---|---|---|---|---|
| 0 | market | - | W | Market PDA |
| 1 | creator | - | W | Market creator (rent target) |
| 2 | caller | S | - | Caller (permissionless) |
| 3 | config | - | - | Protocol config |
| 4 | system_program | - | - | System Program |
Prerequisites#
current_time >= resolved_at + 604800 AND outcome != 0
Compute Units#
~8,000 CU
State Transitions#
Error Codes#
| Code | Name | Description |
|---|---|---|
| 0x1001 | E_MARKET_NOT_FOUND | Market doesn't exist |
| 0x1002 | E_MARKET_EXISTS | Market already exists |
| 0x1003 | E_INVALID_STATE | Wrong state for operation |
| 0x1004 | E_TRADING_NOT_STARTED | Trading hasn't begun |
| 0x1005 | E_TRADING_ENDED | Trading period over |
| 0x1006 | E_ALREADY_SNAPSHOTTED | Snapshot exists |
| 0x1007 | E_ALREADY_RESOLVED | Already resolved |
| 0x1008 | E_MARKET_NOT_RESOLVED | Not yet resolved |
| 0x100E | E_NOT_OWNER | Not order owner |
| 0x2004 | E_STALE_ORACLE | Oracle price too old |
| 0x2005 | E_INVALID_PRICE | Invalid oracle price |