Skip to content

Commit

Permalink
fix swap unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
borngraced committed Jan 14, 2025
1 parent 9059f93 commit 450ced6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
4 changes: 2 additions & 2 deletions mm2src/mm2_main/src/lp_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,7 @@ fn dex_fee_rate(base: &str, rel: &str) -> MmNumber {
} else {
&["KMD"]
};

if fee_discount_tickers.contains(&base) || fee_discount_tickers.contains(&rel) {
// 1/777 - 10%
BigRational::new(9.into(), 7770.into()).into()
Expand All @@ -816,7 +817,6 @@ pub fn dex_fee_amount(base: &str, rel: &str, trade_amount: &MmNumber, min_tx_amo

let rate = dex_fee_rate(base, rel);
let fee = trade_amount * &rate;

if &fee <= min_tx_amount {
return DexFee::Standard(min_tx_amount.clone());
}
Expand Down Expand Up @@ -2418,7 +2418,7 @@ mod lp_swap_tests {
};

let testcoin = coins::TestCoin::default();
q let testcoin_taker_fee = match dex_fee_amount_from_taker_coin(&testcoin, "", &MmNumber::from(6150)) {
let testcoin_taker_fee = match dex_fee_amount_from_taker_coin(&testcoin, "", &MmNumber::from(6150)) {
DexFee::Standard(t) => t,
DexFee::WithBurn { .. } | DexFee::Zero => {
panic!("Wrong variant returned for TEST coin from `dex_fee_amount_from_taker_coin`.")
Expand Down
27 changes: 19 additions & 8 deletions mm2src/mm2_main/src/lp_swap/taker_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2735,12 +2735,16 @@ pub fn max_taker_vol_from_available(
rel: &str,
min_tx_amount: &MmNumber,
) -> Result<MmNumber, MmError<MaxTakerVolumeLessThanDust>> {
let dex_fee_rate = dex_fee_rate(base, rel);
let threshold_coef = &(&MmNumber::from(1) + &dex_fee_rate) / &dex_fee_rate;
let max_vol = if available > min_tx_amount * &threshold_coef {
available / (MmNumber::from(1) + dex_fee_rate)
} else {
let max_vol = if base == "KMD" || rel == "KMD" {
&available - min_tx_amount
} else {
let dex_fee_rate = dex_fee_rate(base, rel);
let threshold_coef = &(&MmNumber::from(1) + &dex_fee_rate) / &dex_fee_rate;
if available > min_tx_amount * &threshold_coef {
available / (MmNumber::from(1) + dex_fee_rate)
} else {
&available - min_tx_amount
}
};

if &max_vol <= min_tx_amount {
Expand Down Expand Up @@ -3162,6 +3166,7 @@ mod taker_swap_tests {
let min_tx_amount = MmNumber::from("0.00001");

// For these `availables` the dex_fee must be greater than min_tx_amount
// For these `availables` the dex_fee must be lesser than min_tx_amount
let source = vec![
("0.00779", false),
("0.01", false),
Expand All @@ -3186,7 +3191,8 @@ mod taker_swap_tests {
assert_eq!(max_taker_vol + dex_fee, available);
}

// for these `availables` the dex_fee must be the same as min_tx_amount
// KMD pairs: for these `availables` the dex_fee must be 0
// Non KMD pairs: for these `availables` the dex_fee must be the same as min_tx_amount
let source = vec![
("0.00863333333333333333333333333333333333333333333333332", true),
("0.00863333333333333333333333333333333333333333333333331", true),
Expand All @@ -3207,9 +3213,14 @@ mod taker_swap_tests {
max_taker_vol.to_decimal(),
dex_fee.to_decimal()
);
assert_eq!(min_tx_amount, dex_fee);
assert!(min_tx_amount <= max_taker_vol);
assert_eq!(max_taker_vol + dex_fee, available);
if is_kmd {
assert_eq!(MmNumber::default(), dex_fee);
assert_eq!(&max_taker_vol + &min_tx_amount, available);
} else {
assert!(min_tx_amount <= max_taker_vol);
assert_eq!(max_taker_vol + dex_fee, available);
}
}

// these `availables` must return an error
Expand Down

0 comments on commit 450ced6

Please sign in to comment.