@@ -72,8 +72,7 @@ use crate::state::state::FeeStructure;
7272use crate :: state:: state:: * ;
7373use crate :: state:: traits:: Size ;
7474use crate :: state:: user:: {
75- AssetType , Order , OrderBitFlag , OrderStatus , OrderTriggerCondition , OrderType , ReferrerStatus ,
76- UserStats ,
75+ AssetType , Order , OrderBitFlag , OrderStatus , OrderTriggerCondition , OrderType , UserStats ,
7776} ;
7877use crate :: state:: user:: { MarketType , User } ;
7978use crate :: state:: user_map:: { UserMap , UserStatsMap } ;
@@ -2285,7 +2284,12 @@ pub fn fulfill_perp_order_with_amm(
22852284 ) ?;
22862285 }
22872286
2288- let reward_referrer = can_reward_user_with_perp_pnl ( referrer, market. market_index ) ;
2287+ let reward_referrer = can_reward_user_with_referral_reward (
2288+ referrer,
2289+ market. market_index ,
2290+ rev_share_escrow,
2291+ builder_referral_feature_enabled,
2292+ ) ;
22892293 let reward_filler = can_reward_user_with_perp_pnl ( filler, market. market_index )
22902294 || can_reward_user_with_perp_pnl ( maker, market. market_index ) ;
22912295
@@ -2573,7 +2577,7 @@ pub fn fulfill_perp_order_with_match(
25732577 fee_structure : & FeeStructure ,
25742578 oracle_map : & mut OracleMap ,
25752579 is_liquidation : bool ,
2576- builder_escrow : & mut Option < & mut RevenueShareEscrowZeroCopyMut > ,
2580+ rev_share_escrow : & mut Option < & mut RevenueShareEscrowZeroCopyMut > ,
25772581 builder_referral_feature_enabled : bool ,
25782582) -> DriftResult < ( u64 , u64 , u64 ) > {
25792583 if !are_orders_same_market_but_different_sides (
@@ -2687,7 +2691,7 @@ pub fn fulfill_perp_order_with_match(
26872691 Some ( jit_base_asset_amount) ,
26882692 Some ( maker_price) , // match the makers price
26892693 is_liquidation,
2690- builder_escrow ,
2694+ rev_share_escrow ,
26912695 builder_referral_feature_enabled,
26922696 ) ?;
26932697
@@ -2781,12 +2785,17 @@ pub fn fulfill_perp_order_with_match(
27812785
27822786 taker_stats. update_taker_volume_30d ( market. fuel_boost_taker , quote_asset_amount, now) ?;
27832787
2784- let reward_referrer = can_reward_user_with_perp_pnl ( referrer, market. market_index ) ;
2788+ let reward_referrer = can_reward_user_with_referral_reward (
2789+ referrer,
2790+ market. market_index ,
2791+ rev_share_escrow,
2792+ builder_referral_feature_enabled,
2793+ ) ;
27852794 let reward_filler = can_reward_user_with_perp_pnl ( filler, market. market_index ) ;
27862795
27872796 let ( builder_order_idx, referrer_builder_order_idx, builder_order_fee_bps, builder_idx) =
27882797 get_builder_escrow_info (
2789- builder_escrow ,
2798+ rev_share_escrow ,
27902799 taker. sub_account_id ,
27912800 taker. orders [ taker_order_index] . order_id ,
27922801 market. market_index ,
@@ -2825,7 +2834,7 @@ pub fn fulfill_perp_order_with_match(
28252834 ) ?;
28262835 let builder_fee = builder_fee_option. unwrap_or ( 0 ) ;
28272836
2828- if let ( Some ( idx) , Some ( escrow) ) = ( builder_order_idx, builder_escrow . as_deref_mut ( ) ) {
2837+ if let ( Some ( idx) , Some ( escrow) ) = ( builder_order_idx, rev_share_escrow . as_deref_mut ( ) ) {
28292838 let mut order = escrow. get_order_mut ( idx) ?;
28302839 order. fees_accrued = order. fees_accrued . safe_add ( builder_fee) ?;
28312840 }
@@ -2887,7 +2896,8 @@ pub fn fulfill_perp_order_with_match(
28872896 filler. update_last_active_slot ( slot) ;
28882897 }
28892898
2890- if let ( Some ( idx) , Some ( escrow) ) = ( referrer_builder_order_idx, builder_escrow. as_deref_mut ( ) ) {
2899+ if let ( Some ( idx) , Some ( escrow) ) = ( referrer_builder_order_idx, rev_share_escrow. as_deref_mut ( ) )
2900+ {
28912901 let mut order = escrow. get_order_mut ( idx) ?;
28922902 order. fees_accrued = order. fees_accrued . safe_add ( referrer_reward) ?;
28932903 } else if let ( Some ( referrer) , Some ( referrer_stats) ) =
@@ -2908,7 +2918,7 @@ pub fn fulfill_perp_order_with_match(
29082918 ) ?;
29092919
29102920 if is_filled {
2911- if let ( Some ( idx) , Some ( escrow) ) = ( builder_order_idx, builder_escrow . as_deref_mut ( ) ) {
2921+ if let ( Some ( idx) , Some ( escrow) ) = ( builder_order_idx, rev_share_escrow . as_deref_mut ( ) ) {
29122922 escrow
29132923 . get_order_mut ( idx) ?
29142924 . add_bit_flag ( RevenueShareOrderBitFlag :: Completed ) ;
@@ -3432,6 +3442,22 @@ pub fn can_reward_user_with_perp_pnl(user: &mut Option<&mut User>, market_index:
34323442 }
34333443}
34343444
3445+ pub fn can_reward_user_with_referral_reward (
3446+ user : & mut Option < & mut User > ,
3447+ market_index : u16 ,
3448+ rev_share_escrow : & mut Option < & mut RevenueShareEscrowZeroCopyMut > ,
3449+ builder_referral_feature_enabled : bool ,
3450+ ) -> bool {
3451+ if builder_referral_feature_enabled {
3452+ if let Some ( escrow) = rev_share_escrow {
3453+ return escrow. find_or_create_referral_index ( market_index) . is_some ( ) ;
3454+ }
3455+ false
3456+ } else {
3457+ can_reward_user_with_perp_pnl ( user, market_index)
3458+ }
3459+ }
3460+
34353461pub fn pay_keeper_flat_reward_for_perps (
34363462 user : & mut User ,
34373463 filler : Option < & mut User > ,
0 commit comments