phoenix-common 0.4.0

On-chain order book that atomically settles trades
Documentation
use crate::quantities::{BaseLots, QuoteLots};
use bytemuck::{Pod, Zeroable};

#[repr(C)]
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Zeroable, Pod)]
pub struct TraderState {
    pub quote_lots_locked: QuoteLots,
    pub quote_lots_free: QuoteLots,
    pub base_lots_locked: BaseLots,
    pub base_lots_free: BaseLots,
    _padding: [u64; 8],
}

impl TraderState {
    #[inline(always)]
    pub(crate) fn unlock_quote_lots(&mut self, quote_lots: QuoteLots) {
        self.quote_lots_locked -= quote_lots;
        self.quote_lots_free += quote_lots;
    }

    #[inline(always)]
    pub(crate) fn unlock_base_lots(&mut self, base_lots: BaseLots) {
        self.base_lots_locked -= base_lots;
        self.base_lots_free += base_lots;
    }

    #[inline(always)]
    pub(crate) fn process_limit_sell(
        &mut self,
        base_lots_removed: BaseLots,
        quote_lots_received: QuoteLots,
    ) {
        self.base_lots_locked -= base_lots_removed;
        self.quote_lots_free += quote_lots_received;
    }

    #[inline(always)]
    pub(crate) fn process_limit_buy(
        &mut self,
        quote_lots_removed: QuoteLots,
        base_lots_received: BaseLots,
    ) {
        self.quote_lots_locked -= quote_lots_removed;
        self.base_lots_free += base_lots_received;
    }

    #[inline(always)]
    pub(crate) fn lock_quote_lots(&mut self, quote_lots: QuoteLots) {
        self.quote_lots_locked += quote_lots;
    }

    #[inline(always)]
    pub(crate) fn lock_base_lots(&mut self, base_lots: BaseLots) {
        self.base_lots_locked += base_lots;
    }

    #[inline(always)]
    pub(crate) fn use_free_quote_lots(&mut self, quote_lots: QuoteLots) {
        self.quote_lots_free -= quote_lots;
    }

    #[inline(always)]
    pub(crate) fn use_free_base_lots(&mut self, base_lots: BaseLots) {
        self.base_lots_free -= base_lots;
    }

    #[inline(always)]
    pub(crate) fn deposit_free_quote_lots(&mut self, quote_lots: QuoteLots) {
        self.quote_lots_free += quote_lots;
    }

    #[inline(always)]
    pub(crate) fn deposit_free_base_lots(&mut self, base_lots: BaseLots) {
        self.base_lots_free += base_lots;
    }
}