Stable fees (#209)
This commit is contained in:
parent
b96737fcda
commit
be86566da3
|
@ -982,7 +982,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serum_dex"
|
||||
version = "0.5.1"
|
||||
version = "0.5.2"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
"arrayref",
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||
use solana_program::pubkey::Pubkey;
|
||||
use std::convert::TryInto;
|
||||
|
||||
#[cfg(test)]
|
||||
use proptest_derive::Arbitrary;
|
||||
|
||||
mod stable_markets {
|
||||
pub mod usdt_usdc {
|
||||
solana_program::declare_id!("77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS");
|
||||
}
|
||||
pub mod msol_sol {
|
||||
solana_program::declare_id!("5cLrMai1DsLRYc1Nio9qMTicsWtvzjzZfJPXyAoF4t1Z");
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, IntoPrimitive, TryFromPrimitive, Debug)]
|
||||
#[cfg_attr(test, derive(Arbitrary))]
|
||||
#[repr(u8)]
|
||||
|
@ -15,6 +25,7 @@ pub enum FeeTier {
|
|||
SRM5,
|
||||
SRM6,
|
||||
MSRM,
|
||||
Stable,
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
|
@ -67,8 +78,13 @@ const fn rebate_tenth_of_bps(tenth_of_bps: u64) -> U64F64 {
|
|||
|
||||
impl FeeTier {
|
||||
#[inline]
|
||||
pub fn from_srm_and_msrm_balances(srm_held: u64, msrm_held: u64) -> FeeTier {
|
||||
pub fn from_srm_and_msrm_balances(market: &Pubkey, srm_held: u64, msrm_held: u64) -> FeeTier {
|
||||
let one_srm = 1_000_000;
|
||||
|
||||
if market == &stable_markets::usdt_usdc::ID || market == &stable_markets::msol_sol::ID {
|
||||
return FeeTier::Stable;
|
||||
}
|
||||
|
||||
match () {
|
||||
() if msrm_held >= 1 => FeeTier::MSRM,
|
||||
() if srm_held >= one_srm * 1_000_000 => FeeTier::SRM6,
|
||||
|
@ -95,6 +111,7 @@ impl FeeTier {
|
|||
SRM5 => fee_tenth_of_bps(34),
|
||||
SRM6 => fee_tenth_of_bps(32),
|
||||
MSRM => fee_tenth_of_bps(30),
|
||||
Stable => fee_tenth_of_bps(10),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ use proptest_derive::Arbitrary;
|
|||
use serde::{Deserialize, Serialize};
|
||||
#[cfg(feature = "program")]
|
||||
use solana_program::msg;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
|
||||
use crate::critbit::SlabTreeError;
|
||||
use crate::error::{DexErrorCode, DexResult, SourceFileId};
|
||||
|
@ -226,12 +227,9 @@ struct OrderRemaining {
|
|||
impl<'ob> OrderBookState<'ob> {
|
||||
fn new_order(
|
||||
&mut self,
|
||||
|
||||
params: NewOrderParams,
|
||||
event_q: &mut EventQueue,
|
||||
|
||||
proceeds: &mut RequestProceeds,
|
||||
|
||||
limit: &mut u16,
|
||||
) -> DexResult<Option<OrderRemaining>> {
|
||||
let NewOrderParams {
|
||||
|
|
|
@ -547,16 +547,26 @@ impl MarketState {
|
|||
bytes_of_mut(&mut aligned_data).copy_from_slice(&data[..72]);
|
||||
let (mint, owner, &[balance]) = array_refs![&aligned_data, 4, 4, 1];
|
||||
|
||||
let market_addr = self.pubkey();
|
||||
|
||||
check_assert_eq!(owner, expected_owner)?;
|
||||
if mint == &srm_token::ID.to_aligned_bytes() {
|
||||
return Ok(FeeTier::from_srm_and_msrm_balances(balance, 0));
|
||||
return Ok(FeeTier::from_srm_and_msrm_balances(
|
||||
&market_addr,
|
||||
balance,
|
||||
0,
|
||||
));
|
||||
}
|
||||
|
||||
if mint == &msrm_token::ID.to_aligned_bytes() {
|
||||
return Ok(FeeTier::from_srm_and_msrm_balances(0, balance));
|
||||
return Ok(FeeTier::from_srm_and_msrm_balances(
|
||||
&market_addr,
|
||||
0,
|
||||
balance,
|
||||
));
|
||||
}
|
||||
|
||||
Ok(FeeTier::from_srm_and_msrm_balances(0, 0))
|
||||
Ok(FeeTier::from_srm_and_msrm_balances(&market_addr, 0, 0))
|
||||
}
|
||||
|
||||
fn check_enabled(&self) -> DexResult {
|
||||
|
|
Loading…
Reference in New Issue