Skip to content

Commit 5c25295

Browse files
authored
clean up oracle validity logs (#1984)
* clean up oracle validity logs * generalize log level to oracle map
1 parent 4dfd3f7 commit 5c25295

File tree

8 files changed

+44
-12
lines changed

8 files changed

+44
-12
lines changed

programs/drift/src/controller/orders.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3086,8 +3086,9 @@ pub fn trigger_order(
30863086
.historical_oracle_data
30873087
.last_oracle_price_twap,
30883088
perp_market.get_max_confidence_interval_multiplier()?,
3089-
0,
3090-
0,
3089+
perp_market.amm.oracle_slot_delay_override,
3090+
perp_market.amm.oracle_low_risk_slot_delay_override,
3091+
None,
30913092
)?;
30923093

30933094
let is_oracle_valid =
@@ -5386,6 +5387,7 @@ pub fn trigger_spot_order(
53865387
spot_market.get_max_confidence_interval_multiplier()?,
53875388
0,
53885389
0,
5390+
None,
53895391
)?;
53905392
let strict_oracle_price = StrictOraclePrice {
53915393
current: oracle_price_data.price,

programs/drift/src/controller/orders/tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,6 +2229,7 @@ pub mod fulfill_order_with_maker_order {
22292229
market.get_max_confidence_interval_multiplier().unwrap(),
22302230
0,
22312231
0,
2232+
None,
22322233
)
22332234
.unwrap();
22342235

programs/drift/src/controller/pnl.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ pub fn settle_pnl(
136136
perp_market.get_max_confidence_interval_multiplier()?,
137137
0,
138138
0,
139+
None,
139140
)?;
140141

141142
if !is_oracle_valid_for_action(oracle_validity, Some(DriftAction::SettlePnl))?

programs/drift/src/controller/repeg.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ pub fn update_amm_and_check_validity(
265265
market.get_max_confidence_interval_multiplier()?,
266266
&market.amm.oracle_source,
267267
LogMode::SafeMMOracle,
268-
0,
269-
0,
268+
market.amm.oracle_slot_delay_override,
269+
market.amm.oracle_low_risk_slot_delay_override,
270270
)?;
271271

272272
validate!(

programs/drift/src/instructions/user.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ use crate::math::margin::{
4242
};
4343
use crate::math::oracle::is_oracle_valid_for_action;
4444
use crate::math::oracle::DriftAction;
45+
use crate::math::oracle::LogMode;
4546
use crate::math::orders::calculate_existing_position_fields_for_order_action;
4647
use crate::math::orders::get_position_delta_for_fill;
4748
use crate::math::orders::is_multiple_of_step_size;
@@ -1790,6 +1791,7 @@ pub fn handle_transfer_perp_position<'c: 'info, 'info>(
17901791
perp_market.get_max_confidence_interval_multiplier()?,
17911792
perp_market.amm.oracle_slot_delay_override,
17921793
perp_market.amm.oracle_low_risk_slot_delay_override,
1794+
Some(LogMode::Margin),
17931795
)?;
17941796
step_size = perp_market.amm.order_step_size;
17951797
tick_size = perp_market.amm.order_tick_size;

programs/drift/src/math/margin.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::math::constants::{
44
MARGIN_PRECISION_U128, MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN, PERCENTAGE_PRECISION,
55
PRICE_PRECISION, SPOT_IMF_PRECISION_U128, SPOT_WEIGHT_PRECISION, SPOT_WEIGHT_PRECISION_U128,
66
};
7+
use crate::math::oracle::LogMode;
78
use crate::math::position::calculate_base_asset_value_and_pnl_with_oracle_price;
89

910
use crate::MARGIN_PRECISION;
@@ -305,6 +306,7 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
305306
spot_market.get_max_confidence_interval_multiplier()?,
306307
0,
307308
0,
309+
Some(LogMode::Margin),
308310
)?;
309311

310312
let mut skip_token_value = false;
@@ -558,6 +560,7 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
558560
quote_spot_market.get_max_confidence_interval_multiplier()?,
559561
0,
560562
0,
563+
Some(LogMode::Margin),
561564
)?;
562565

563566
let strict_quote_price = StrictOraclePrice::new(
@@ -575,8 +578,9 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
575578
&market.oracle_id(),
576579
market.amm.historical_oracle_data.last_oracle_price_twap,
577580
market.get_max_confidence_interval_multiplier()?,
578-
0,
579-
0,
581+
market.amm.oracle_slot_delay_override,
582+
market.amm.oracle_low_risk_slot_delay_override,
583+
Some(LogMode::Margin),
580584
)?;
581585

