Skip to content

Commit ac4ad65

Browse files
committed
Don't force the taker to send all amount they offered in the Buy action
1 parent e19e1c5 commit ac4ad65

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

mm2src/mm2_main/src/lp_ordermatch.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,16 +2096,17 @@ impl MakerOrder {
20962096
return OrderMatchResult::NotMatched;
20972097
}
20982098

2099+
let result_rel_amount = taker_base_amount * &self.price;
2100+
20992101
if is_legacy {
21002102
// Legacy mode: use maker's price to calculate rel amount
2101-
OrderMatchResult::Matched((taker_base_amount.clone(), taker_base_amount * &self.price))
2103+
OrderMatchResult::Matched((taker_base_amount.clone(), result_rel_amount))
21022104
} else {
21032105
// taker_rel_amount must cover the premium requested by maker
2104-
let required_rel_amount =
2105-
taker_base_amount * &self.price + self.premium.clone().unwrap_or_default();
2106+
let required_rel_amount = result_rel_amount + self.premium.clone().unwrap_or_default();
21062107
if taker_rel_amount >= &required_rel_amount {
2107-
// TPU mode: treat buy as a limit order using taker's base and rel amounts
2108-
OrderMatchResult::Matched((taker_base_amount.clone(), taker_rel_amount.clone()))
2108+
// TPU mode: treat buy as a limit order using taker's base amount and required_rel_amount
2109+
OrderMatchResult::Matched((taker_base_amount.clone(), required_rel_amount))
21092110
} else {
21102111
OrderMatchResult::NotMatched
21112112
}

0 commit comments

Comments
 (0)