Skip to content

Commit f2d00f0

Browse files
0xbigzcrispheaney
andauthored
program: tests-fee-adjustment-neg-100 (#1656)
* program: tests-fee-adjustment-neg-100 * add HLM field to test * cargo fmt -- --------- Co-authored-by: Chris Heaney <[email protected]>
1 parent 0f06c71 commit f2d00f0

File tree

2 files changed

+191
-0
lines changed

2 files changed

+191
-0
lines changed

programs/drift/src/math/fees/tests.rs

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,171 @@ mod calculate_fee_for_taker_and_maker {
346346
assert_eq!(referee_discount, 5000);
347347
}
348348

349+
#[test]
350+
fn fee_adjustment_free() {
351+
let quote_asset_amount = 100 * QUOTE_PRECISION_U64;
352+
let taker_stats = UserStats::default();
353+
let mut maker_stats = UserStats::default();
354+
355+
let FillFees {
356+
user_fee: taker_fee,
357+
maker_rebate,
358+
fee_to_market,
359+
filler_reward,
360+
referee_discount,
361+
referrer_reward,
362+
..
363+
} = calculate_fee_for_fulfillment_with_match(
364+
&taker_stats,
365+
&Some(&mut maker_stats),
366+
quote_asset_amount,
367+
&FeeStructure::test_default(),
368+
0,
369+
0,
370+
0,
371+
false,
372+
&None,
373+
&MarketType::Perp,
374+
-100,
375+
false,
376+
)
377+
.unwrap();
378+
379+
assert_eq!(taker_fee, 0);
380+
assert_eq!(maker_rebate, 0);
381+
assert_eq!(fee_to_market, 0);
382+
assert_eq!(filler_reward, 0);
383+
assert_eq!(referrer_reward, 0);
384+
assert_eq!(referee_discount, 0);
385+
386+
let FillFees {
387+
user_fee: taker_fee,
388+
maker_rebate,
389+
fee_to_market,
390+
filler_reward,
391+
referee_discount,
392+
referrer_reward,
393+
..
394+
} = calculate_fee_for_fulfillment_with_match(
395+
&taker_stats,
396+
&Some(&mut maker_stats),
397+
quote_asset_amount,
398+
&FeeStructure::test_default(),
399+
0,
400+
0,
401+
0,
402+
false,
403+
&None,
404+
&MarketType::Perp,
405+
-100,
406+
false,
407+
)
408+
.unwrap();
409+
410+
assert_eq!(taker_fee, 0);
411+
assert_eq!(maker_rebate, 0);
412+
assert_eq!(fee_to_market, 0);
413+
assert_eq!(filler_reward, 0);
414+
assert_eq!(referrer_reward, 0);
415+
assert_eq!(referee_discount, 0);
416+
417+
// test HLM
418+
let FillFees {
419+
user_fee: taker_fee,
420+
maker_rebate,
421+
fee_to_market,
422+
filler_reward,
423+
referee_discount,
424+
referrer_reward,
425+
..
426+
} = calculate_fee_for_fulfillment_with_match(
427+
&taker_stats,
428+
&Some(&mut maker_stats),
429+
quote_asset_amount,
430+
&FeeStructure::test_default(),
431+
0,
432+
0,
433+
0,
434+
false,
435+
&None,
436+
&MarketType::Perp,
437+
-100,
438+
true,
439+
)
440+
.unwrap();
441+
442+
assert_eq!(taker_fee, 0);
443+
assert_eq!(maker_rebate, 0);
444+
assert_eq!(fee_to_market, 0);
445+
assert_eq!(filler_reward, 0);
446+
assert_eq!(referrer_reward, 0);
447+
assert_eq!(referee_discount, 0);
448+
449+
// reward referrer
450+
let FillFees {
451+
user_fee: taker_fee,
452+
maker_rebate,
453+
fee_to_market,
454+
filler_reward,
455+
referee_discount,
456+
referrer_reward,
457+
..
458+
} = calculate_fee_for_fulfillment_with_match(
459+
&taker_stats,
460+
&Some(&mut maker_stats),
461+
quote_asset_amount,
462+
&FeeStructure::test_default(),
463+
0,
464+
0,
465+
0,
466+
true,
467+
&None,
468+
&MarketType::Perp,
469+
-100,
470+
false,
471+
)
472+
.unwrap();
473+
474+
assert_eq!(taker_fee, 0);
475+
assert_eq!(maker_rebate, 0);
476+
assert_eq!(fee_to_market, 0);
477+
assert_eq!(filler_reward, 0);
478+
assert_eq!(referrer_reward, 0);
479+
assert_eq!(referee_discount, 0);
480+
481+
// reward referrer + filler
482+
let FillFees {
483+
user_fee: taker_fee,
484+
maker_rebate,
485+
fee_to_market,
486+
filler_reward,
487+
referee_discount,
488+
referrer_reward,
489+
..
490+
} = calculate_fee_for_fulfillment_with_match(
491+
&taker_stats,
492+
&Some(&mut maker_stats),
493+
quote_asset_amount,
494+
&FeeStructure::test_default(),
495+
0,
496+
0,
497+
1,
498+
true,
499+
&None,
500+
&MarketType::Perp,
501+
-100,
502+
false,
503+
)
504+
.unwrap();
505+
506+
assert_eq!(taker_fee, 0);
507+
assert_eq!(maker_rebate, 0);
508+
assert_eq!(fee_to_market, 0);
509+
assert_eq!(filler_reward, 0);
510+
assert_eq!(referrer_reward, 0);
511+
assert_eq!(referee_discount, 0);
512+
}
513+
349514
#[test]
350515
fn high_leverage_mode() {
351516
let quote_asset_amount = 100 * QUOTE_PRECISION_U64;

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3639,6 +3639,32 @@ pub mod calculate_limit_price_with_buffer {
36393639
Some(100 * PRICE_PRECISION_U64 + PRICE_PRECISION_U64 / 50 / 4) // 100.005
36403640
);
36413641
}
3642+
3643+
#[test]
3644+
fn test_max_fee_adj() {
3645+
// Post only ask w fee adjustment
3646+
let order = Order {
3647+
post_only: true,
3648+
direction: PositionDirection::Short,
3649+
..Order::default()
3650+
};
3651+
let limit_price = Some(100 * PRICE_PRECISION_U64);
3652+
let fee_tier = FeeTier {
3653+
maker_rebate_numerator: 2,
3654+
maker_rebate_denominator: 10000, // 2bps
3655+
..FeeTier::default()
3656+
};
3657+
let fee_adjustment = -100;
3658+
3659+
let limit_price_with_buffer =
3660+
calculate_limit_price_with_buffer(&order, limit_price, &fee_tier, fee_adjustment)
3661+
.unwrap();
3662+
3663+
assert_eq!(
3664+
limit_price_with_buffer,
3665+
Some(100 * PRICE_PRECISION_U64) // 100
3666+
);
3667+
}
36423668
}
36433669

36443670
mod select_margin_type_for_perp_maker {

0 commit comments

Comments
 (0)