Skip to content

Commit d9fbd4f

Browse files
authored
program: override for oracle delay (#1679)
* programy: override for oracle delay * update impl * switch to i8 * CHANGELOG
1 parent 788a265 commit d9fbd4f

File tree

15 files changed

+59
-4
lines changed

15 files changed

+59
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Features
1111

12+
- program: perp market amm oracle delay override ([#1679](https://github.com/drift-labs/protocol-v2/pull/1679))
1213
- program: sanitize long tail perp market orders less frequently ([#1641](https://github.com/drift-labs/protocol-v2/pull/1641))
1314

1415
### Fixes

programs/drift/src/controller/orders.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,6 +1074,7 @@ pub fn fill_perp_order(
10741074
&market.oracle_id(),
10751075
market.amm.historical_oracle_data.last_oracle_price_twap,
10761076
market.get_max_confidence_interval_multiplier()?,
1077+
market.amm.oracle_slot_delay_override,
10771078
)?;
10781079

10791080
oracle_valid_for_amm_fill =
@@ -2987,6 +2988,7 @@ pub fn trigger_order(
29872988
.historical_oracle_data
29882989
.last_oracle_price_twap,
29892990
perp_market.get_max_confidence_interval_multiplier()?,
2991+
0,
29902992
)?;
29912993

29922994
let is_oracle_valid =
@@ -5341,6 +5343,7 @@ pub fn trigger_spot_order(
53415343
&spot_market.oracle_id(),
53425344
spot_market.historical_oracle_data.last_oracle_price_twap,
53435345
spot_market.get_max_confidence_interval_multiplier()?,
5346+
0,
53445347
)?;
53455348
let strict_oracle_price = StrictOraclePrice {
53465349
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
@@ -2159,6 +2159,7 @@ pub mod fulfill_order_with_maker_order {
21592159
&(oracle_price_key, OracleSource::Pyth),
21602160
market.amm.historical_oracle_data.last_oracle_price_twap,
21612161
market.get_max_confidence_interval_multiplier().unwrap(),
2162+
0,
21622163
)
21632164
.unwrap();
21642165

programs/drift/src/controller/pnl.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ pub fn settle_pnl(
165165
.historical_oracle_data
166166
.last_oracle_price_twap,
167167
perp_market.get_max_confidence_interval_multiplier()?,
168+
0,
168169
)?;
169170

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

programs/drift/src/controller/repeg.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ pub fn _update_amm(
161161
market.get_max_confidence_interval_multiplier()?,
162162
&market.amm.oracle_source,
163163
true,
164+
0,
164165
)?;
165166

166167
let mut amm_update_cost = 0;
@@ -249,6 +250,7 @@ pub fn update_amm_and_check_validity(
249250
market.get_max_confidence_interval_multiplier()?,
250251
&market.amm.oracle_source,
251252
false,
253+
0,
252254
)?;
253255

254256
validate!(

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ pub fn update_amm_test() {
107107
market.get_max_confidence_interval_multiplier().unwrap(),
108108
&market.amm.oracle_source,
109109
false,
110+
0,
110111
)
111112
.unwrap()
112113
== OracleValidity::Valid;
@@ -235,6 +236,7 @@ pub fn update_amm_test_bad_oracle() {
235236
market.get_max_confidence_interval_multiplier().unwrap(),
236237
&market.amm.oracle_source,
237238
false,
239+
0,
238240
)
239241
.unwrap()
240242
== OracleValidity::Valid;

programs/drift/src/controller/spot_balance.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ pub fn update_spot_market_and_check_validity(
404404
spot_market.get_max_confidence_interval_multiplier()?,
405405
&spot_market.oracle_source,
406406
false,
407+
0,
407408
)?;
408409

409410
validate!(

programs/drift/src/instructions/admin.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1040,7 +1040,7 @@ pub fn handle_initialize_perp_market(
10401040
last_oracle_valid: false,
10411041
target_base_asset_amount_per_lp: 0,
10421042
per_lp_base: 0,
1043-
padding1: 0,
1043+
oracle_slot_delay_override: 0,
10441044
taker_speed_bump_override: 0,
10451045
amm_spread_adjustment: 0,
10461046
total_fee_earned_per_lp: 0,
@@ -4028,6 +4028,26 @@ pub fn handle_update_perp_market_amm_spread_adjustment(
40284028
Ok(())
40294029
}
40304030

4031+
#[access_control(
4032+
perp_market_valid(&ctx.accounts.perp_market)
4033+
)]
4034+
pub fn handle_update_perp_market_oracle_slot_delay_override(
4035+
ctx: Context<HotAdminUpdatePerpMarket>,
4036+
oracle_slot_delay_override: i8,
4037+
) -> Result<()> {
4038+
let perp_market = &mut load_mut!(ctx.accounts.perp_market)?;
4039+
msg!("perp market {}", perp_market.market_index);
4040+
4041+
msg!(
4042+
"perp_market.amm.oracle_slot_delay_override: {:?} -> {:?}",
4043+
perp_market.amm.oracle_slot_delay_override,
4044+
oracle_slot_delay_override
4045+
);
4046+
4047+
perp_market.amm.oracle_slot_delay_override = oracle_slot_delay_override;
4048+
Ok(())
4049+
}
4050+
40314051
#[access_control(
40324052
spot_market_valid(&ctx.accounts.spot_market)
40334053
)]

programs/drift/src/instructions/user.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,7 @@ pub fn handle_transfer_perp_position<'c: 'info, 'info>(
16271627
.historical_oracle_data
16281628
.last_oracle_price_twap,
16291629
perp_market.get_max_confidence_interval_multiplier()?,
1630+
perp_market.amm.oracle_slot_delay_override,
16301631
)?;
16311632
step_size = perp_market.amm.order_step_size;
16321633
tick_size = perp_market.amm.order_tick_size;

programs/drift/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1547,6 +1547,13 @@ pub mod drift {
15471547
handle_update_perp_market_amm_spread_adjustment(ctx, amm_spread_adjustment)
15481548
}
15491549

1550+
pub fn update_perp_market_oracle_slot_delay_override(
1551+
ctx: Context<HotAdminUpdatePerpMarket>,
1552+
oracle_slot_delay_override: i8,
1553+
) -> Result<()> {
1554+
handle_update_perp_market_oracle_slot_delay_override(ctx, oracle_slot_delay_override)
1555+
}
1556+
15501557
pub fn update_spot_market_fuel(
15511558
ctx: Context<AdminUpdateSpotMarketFuel>,
15521559
fuel_boost_deposits: Option<u8>,

0 commit comments

Comments
 (0)