Skip to content

Commit 294426f

Browse files
committed
reorg func so its easier to read
1 parent ffe5ba7 commit 294426f

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

programs/drift/src/state/perp_market.rs

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ pub struct PerpMarket {
241241
pub padding: [u8; 24],
242242
}
243243

244-
pub fn _get_high_leverage_mode_margin_ratio(
244+
pub fn _calc_high_leverage_mode_initial_margin_ratio_from_size(
245245
pre_size_adj_margin_ratio: u32,
246246
size_adj_margin_ratio: u32,
247247
default_margin_ratio: u32,
@@ -494,38 +494,43 @@ impl PerpMarket {
494494
MarginRequirementType::Maintenance => margin_ratio_maintenance,
495495
};
496496

497-
let pre_size_adj_margin_ratio = if is_high_leverage_user {
498-
match margin_type {
497+
let margin_ratio = if is_high_leverage_user {
498+
// use HLM maintenance margin but ordinary mode initial/fill margin for size adj calculation
499+
let pre_size_adj_margin_ratio = match margin_type {
499500
MarginRequirementType::Initial => self.margin_ratio_initial,
500501
MarginRequirementType::Fill => {
501502
self.margin_ratio_initial
502503
.safe_add(self.margin_ratio_maintenance)?
503504
/ 2
504505
}
505-
MarginRequirementType::Maintenance => margin_ratio_maintenance, // use hlm maintenance to avoid changing liq prices
506-
}
507-
} else {
508-
default_margin_ratio
509-
};
506+
MarginRequirementType::Maintenance => margin_ratio_maintenance,
507+
};
510508

511-
let cap_size_premium =
512-
!is_high_leverage_user || margin_type == MarginRequirementType::Maintenance;
513-
let size_adj_margin_ratio = calculate_size_premium_liability_weight(
514-
size,
515-
self.imf_factor,
516-
pre_size_adj_margin_ratio,
517-
MARGIN_PRECISION_U128,
518-
cap_size_premium,
519-
)?;
509+
let cap_size_premium = margin_type == MarginRequirementType::Maintenance;
520510

521-
let margin_ratio = if cap_size_premium {
522-
default_margin_ratio.max(size_adj_margin_ratio)
523-
} else {
524-
_get_high_leverage_mode_margin_ratio(
511+
let size_adj_margin_ratio = calculate_size_premium_liability_weight(
512+
size,
513+
self.imf_factor,
514+
pre_size_adj_margin_ratio,
515+
MARGIN_PRECISION_U128,
516+
cap_size_premium,
517+
)?;
518+
519+
_calc_high_leverage_mode_initial_margin_ratio_from_size(
525520
pre_size_adj_margin_ratio,
526521
size_adj_margin_ratio,
527522
default_margin_ratio,
528-
)?
523+
)
524+
} else {
525+
let size_adj_margin_ratio = calculate_size_premium_liability_weight(
526+
size,
527+
self.imf_factor,
528+
default_margin_ratio,
529+
MARGIN_PRECISION_U128,
530+
true,
531+
)?;
532+
533+
Ok(default_margin_ratio.max(size_adj_margin_ratio))
529534
};
530535

531536
Ok(margin_ratio)

0 commit comments

Comments
 (0)