Skip to content

Commit 5a8b7cb

Browse files
committed
merge master
2 parents 12fc68d + 5c25295 commit 5a8b7cb

File tree

16 files changed

+650
-55
lines changed

16 files changed

+650
-55
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"@project-serum/common": "0.0.1-beta.3",
1111
"@project-serum/serum": "0.13.65",
1212
"@pythnetwork/client": "2.21.0",
13+
"@pythnetwork/price-service-client": "1.9.0",
1314
"@solana/spl-token": "0.4.13",
1415
"@solana/web3.js": "1.73.2",
1516
"@types/bn.js": "5.1.6",
@@ -24,11 +25,11 @@
2425
"husky": "7.0.4",
2526
"prettier": "3.0.1",
2627
"typedoc": "0.23.23",
27-
"typescript": "5.4.5",
28-
"@pythnetwork/price-service-client": "1.9.0"
28+
"typescript": "5.4.5"
2929
},
3030
"dependencies": {
3131
"@ellipsis-labs/phoenix-sdk": "1.4.2",
32+
"@msgpack/msgpack": "^3.1.2",
3233
"@pythnetwork/pyth-solana-receiver": "0.8.0",
3334
"@switchboard-xyz/common": "3.0.14",
3435
"@switchboard-xyz/on-demand": "2.4.1",
@@ -96,4 +97,4 @@
9697
"has-ansi": "<6.0.1"
9798
},
9899
"packageManager": "[email protected]+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
99-
}
100+
}

programs/drift/src/controller/orders.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3194,8 +3194,9 @@ pub fn trigger_order(
31943194
.historical_oracle_data
31953195
.last_oracle_price_twap,
31963196
perp_market.get_max_confidence_interval_multiplier()?,
3197-
0,
3198-
0,
3197+
perp_market.amm.oracle_slot_delay_override,
3198+
perp_market.amm.oracle_low_risk_slot_delay_override,
3199+
None,
31993200
)?;
32003201

32013202
let is_oracle_valid =
@@ -5513,6 +5514,7 @@ pub fn trigger_spot_order(
55135514
spot_market.get_max_confidence_interval_multiplier()?,
55145515
0,
55155516
0,
5517+
None,
55165518
)?;
55175519
let strict_oracle_price = StrictOraclePrice {
55185520
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
@@ -138,6 +138,7 @@ pub fn settle_pnl(
138138
perp_market.get_max_confidence_interval_multiplier()?,
139139
0,
140140
0,
141+
None,
141142
)?;
142143

143144
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
@@ -45,6 +45,7 @@ use crate::math::margin::{
4545
};
4646
use crate::math::oracle::is_oracle_valid_for_action;
4747
use crate::math::oracle::DriftAction;
48+
use crate::math::oracle::LogMode;
4849
use crate::math::orders::calculate_existing_position_fields_for_order_action;
4950
use crate::math::orders::get_position_delta_for_fill;
5051
use crate::math::orders::is_multiple_of_step_size;
@@ -1804,6 +1805,7 @@ pub fn handle_transfer_perp_position<'c: 'info, 'info>(
18041805
perp_market.get_max_confidence_interval_multiplier()?,
18051806
perp_market.amm.oracle_slot_delay_override,
18061807
perp_market.amm.oracle_low_risk_slot_delay_override,
1808+
Some(LogMode::Margin),
18071809
)?;
18081810
step_size = perp_market.amm.order_step_size;
18091811
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::math::constants::{MARGIN_PRECISION, PRICE_PRECISION_I128, PRICE_PRECISION_I64};
@@ -295,6 +296,7 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
295296
spot_market.get_max_confidence_interval_multiplier()?,
296297
0,
297298
0,
299+
Some(LogMode::Margin),
298300
)?;
299301

300302
let mut skip_token_value = false;
@@ -551,6 +553,7 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
551553
quote_spot_market.get_max_confidence_interval_multiplier()?,
552554
0,
553555
0,
556+
Some(LogMode::Margin),
554557
)?;
555558

556559
let strict_quote_price = StrictOraclePrice::new(
@@ -568,8 +571,9 @@ pub fn calculate_margin_requirement_and_total_collateral_and_liability_info(
568571
&market.oracle_id(),
569572
market.amm.historical_oracle_data.last_oracle_price_twap,
570573
market.get_max_confidence_interval_multiplier()?,
571-
0,
572-
0,
574+
market.amm.oracle_slot_delay_override,
575+
market.amm.oracle_low_risk_slot_delay_override,
576+
Some(LogMode::Margin),
573577
)?;
574578

575579
let perp_position_custom_margin_ratio =
@@ -998,6 +1002,7 @@ pub fn calculate_user_equity(
9981002
spot_market.get_max_confidence_interval_multiplier()?,
9991003
0,
10001004
0,
1005+
Some(LogMode::Margin),
10011006
)?;
10021007
all_oracles_valid &=
10031008
is_oracle_valid_for_action(oracle_validity, Some(DriftAction::MarginCalc))?;
@@ -1029,6 +1034,7 @@ pub fn calculate_user_equity(
10291034
quote_spot_market.get_max_confidence_interval_multiplier()?,
10301035
0,
10311036
0,
1037+
Some(LogMode::Margin),
10321038
)?;
10331039

10341040
all_oracles_valid &=
@@ -1056,8 +1062,9 @@ pub fn calculate_user_equity(
10561062
&market.oracle_id(),
10571063
market.amm.historical_oracle_data.last_oracle_price_twap,
10581064
market.get_max_confidence_interval_multiplier()?,
1059-
0,
1060-
0,
1065+
market.amm.oracle_slot_delay_override,
1066+
market.amm.oracle_low_risk_slot_delay_override,
1067+
Some(LogMode::Margin),
10611068
)?;
10621069

10631070
all_oracles_valid &=

programs/drift/src/math/oracle.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ pub enum LogMode {
303303
ExchangeOracle,
304304
MMOracle,
305305
SafeMMOracle,
306+
Margin,
306307
}
307308

308309
pub fn oracle_validity(
@@ -383,7 +384,7 @@ pub fn oracle_validity(
383384
};
384385

385386
if log_mode != LogMode::None {
386-
let oracle_type = if log_mode == LogMode::ExchangeOracle {
387+
let oracle_type = if log_mode == LogMode::ExchangeOracle || log_mode == LogMode::Margin {
387388
"Exchange"
388389
} else if log_mode == LogMode::SafeMMOracle {
389390
"SafeMM"
@@ -429,7 +430,18 @@ pub fn oracle_validity(
429430
);
430431
}
431432

432-
if is_stale_for_amm_immediate || is_stale_for_margin || is_stale_for_amm_low_risk {
433+
if is_stale_for_margin {
434+
crate::msg!(
435+
"Invalid {} {} {} Oracle: Stale for Margin (oracle_delay={:?})",
436+
market_type,
437+
market_index,
438+
oracle_type,
439+
oracle_delay
440+
);
441+
}
442+
443+
if (is_stale_for_amm_immediate || is_stale_for_amm_low_risk) && log_mode != LogMode::Margin
444+
{
433445
crate::msg!(
434446
"Invalid {} {} {} Oracle: Stale (oracle_delay={:?}), (stale_for_amm_immediate={}, stale_for_amm_low_risk={}, stale_for_margin={})",
435447
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
)?;

sdk/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.144.0-beta.1
1+
2.144.0-beta.2

0 commit comments

Comments
 (0)