Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions programs/drift/src/controller/orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1068,6 +1068,13 @@ pub fn fill_perp_order(
"Market is in settlement mode",
)?;

if market.amm.oracle_slot_delay_override != 0 {
oracle_map
.oracle_guard_rails
.validity
.slots_before_stale_for_amm = market.amm.oracle_slot_delay_override as i64;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this need to reset within a tx?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no it only lives for the duration of the fill perp ix, i guess we can reset to be safe


let (oracle_price_data, _oracle_validity) = oracle_map.get_price_data_and_validity(
MarketType::Perp,
market.market_index,
Expand Down
22 changes: 21 additions & 1 deletion programs/drift/src/instructions/admin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1040,7 +1040,7 @@ pub fn handle_initialize_perp_market(
last_oracle_valid: false,
target_base_asset_amount_per_lp: 0,
per_lp_base: 0,
padding1: 0,
oracle_slot_delay_override: 0,
taker_speed_bump_override: 0,
amm_spread_adjustment: 0,
total_fee_earned_per_lp: 0,
Expand Down Expand Up @@ -4028,6 +4028,26 @@ pub fn handle_update_perp_market_amm_spread_adjustment(
Ok(())
}

#[access_control(
perp_market_valid(&ctx.accounts.perp_market)
)]
pub fn handle_update_perp_market_oracle_slot_delay_override(
ctx: Context<HotAdminUpdatePerpMarket>,
oracle_slot_delay_override: u8,
) -> Result<()> {
let perp_market = &mut load_mut!(ctx.accounts.perp_market)?;
msg!("perp market {}", perp_market.market_index);

msg!(
"perp_market.amm.oracle_slot_delay_override: {:?} -> {:?}",
perp_market.amm.oracle_slot_delay_override,
oracle_slot_delay_override
);

perp_market.amm.oracle_slot_delay_override = oracle_slot_delay_override;
Ok(())
}

#[access_control(
spot_market_valid(&ctx.accounts.spot_market)
)]
Expand Down
7 changes: 7 additions & 0 deletions programs/drift/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1547,6 +1547,13 @@ pub mod drift {
handle_update_perp_market_amm_spread_adjustment(ctx, amm_spread_adjustment)
}

pub fn update_perp_market_oracle_slot_delay_override(
ctx: Context<HotAdminUpdatePerpMarket>,
oracle_slot_delay_override: u8,
) -> Result<()> {
handle_update_perp_market_oracle_slot_delay_override(ctx, oracle_slot_delay_override)
}

pub fn update_spot_market_fuel(
ctx: Context<AdminUpdateSpotMarketFuel>,
fuel_boost_deposits: Option<u8>,
Expand Down
4 changes: 2 additions & 2 deletions programs/drift/src/state/perp_market.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1050,7 +1050,7 @@ pub struct AMM {
pub taker_speed_bump_override: i8,
/// signed scale amm_spread similar to fee_adjustment logic (-100 = 0, 100 = double)
pub amm_spread_adjustment: i8,
pub padding1: u8,
pub oracle_slot_delay_override: u8,
pub total_fee_earned_per_lp: u64,
pub net_unsettled_funding_pnl: i64,
pub quote_asset_amount_with_unsettled_lp: i64,
Expand Down Expand Up @@ -1140,7 +1140,7 @@ impl Default for AMM {
per_lp_base: 0,
taker_speed_bump_override: 0,
amm_spread_adjustment: 0,
padding1: 0,
oracle_slot_delay_override: 0,
total_fee_earned_per_lp: 0,
net_unsettled_funding_pnl: 0,
quote_asset_amount_with_unsettled_lp: 0,
Expand Down
Loading