Skip to content

Commit 34ca52b

Browse files
committed
add test
1 parent 68ce1fd commit 34ca52b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

programs/drift/src/controller/orders.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -1711,7 +1711,7 @@ fn get_maker_orders_info(
17111711
}
17121712

17131713
if maker_order.has_oracle_price_offset() && is_protected_maker {
1714-
if !oracle_valid_for_amm_fill || (oracle_delay > 0 && !user_can_skip_duration && taker_order_age < protected_maker_min_age) {
1714+
if !protected_maker_oracle_limit_can_fill(oracle_valid_for_amm_fill, oracle_delay, user_can_skip_duration, taker_order_age, protected_maker_min_age) {
17151715
continue;
17161716
}
17171717
}
@@ -1727,6 +1727,17 @@ fn get_maker_orders_info(
17271727
Ok(maker_orders_info)
17281728
}
17291729

1730+
#[inline(always)]
1731+
fn protected_maker_oracle_limit_can_fill(
1732+
oracle_valid_for_amm_fill: bool,
1733+
oracle_delay: i64,
1734+
user_can_skip_duration: bool,
1735+
taker_order_age: u64,
1736+
protected_maker_min_age: u64,
1737+
) -> bool {
1738+
oracle_valid_for_amm_fill && (oracle_delay == 0 || user_can_skip_duration || taker_order_age > protected_maker_min_age)
1739+
}
1740+
17301741
#[inline(always)]
17311742
fn insert_maker_order_info(
17321743
maker_orders_info: &mut Vec<(Pubkey, usize, u64)>,

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

+14
Original file line numberDiff line numberDiff line change
@@ -12226,3 +12226,17 @@ mod update_maker_fills_map {
1222612226
assert_eq!(*map.get(&maker_key).unwrap(), -2 * fill as i64);
1222712227
}
1222812228
}
12229+
12230+
pub mod protected_maker_oracle_limit_can_fill {
12231+
use crate::controller::orders::protected_maker_oracle_limit_can_fill;
12232+
12233+
#[test]
12234+
fn test() {
12235+
assert!(protected_maker_oracle_limit_can_fill(true, 0, true, 10, 10)); // all cases
12236+
assert!(protected_maker_oracle_limit_can_fill(true, 0, false, 9, 10)); // oracle delay is 0
12237+
assert!(protected_maker_oracle_limit_can_fill(true, 1, false, 10, 9)); // min age passed
12238+
assert!(protected_maker_oracle_limit_can_fill(true, 1, true, 9, 10)); // user exempt
12239+
assert!(!protected_maker_oracle_limit_can_fill(true, 1, false, 10, 11)); // no condition met
12240+
assert!(!protected_maker_oracle_limit_can_fill(false, 0, true, 10, 10)); // oracle valid for amm fill is false
12241+
}
12242+
}

programs/drift/src/math/auction.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ pub fn can_fill_with_amm(
230230
slot: u64,
231231
fill_mode: FillMode,
232232
) -> DriftResult<bool> {
233-
Ok(!(amm_availability == AMMAvailability::Unavailable)
233+
Ok(amm_availability != AMMAvailability::Unavailable
234234
&& valid_oracle_price.is_some()
235235
&& (amm_availability == AMMAvailability::Immediate
236236
|| is_amm_available_liquidity_source(order, min_auction_duration, slot, fill_mode)?))

0 commit comments

Comments
 (0)