582586
let perp_position_custom_margin_ratio =
@@ -993,6 +997,7 @@ pub fn calculate_user_equity(
993997
spot_market.get_max_confidence_interval_multiplier()?,
994998
0,
995999
0,
1000+
Some(LogMode::Margin),
9961001
)?;
9971002
all_oracles_valid &=
9981003
is_oracle_valid_for_action(oracle_validity, Some(DriftAction::MarginCalc))?;
@@ -1024,6 +1029,7 @@ pub fn calculate_user_equity(
10241029
quote_spot_market.get_max_confidence_interval_multiplier()?,
10251030
0,
10261031
0,
1032+
Some(LogMode::Margin),
10271033
)?;
10281034

10291035
all_oracles_valid &=
@@ -1038,8 +1044,9 @@ pub fn calculate_user_equity(
10381044
&market.oracle_id(),
10391045
market.amm.historical_oracle_data.last_oracle_price_twap,
10401046
market.get_max_confidence_interval_multiplier()?,
1041-
0,
1042-
0,
1047+
market.amm.oracle_slot_delay_override,
1048+
market.amm.oracle_low_risk_slot_delay_override,
1049+
Some(LogMode::Margin),
10431050
)?;
10441051

10451052
all_oracles_valid &=

programs/drift/src/math/oracle.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ pub enum LogMode {
243243
ExchangeOracle,
244244
MMOracle,
245245
SafeMMOracle,
246+
Margin,
246247
}
247248

248249
pub fn oracle_validity(
@@ -323,7 +324,7 @@ pub fn oracle_validity(
323324
};
324325

325326
if log_mode != LogMode::None {
326-
let oracle_type = if log_mode == LogMode::ExchangeOracle {
327+
let oracle_type = if log_mode == LogMode::ExchangeOracle || log_mode == LogMode::Margin {
327328
"Exchange"
328329
} else if log_mode == LogMode::SafeMMOracle {
329330
"SafeMM"
@@ -369,7 +370,18 @@ pub fn oracle_validity(
369370
);
370371
}
371372

372-
if is_stale_for_amm_immediate || is_stale_for_margin || is_stale_for_amm_low_risk {
373+
if is_stale_for_margin {
374+
crate::msg!(
375+
"Invalid {} {} {} Oracle: Stale for Margin (oracle_delay={:?})",
376+
market_type,
377+
market_index,
378+
oracle_type,
379+
oracle_delay
380+
);
381+
}
382+
383+
if (is_stale_for_amm_immediate || is_stale_for_amm_low_risk) && log_mode != LogMode::Margin
384+
{
373385
crate::msg!(
374386
"Invalid {} {} {} Oracle: Stale (oracle_delay={:?}), (stale_for_amm_immediate={}, stale_for_amm_low_risk={}, stale_for_margin={})",
375387
market_type,

programs/drift/src/state/oracle_map.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,18 @@ impl<'a> OracleMap<'a> {
9090
max_confidence_interval_multiplier: u64,
9191
slots_before_stale_for_amm_override: i8,
9292
oracle_low_risk_slot_delay_override_override: i8,
93+
log_mode: Option<LogMode>,
9394
) -> DriftResult<(&OraclePriceData, OracleValidity)> {
9495
if self.should_get_quote_asset_price_data(&oracle_id.0) {
9596
return Ok((&self.quote_asset_price_data, OracleValidity::Valid));
9697
}
9798

99+
let log_mode = if let Some(lm) = log_mode {
100+
lm
101+
} else {
102+
LogMode::ExchangeOracle
103+
};
104+
98105
if self.price_data.contains_key(oracle_id) {
99106
let oracle_price_data = self.price_data.get(oracle_id).safe_unwrap()?;
100107

@@ -109,7 +116,7 @@ impl<'a> OracleMap<'a> {
109116
&self.oracle_guard_rails.validity,
110117
max_confidence_interval_multiplier,
111118
&oracle_id.1,
112-
LogMode::ExchangeOracle,
119+
log_mode,
113120
slots_before_stale_for_amm_override,
114121
oracle_low_risk_slot_delay_override_override,
115122
)?;
@@ -140,7 +147,7 @@ impl<'a> OracleMap<'a> {
140147
&self.oracle_guard_rails.validity,
141148
max_confidence_interval_multiplier,
142149
&oracle_id.1,
143-
LogMode::ExchangeOracle,
150+
log_mode,
144151
slots_before_stale_for_amm_override,
145152
oracle_low_risk_slot_delay_override_override,
146153
)?;

0 commit comments

Comments
 (0)