Skip to content

Commit

Permalink
program: relax oracle guardrail validity check for init margin calc f…
Browse files Browse the repository at this point in the history
…or positive pnl (#876)

* bigz/margin-calc-oracle-validity-check-liability

* tweak

* CHANGELOG

---------

Co-authored-by: Chris Heaney <[email protected]>
  • Loading branch information
0xbigz and crispheaney committed Feb 15, 2024
1 parent a999dbb commit 26d2170
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Features

- program: relax oracle guardrail validity check for init margin calc for positive pnl ([#876](https://github.com/drift-labs/protocol-v2/pull/876))
- program: add more max spread baselines ([#858](https://github.com/drift-labs/protocol-v2/pull/858))

### Fixes
Expand Down
18 changes: 11 additions & 7 deletions programs/drift/src/math/margin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -448,11 +448,6 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
market.amm.historical_oracle_data.last_oracle_price_twap,
)?;

calculation.update_all_oracles_valid(is_oracle_valid_for_action(
oracle_validity,
Some(DriftAction::MarginCalc),
)?);

let (
perp_margin_requirement,
weighted_pnl,
Expand Down Expand Up @@ -480,14 +475,23 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(

calculation.add_total_collateral(weighted_pnl)?;

if market_position.base_asset_amount != 0
let has_perp_liability = market_position.base_asset_amount != 0
|| market_position.quote_asset_amount < 0
|| market_position.has_open_order()
{
|| market_position.is_lp();

if has_perp_liability {
calculation.add_perp_liability()?;
calculation
.update_with_isolated_liability(market.contract_tier == ContractTier::Isolated);
}

if has_perp_liability || calculation.context.margin_type != MarginRequirementType::Initial {
calculation.update_all_oracles_valid(is_oracle_valid_for_action(
oracle_validity,
Some(DriftAction::MarginCalc),
)?);
}
}

calculation.validate_num_spot_liabilities()?;
Expand Down

0 comments on commit 26d2170

Please sign in to comment.