plasma-amm-sdk 0.1.0

Plasma AMM SDK
Documentation
use borsh::{BorshDeserialize, BorshSerialize};
use solana_program::{declare_id, pubkey::Pubkey};

pub use plasma_amm_state::amm;
pub use plasma_amm_state::lp;

pub mod accounts;
pub mod errors;
pub mod events;
pub mod fixed;
pub mod instructions;

declare_id!("srAMMzfVHVAtgSJc8iH6CfKzuWuUTzLHVCE81QU1rgi");

pub mod spl_token {
    use solana_program::declare_id;

    declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
}

pub fn get_vault_address(plasma_program_id: &Pubkey, pool: &Pubkey, mint: &Pubkey) -> (Pubkey, u8) {
    Pubkey::find_program_address(&[b"vault", pool.as_ref(), mint.as_ref()], plasma_program_id)
}

pub fn get_lp_position_address(
    plasma_program_id: &Pubkey,
    pool: &Pubkey,
    trader: &Pubkey,
) -> (Pubkey, u8) {
    Pubkey::find_program_address(
        &[b"lp_position", pool.as_ref(), trader.as_ref()],
        plasma_program_id,
    )
}

pub fn get_log_authority(plasma_program_id: &Pubkey) -> Pubkey {
    Pubkey::find_program_address(&[b"log"], plasma_program_id).0
}

pub type SlotWindow = u64;

#[derive(Debug, Clone, Copy, BorshDeserialize, BorshSerialize)]
pub struct SwapResult {
    pub side: amm::Side,
    pub base_amount_to_transfer: u64,
    pub quote_amount_to_transfer: u64,
    pub base_matched_as_limit_order: u64,
    pub quote_matched_as_limit_order: u64,
    pub base_matched_as_swap: u64,
    pub quote_matched_as_swap: u64,
    pub fee_in_quote: u64,
}

impl SwapResult {
    pub fn new_empty_with_side(side: amm::Side) -> Self {
        Self {
            side,
            base_amount_to_transfer: 0,
            quote_amount_to_transfer: 0,
            base_matched_as_limit_order: 0,
            quote_matched_as_limit_order: 0,
            base_matched_as_swap: 0,
            quote_matched_as_swap: 0,
            fee_in_quote: 0,
        }
    }
}