use solana_pubkey::Pubkey;
use crate::domain::market::Market;
use crate::program::error::SdkError;
use crate::program::orders::OrderPayload;
use crate::shared::DepositSource;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum MarketStatus {
Pending = 0,
Active = 1,
Resolved = 2,
Cancelled = 3,
}
impl TryFrom<u8> for MarketStatus {
type Error = SdkError;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0 => Ok(MarketStatus::Pending),
1 => Ok(MarketStatus::Active),
2 => Ok(MarketStatus::Resolved),
3 => Ok(MarketStatus::Cancelled),
_ => Err(SdkError::InvalidMarketStatus(value)),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum OrderSide {
Bid = 0,
Ask = 1,
}
impl TryFrom<u8> for OrderSide {
type Error = SdkError;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0 => Ok(OrderSide::Bid),
1 => Ok(OrderSide::Ask),
_ => Err(SdkError::InvalidSide(value)),
}
}
}
#[derive(Debug, Clone)]
pub struct CreateMarketParams {
pub authority: Pubkey,
pub num_outcomes: u8,
pub oracle: Pubkey,
pub question_id: [u8; 32],
}
#[derive(Debug, Clone)]
pub struct OutcomeMetadata {
pub name: String,
pub symbol: String,
pub uri: String,
}
#[derive(Debug, Clone)]
pub struct AddDepositMintParams {
pub authority: Pubkey,
pub deposit_mint: Pubkey,
pub outcome_metadata: Vec<OutcomeMetadata>,
}
#[derive(Debug, Clone)]
pub struct BuildDepositParams {
pub user: Pubkey,
pub market: Pubkey,
pub deposit_mint: Pubkey,
pub amount: u64,
}
#[derive(Debug, Clone)]
pub struct BuildMergeParams {
pub user: Pubkey,
pub market: Pubkey,
pub deposit_mint: Pubkey,
pub amount: u64,
}
#[derive(Debug, Clone)]
pub struct SettleMarketParams {
pub oracle: Pubkey,
pub market_id: u64,
pub winning_outcome: u8,
}
#[derive(Debug, Clone)]
pub struct RedeemWinningsParams {
pub user: Pubkey,
pub market: Pubkey,
pub deposit_mint: Pubkey,
pub amount: u64,
}
#[derive(Debug, Clone)]
pub struct WithdrawFromPositionParams {
pub user: Pubkey,
pub market: Pubkey,
pub mint: Pubkey,
pub amount: u64,
pub outcome_index: u8,
}
#[derive(Debug, Clone)]
pub struct ActivateMarketParams {
pub authority: Pubkey,
pub market_id: u64,
}
#[derive(Debug, Clone)]
pub struct BidOrderParams {
pub nonce: u64,
pub salt: u64,
pub maker: Pubkey,
pub market: Pubkey,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub amount_in: u64,
pub amount_out: u64,
pub expiration: i64,
}
#[derive(Debug, Clone)]
pub struct AskOrderParams {
pub nonce: u64,
pub salt: u64,
pub maker: Pubkey,
pub market: Pubkey,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub amount_in: u64,
pub amount_out: u64,
pub expiration: i64,
}
#[derive(Debug, Clone)]
pub struct MatchOrdersMultiParams {
pub operator: Pubkey,
pub market: Pubkey,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub taker_order: OrderPayload,
pub maker_orders: Vec<OrderPayload>,
pub maker_fill_amounts: Vec<u64>,
pub taker_fill_amounts: Vec<u64>,
pub full_fill_bitmask: u8,
}
#[derive(Debug, Clone)]
pub struct CreateOrderbookParams {
pub authority: Pubkey,
pub market: Pubkey,
pub mint_a: Pubkey,
pub mint_b: Pubkey,
pub recent_slot: u64,
pub base_index: u8,
}
#[derive(Debug, Clone)]
pub struct SetAuthorityParams {
pub current_authority: Pubkey,
pub new_authority: Pubkey,
}
#[derive(Debug, Clone)]
pub struct WhitelistDepositTokenParams {
pub authority: Pubkey,
pub mint: Pubkey,
}
#[derive(Debug, Clone)]
pub struct DepositToGlobalParams {
pub user: Pubkey,
pub mint: Pubkey,
pub amount: u64,
}
#[derive(Debug, Clone)]
pub struct GlobalToMarketDepositParams {
pub user: Pubkey,
pub market: Pubkey,
pub deposit_mint: Pubkey,
pub amount: u64,
}
#[derive(Debug, Clone)]
pub struct InitPositionTokensParams {
pub payer: Pubkey,
pub user: Pubkey,
pub market: Pubkey,
pub deposit_mints: Vec<Pubkey>,
pub recent_slot: u64,
}
#[derive(Debug, Clone)]
pub struct MakerFill {
pub order: OrderPayload,
pub maker_fill_amount: u64,
pub taker_fill_amount: u64,
pub is_full_fill: bool,
pub is_deposit: bool,
pub deposit_mint: Pubkey,
}
#[derive(Debug, Clone)]
pub struct DepositAndSwapParams {
pub operator: Pubkey,
pub market: Pubkey,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub taker_order: OrderPayload,
pub taker_is_full_fill: bool,
pub taker_is_deposit: bool,
pub taker_deposit_mint: Pubkey,
pub num_outcomes: u8,
pub makers: Vec<MakerFill>,
}
#[derive(Debug, Clone)]
pub struct ExtendPositionTokensParams {
pub payer: Pubkey,
pub user: Pubkey,
pub market: Pubkey,
pub lookup_table: Pubkey,
pub deposit_mints: Vec<Pubkey>,
}
#[derive(Debug, Clone)]
pub struct WithdrawFromGlobalParams {
pub user: Pubkey,
pub mint: Pubkey,
pub amount: u64,
}
#[derive(Debug)]
pub struct DepositParams<'a> {
pub user: Pubkey,
pub mint: Pubkey,
pub amount: u64,
pub market: Option<&'a Market>,
pub deposit_source: Option<DepositSource>,
}
#[derive(Debug)]
pub struct MarketWithdrawContext<'a> {
pub market: &'a Market,
pub outcome_index: u8,
pub is_token_2022: bool,
}
#[derive(Debug)]
pub struct WithdrawParams<'a> {
pub user: Pubkey,
pub mint: Pubkey,
pub amount: u64,
pub market_context: Option<MarketWithdrawContext<'a>>,
pub deposit_source: Option<DepositSource>,
}