Skip to main content

Instructions Reference

Complete reference for all Seesaw protocol instructions.

Instruction Overview

Instruction Discriminators

#InstructionDiscriminator
0initialize_config0x00
1create_market0x01
2snapshot_start0x02
3snapshot_end0x03
4place_order0x04
5cancel_order0x05
6resolve_market0x06
7settle_position0x07
8close_market0x08
9force_close0x09

initialize_config

One-time protocol initialization.

Accounts

#AccountSignerWritableDescription
0config-WConfig PDA
1authoritySWInitial admin
2treasury--Fee recipient
3default_settlement_mint--USDC mint
4system_program--System Program

Arguments

FieldTypeDescription
taker_fee_bpsu16Taker fee (max 500)
maker_rebate_bpsu16Maker rebate (<= taker)
crank_reward_lamportsu64SOL per crank
tick_size_bpsu16Price tick size

Compute Units

~5,000 CU

create_market

Create a new market for an epoch.

Accounts

#AccountSignerWritableDescription
0market-WMarket PDA
1orderbook-WOrderbook PDA
2vault-WVault PDA
3config--Protocol config
4pyth_feed--Pyth price feed
5settlement_mint--USDC mint
6payerSWRent payer
7system_program--System Program
8token_program--SPL Token

Arguments

FieldTypeDescription
market_idu64Epoch ID

Compute Units

~25,000 CU

snapshot_start

Capture opening price from Pyth.

Accounts

#AccountSignerWritableDescription
0market-WMarket PDA
1pyth_feed--Pyth price feed
2crankerSWCrank operator
3config--Protocol config
4treasury-WCrank reward source
5system_program--System Program

Arguments

None.

Compute Units

~8,000 CU

Idempotency

Returns success if already captured (no-op).

snapshot_end

Capture closing price from Pyth.

Accounts

Same as snapshot_start.

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

#AccountSignerWritableDescription
0market-WMarket PDA
1orderbook-WOrderbook PDA
2position-WUser position PDA
3user_token_account-WUser's USDC
4vault-WMarket vault
5userS-Order owner
6config--Protocol config
7treasury_token_account-WFee recipient
8token_program--SPL Token
9system_program--System Program

Arguments

FieldTypeDescription
sideu80=BuyYes, 1=SellYes, 2=BuyNo, 3=SellNo
price_bpsu16Limit price [1, 9999]
quantityu64Share quantity
order_typeu80=Limit, 1=PostOnly, 2=IOC

Compute Units

~15,000 - 50,000 CU (depends on matching)

cancel_order

Remove an open order.

Accounts

#AccountSignerWritableDescription
0market-WMarket PDA
1orderbook-WOrderbook PDA
2position-WUser position PDA
3user_token_account-WUser's USDC
4vault-WMarket vault
5userS-Order owner
6token_program--SPL Token

Arguments

FieldTypeDescription
order_idu64Order to cancel

Compute Units

~8,000 CU

resolve_market

Determine outcome from snapshots.

Accounts

#AccountSignerWritableDescription
0market-WMarket PDA
1crankerSWCrank operator
2config--Protocol config
3treasury-WCrank reward source
4system_program--System Program

Arguments

None.

Compute Units

~6,000 CU

Resolution Logic

if end_price >= start_price:
    outcome = UP (1)
else:
    outcome = DOWN (2)

settle_position

Distribute winnings to a user.

Accounts

#AccountSignerWritableDescription
0market-WMarket PDA
1position-WPosition to settle
2user_token_account-WUser's USDC
3vault-WMarket vault
4user--Position owner
5crankerSWCrank operator
6config--Protocol config
7treasury-WCrank reward source
8token_program--SPL Token

Arguments

None.

Compute Units

~10,000 CU

Payout Calculation

if outcome == UP:
    payout = yes_shares
else:
    payout = no_shares

close_market

Reclaim rent after settlement.

Accounts

#AccountSignerWritableDescription
0market-WMarket (closed)
1orderbook-WOrderbook (closed)
2vault-WVault (closed)
3vault_authority--Vault authority
4rent_recipient-WReceives rent
5crankerSWCrank operator
6config--Protocol config
7treasury-WCrank reward source
8token_program--SPL Token
9system_program--System Program

Arguments

None.

Compute Units

~12,000 CU

Prerequisites

  • All positions settled
  • Vault empty
  • Orderbook empty

force_close

Emergency close expired market.

Accounts

Same as close_market, plus:

#AccountSignerWritableDescription
10user_position-WPosition to refund
11user_token_account-WRefund destination

Arguments

None.

Compute Units

~15,000 CU per position

Prerequisites

current_time >= t_end + 604800 (7 days)

State Transitions

Error Codes

CodeNameDescription
0x1001E_MARKET_NOT_FOUNDMarket doesn't exist
0x1002E_MARKET_EXISTSMarket already exists
0x1003E_INVALID_STATEWrong state for operation
0x1004E_TRADING_NOT_STARTEDTrading hasn't begun
0x1005E_TRADING_ENDEDTrading period over
0x1006E_ALREADY_SNAPSHOTTEDSnapshot exists
0x1007E_ALREADY_RESOLVEDAlready resolved
0x1008E_MARKET_NOT_RESOLVEDNot yet resolved
0x100EE_NOT_OWNERNot order owner
0x2004E_STALE_ORACLEOracle price too old
0x2005E_INVALID_PRICEInvalid oracle price

Next Steps

  • See PDAs for address derivation
  • Review Security for security model