Skip to content

Commit 706466e

Browse files
committed
sdk still has errors
1 parent 0923d60 commit 706466e

File tree

10 files changed

+127
-148
lines changed

10 files changed

+127
-148
lines changed

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2489,17 +2489,6 @@ pub mod amm_jit {
24892489
let makers_and_referrers = UserMap::load_one(&maker_account_info).unwrap();
24902490

24912491
let order_index = 0;
2492-
let user_can_skip_auction_duration =
2493-
taker.can_skip_auction_duration(&taker_stats).unwrap();
2494-
let is_amm_available = get_amm_is_available(
2495-
&taker.orders[order_index],
2496-
auction_duration,
2497-
&market,
2498-
&mut oracle_map,
2499-
slot,
2500-
user_can_skip_auction_duration,
2501-
);
2502-
25032492
// fulfill with match
25042493
fulfill_perp_order(
25052494
&mut taker,

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

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13056,7 +13056,6 @@ mod update_maker_fills_map {
1305613056

1305713057
mod order_is_low_risk_for_amm {
1305813058
use super::*;
13059-
use crate::math::orders::get_posted_slot_from_clock_slot;
1306013059
use crate::state::user::{OrderBitFlag, OrderStatus};
1306113060

1306213061
fn base_perp_order() -> Order {
@@ -13075,61 +13074,28 @@ mod order_is_low_risk_for_amm {
1307513074
let mm_oracle_delay = 10i64;
1307613075

1307713076
let is_low = order
13078-
.is_low_risk_for_amm(mm_oracle_delay, 20, clock_slot, false)
13077+
.is_low_risk_for_amm(mm_oracle_delay, clock_slot, false)
1307913078
.unwrap();
1308013079
assert!(is_low);
1308113080
}
1308213081

1308313082
#[test]
13084-
fn not_older_than_delay_and_auction_not_complete_returns_false() {
13083+
fn not_older_than_delay_returns_false() {
1308513084
let order = base_perp_order();
1308613085
let clock_slot = 110u64;
1308713086

1308813087
let mm_oracle_delay = 11i64;
13089-
let min_auction_duration = 10u8;
1309013088

1309113089
let is_low = order
13092-
.is_low_risk_for_amm(mm_oracle_delay, min_auction_duration, clock_slot, false)
13090+
.is_low_risk_for_amm(mm_oracle_delay, clock_slot, false)
1309313091
.unwrap();
1309413092
assert!(!is_low);
1309513093
}
1309613094

13097-
#[test]
13098-
fn non_signed_auction_boundary_and_past_duration() {
13099-
let order = base_perp_order(); // slot = 100
13100-
13101-
let is_low_at_boundary = order.is_low_risk_for_amm(1000, 10, 110, false).unwrap();
13102-
assert!(!is_low_at_boundary);
13103-
let is_low_past = order.is_low_risk_for_amm(1000, 10, 111, false).unwrap();
13104-
assert!(is_low_past);
13105-
}
13106-
13107-
#[test]
13108-
fn signed_message_duration_gate() {
13109-
let mut order = base_perp_order();
13110-
order.add_bit_flag(OrderBitFlag::SignedMessage);
13111-
13112-
let posted_slot = 5_000u64;
13113-
order.posted_slot_tail = get_posted_slot_from_clock_slot(posted_slot);
13114-
13115-
let clock_slot_9 = posted_slot + 9;
13116-
let min_auction_duration = 10u8;
13117-
let is_low_9 = order
13118-
.is_low_risk_for_amm(10_000, min_auction_duration, clock_slot_9, false)
13119-
.unwrap();
13120-
assert!(!is_low_9);
13121-
13122-
let clock_slot_10 = posted_slot + 10;
13123-
let is_low_10 = order
13124-
.is_low_risk_for_amm(10_000, min_auction_duration, clock_slot_10, false)
13125-
.unwrap();
13126-
assert!(is_low_10);
13127-
}
13128-
1312913095
#[test]
1313013096
fn liquidation_always_low_risk() {
1313113097
let order = base_perp_order();
13132-
let is_low = order.is_low_risk_for_amm(0, 255, order.slot, true).unwrap();
13098+
let is_low = order.is_low_risk_for_amm(0, order.slot, true).unwrap();
1313313099
assert!(is_low);
1313413100
}
1313513101

@@ -13138,9 +13104,7 @@ mod order_is_low_risk_for_amm {
1313813104
let mut order = base_perp_order();
1313913105
order.add_bit_flag(OrderBitFlag::SafeTriggerOrder);
1314013106

13141-
let is_low = order
13142-
.is_low_risk_for_amm(0, 255, order.slot, false)
13143-
.unwrap();
13107+
let is_low = order.is_low_risk_for_amm(0, order.slot, false).unwrap();
1314413108
assert!(is_low);
1314513109
}
1314613110
}

programs/drift/src/math/oracle.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub fn is_oracle_valid_for_action(
101101
oracle_validity,
102102
OracleValidity::Valid
103103
| OracleValidity::StaleForAMM {
104-
immediate: true,
104+
immediate: _,
105105
low_risk: false
106106
}
107107
)

programs/drift/src/state/perp_market.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -700,14 +700,6 @@ impl PerpMarket {
700700
}
701701
}
702702

703-
pub fn get_min_perp_auction_duration(&self, default_min_auction_duration: u8) -> u8 {
704-
if self.amm.taker_speed_bump_override != 0 {
705-
self.amm.taker_speed_bump_override.max(0).unsigned_abs()
706-
} else {
707-
default_min_auction_duration
708-
}
709-
}
710-
711703
pub fn get_trigger_price(
712704
&self,
713705
oracle_price: i64,
@@ -876,9 +868,6 @@ impl PerpMarket {
876868
return Ok(false);
877869
}
878870

879-
let min_auction_duration =
880-
self.get_min_perp_auction_duration(state.min_perp_auction_duration);
881-
882871
// We are already using safe oracle data from MM oracle.
883872
// But AMM isnt available if we could have used MM oracle but fell back due to price diff
884873
// This is basically early volatility protection
@@ -899,14 +888,17 @@ impl PerpMarket {
899888
let safe_oracle_price_data = mm_oracle_price_data.get_safe_oracle_price_data();
900889
let order_is_low_risk_for_amm = order.is_low_risk_for_amm(
901890
safe_oracle_price_data.delay,
902-
min_auction_duration,
903891
clock_slot,
904892
fill_mode.is_liquidation(),
905893
)?;
906894
let oracle_valid_for_amm_fill_low_risk = is_oracle_valid_for_action(
907895
safe_oracle_validity,
908896
Some(DriftAction::FillOrderAmmLowRisk),
909897
)?;
898+
if !oracle_valid_for_amm_fill_low_risk {
899+
msg!("AMM cannot fill order: oracle not valid for low risk fills");
900+
return Ok(false);
901+
}
910902
let can_fill_low_risk = order_is_low_risk_for_amm && oracle_valid_for_amm_fill_low_risk;
911903

912904
// Proceed if order is low risk and we can fill it. Otherwise check if we can higher risk order immediately

programs/drift/src/state/perp_market/tests.rs

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -102,61 +102,6 @@ mod get_margin_ratio {
102102
}
103103
}
104104

105-
mod get_min_perp_auction_duration {
106-
use crate::state::perp_market::{PerpMarket, AMM};
107-
use crate::State;
108-
109-
#[test]
110-
fn test_get_speed_bump() {
111-
let perp_market = PerpMarket {
112-
amm: AMM {
113-
taker_speed_bump_override: 0,
114-
..AMM::default()
115-
},
116-
..PerpMarket::default()
117-
};
118-
119-
let state = State {
120-
min_perp_auction_duration: 10,
121-
..State::default()
122-
};
123-
124-
// no override uses state value
125-
assert_eq!(
126-
perp_market.get_min_perp_auction_duration(state.min_perp_auction_duration),
127-
10
128-
);
129-
130-
let perp_market = PerpMarket {
131-
amm: AMM {
132-
taker_speed_bump_override: -1,
133-
..AMM::default()
134-
},
135-
..PerpMarket::default()
136-
};
137-
138-
// -1 override disables speed bump
139-
assert_eq!(
140-
perp_market.get_min_perp_auction_duration(state.min_perp_auction_duration),
141-
0
142-
);
143-
144-
let perp_market = PerpMarket {
145-
amm: AMM {
146-
taker_speed_bump_override: 20,
147-
..AMM::default()
148-
},
149-
..PerpMarket::default()
150-
};
151-
152-
// positive override uses override value
153-
assert_eq!(
154-
perp_market.get_min_perp_auction_duration(state.min_perp_auction_duration),
155-
20
156-
);
157-
}
158-
}
159-
160105
mod get_trigger_price {
161106
use crate::state::perp_market::HistoricalOracleData;
162107
use crate::state::perp_market::{PerpMarket, AMM};

programs/drift/src/state/user.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ use crate::math::constants::{
88
};
99
use crate::math::margin::MarginRequirementType;
1010
use crate::math::orders::{
11-
apply_protected_maker_limit_price_offset, get_posted_slot_from_clock_slot,
12-
standardize_base_asset_amount, standardize_price,
11+
apply_protected_maker_limit_price_offset, standardize_base_asset_amount, standardize_price,
1312
};
1413
use crate::math::position::{
1514
calculate_base_asset_value_and_pnl_with_oracle_price, calculate_perp_liability_value,
@@ -1529,7 +1528,6 @@ impl Order {
15291528
pub fn is_low_risk_for_amm(
15301529
&self,
15311530
mm_oracle_delay: i64,
1532-
min_auction_duration: u8,
15331531
clock_slot: u64,
15341532
is_liquidation: bool,
15351533
) -> DriftResult<bool> {
@@ -1542,15 +1540,7 @@ impl Order {
15421540
clock_minus_delay >= self.slot.cast::<i64>()?
15431541
};
15441542

1545-
let order_older_than_min_auction_duration = if self.is_signed_msg() {
1546-
let clock_slot_tail = get_posted_slot_from_clock_slot(clock_slot);
1547-
clock_slot_tail.wrapping_sub(self.posted_slot_tail) >= min_auction_duration
1548-
} else {
1549-
is_auction_complete(self.slot, min_auction_duration, clock_slot)?
1550-
};
1551-
15521543
Ok(order_older_than_oracle_delay
1553-
|| order_older_than_min_auction_duration
15541544
|| is_liquidation
15551545
|| self.is_bit_flag_set(OrderBitFlag::SafeTriggerOrder))
15561546
}

sdk/src/math/auction.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isOneOfVariant, isVariant, Order, PositionDirection } from '../types';
1+
import { AMM, isOneOfVariant, isVariant, MarketType, Order, PositionDirection } from '../types';
22
import { BN } from '@coral-xyz/anchor';
33
import {
44
ONE,
@@ -8,9 +8,9 @@ import {
88
} from '../constants/numericConstants';
99
import { getVariant, OrderBitFlag, PerpMarketAccount } from '../types';
1010
import { getPerpMarketTierNumber } from './tiers';
11-
import { MMOraclePriceData } from '../oracles/types';
11+
import { MMOraclePriceData, OraclePriceData } from '../oracles/types';
1212
import { isLowRiskForAmm } from './orders';
13-
import { isOracleValid } from './oracles';
13+
import { getOracleValidity, isOracleValid } from './oracles';
1414

1515
export function isAuctionComplete(order: Order, slot: number): boolean {
1616
if (order.auctionDuration === 0) {
@@ -20,23 +20,33 @@ export function isAuctionComplete(order: Order, slot: number): boolean {
2020
return new BN(slot).sub(order.slot).gt(new BN(order.auctionDuration));
2121
}
2222

23-
export function isFallbackAvailableLiquiditySource(
23+
export function isFallbackAvailableLiquiditySource<T extends MarketType>(
2424
order: Order,
25-
mmOracleData: MMOraclePriceData,
25+
marketType: T,
26+
oraclePriceData: T extends { spot: unknown }
27+
? OraclePriceData
28+
: MMOraclePriceData,
2629
slot: number,
30+
amm?: AMM,
2731
isLiquidation?: boolean,
2832
): boolean {
33+
if (isVariant(marketType, 'spot')) {
34+
return true;
35+
}
2936

3037
const isOrderLowRiskForAmm = isLowRiskForAmm(
3138
order,
32-
mmOracleData,
39+
oraclePriceData as MMOraclePriceData,
3340
slot,
3441
isLiquidation,
3542
);
36-
isOracleValid
43+
44+
// const oracleValidity = getOracleValidity(
45+
46+
// )
3747

3848

39-
return new BN(slot).sub(order.slot).gt(new BN(minAuctionDuration));
49+
return true;
4050
}
4151

4252
/**
@@ -264,11 +274,17 @@ export function getTriggerAuctionStartPrice(params: {
264274
? BN.min(
265275
offsetSlow.add(fracOfLongSpreadInPrice),
266276
offsetFast.sub(fracOfShortSpreadInPrice)
277+
)
278+
offsetSlow.add(fracOfLongSpreadInPrice),
279+
offsetFast.sub(fracOfShortSpreadInPrice)
267280
)
268281
: BN.max(
269282
offsetSlow.sub(fracOfShortSpreadInPrice),
270283
offsetFast.add(fracOfLongSpreadInPrice)
271284
);
285+
offsetSlow.sub(fracOfShortSpreadInPrice),
286+
offsetFast.add(fracOfLongSpreadInPrice)
287+
);
272288
}
273289

274290
let startBuffer = -3500;

0 commit comments

Comments
 (0)