Stable fees (#209)

This commit is contained in:
Armani Ferrante 2022-01-10 12:14:36 -05:00 committed by GitHub
parent b96737fcda
commit be86566da3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 8 deletions

2
dex/Cargo.lock generated
View File

@ -982,7 +982,7 @@ dependencies = [
[[package]]
name = "serum_dex"
version = "0.5.1"
version = "0.5.2"
dependencies = [
"arbitrary",
"arrayref",

View File

@ -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),
}
}

View File

@ -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 {

View File

@ -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 {