@@ -3,6 +3,7 @@ use crate::msg;
33use crate :: error:: { DriftResult , ErrorCode } ;
44use crate :: math:: constants:: {
55 FEE_DENOMINATOR , FEE_PERCENTAGE_DENOMINATOR , OPEN_ORDER_MARGIN_REQUIREMENT ,
6+ PERCENTAGE_PRECISION ,
67} ;
78use crate :: state:: state:: { FeeStructure , FeeTier } ;
89use crate :: validate;
@@ -89,14 +90,26 @@ pub fn validate_fee_tier(
8990 ) ?;
9091
9192 let taker_fee = fee_tier. fee_numerator * ( 100 - fee_tier. referee_fee_numerator ) / 100 ;
92- let fee_to_market = taker_fee
93- - fee_tier. maker_rebate_numerator
93+ let fee_to_market_pre_maker = taker_fee
9494 - taker_fee * ( fee_tier. referrer_reward_numerator + filler_reward_numerator) / 100 ;
9595
9696 validate ! (
97- fee_to_market <= fee_tier. fee_numerator,
97+ fee_to_market_pre_maker <= fee_tier. fee_numerator,
9898 ErrorCode :: InvalidFeeStructure ,
99- "invalid fee to market ({}) for index ({})" ,
99+ "invalid taker fee to market ({}) for index ({})" ,
100+ fee_tier. referrer_reward_numerator,
101+ fee_tier_index,
102+ ) ?;
103+
104+ let fee_to_market = fee_to_market_pre_maker as u128 * PERCENTAGE_PRECISION
105+ / fee_tier. fee_denominator as u128
106+ - fee_tier. maker_rebate_numerator as u128 * PERCENTAGE_PRECISION
107+ / fee_tier. maker_rebate_denominator as u128 ;
108+
109+ validate ! (
110+ fee_to_market >= 0 ,
111+ ErrorCode :: InvalidFeeStructure ,
112+ "invalid maker fee to market ({}) for index ({})" ,
100113 fee_tier. referrer_reward_numerator,
101114 fee_tier_index,
102115 ) ?;
0 commit comments