Skip to content

Commit b5746e4

Browse files
committed
skip builder fee accrual on full escrow account, dont throw
1 parent dd0a964 commit b5746e4

File tree

3 files changed

+25
-40
lines changed

3 files changed

+25
-40
lines changed

programs/drift/src/controller/orders.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2308,7 +2308,7 @@ pub fn fulfill_perp_order_with_amm(
23082308
filler_reward,
23092309
referee_discount,
23102310
referrer_reward,
2311-
fee_to_market_for_lp,
2311+
fee_to_market_for_lp: _fee_to_market_for_lp,
23122312
maker_rebate,
23132313
builder_fee: builder_fee_option,
23142314
} = fees::calculate_fee_for_fulfillment_with_amm(

programs/drift/src/instructions/keeper.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
865865
.iter()
866866
.position(|order| order.is_available())
867867
.ok_or(ErrorCode::MaxNumberOfOrders)?;
868-
escrow.add_order(RevenueShareOrder::new(
868+
match escrow.add_order(RevenueShareOrder::new(
869869
verified_message_and_signature.builder_idx.unwrap(),
870870
taker.sub_account_id,
871871
new_order_id,
@@ -874,8 +874,13 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
874874
market_index,
875875
RevenueShareOrderBitFlag::Open as u8,
876876
new_order_index as u8,
877-
))?;
878-
escrow.find_order_mut(taker.sub_account_id, new_order_id)
877+
)) {
878+
Ok(order_idx) => escrow.get_order_mut(order_idx).ok(),
879+
Err(_) => {
880+
msg!("Failed to add stop loss order, escrow is full");
881+
None
882+
}
883+
}
879884
} else {
880885
None
881886
};
@@ -925,7 +930,7 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
925930
.iter()
926931
.position(|order| order.is_available())
927932
.ok_or(ErrorCode::MaxNumberOfOrders)?;
928-
escrow.add_order(RevenueShareOrder::new(
933+
match escrow.add_order(RevenueShareOrder::new(
929934
verified_message_and_signature.builder_idx.unwrap(),
930935
taker.sub_account_id,
931936
new_order_id,
@@ -934,8 +939,13 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
934939
market_index,
935940
RevenueShareOrderBitFlag::Open as u8,
936941
new_order_index as u8,
937-
))?;
938-
escrow.find_order_mut(taker.sub_account_id, new_order_id)
942+
)) {
943+
Ok(order_idx) => escrow.get_order_mut(order_idx).ok(),
944+
Err(_) => {
945+
msg!("Failed to add take profit order, escrow is full");
946+
None
947+
}
948+
}
939949
} else {
940950
None
941951
};
@@ -968,7 +978,7 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
968978
.iter()
969979
.position(|order| order.is_available())
970980
.ok_or(ErrorCode::MaxNumberOfOrders)?;
971-
escrow.add_order(RevenueShareOrder::new(
981+
match escrow.add_order(RevenueShareOrder::new(
972982
verified_message_and_signature.builder_idx.unwrap(),
973983
taker.sub_account_id,
974984
new_order_id,
@@ -977,8 +987,13 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
977987
market_index,
978988
RevenueShareOrderBitFlag::Open as u8,
979989
new_order_index as u8,
980-
))?;
981-
escrow.find_order_mut(taker.sub_account_id, new_order_id)
990+
)) {
991+
Ok(order_idx) => escrow.get_order_mut(order_idx).ok(),
992+
Err(_) => {
993+
msg!("Failed to add order, escrow is full");
994+
None
995+
}
996+
}
982997
} else {
983998
None
984999
};

programs/drift/src/state/revenue_share.rs

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -480,36 +480,6 @@ impl<'a> RevenueShareEscrowZeroCopyMut<'a> {
480480
Err(ErrorCode::RevenueShareEscrowOrdersAccountFull.into())
481481
}
482482

483-
pub fn find_order_mut(
484-
&mut self,
485-
sub_account_id: u16,
486-
order_id: u32,
487-
) -> Option<&mut RevenueShareOrder> {
488-
for i in 0..self.orders_len() {
489-
if let Ok(existing_order) = self.get_order(i) {
490-
if existing_order.order_id == order_id
491-
&& existing_order.sub_account_id == sub_account_id
492-
{
493-
return self.get_order_mut(i).ok();
494-
}
495-
}
496-
}
497-
None
498-
}
499-
500-
pub fn find_order(&mut self, sub_account_id: u16, order_id: u32) -> Option<&RevenueShareOrder> {
501-
for i in 0..self.orders_len() {
502-
if let Ok(existing_order) = self.get_order(i) {
503-
if existing_order.order_id == order_id
504-
&& existing_order.sub_account_id == sub_account_id
505-
{
506-
return self.get_order(i).ok();
507-
}
508-
}
509-
}
510-
None
511-
}
512-
513483
/// Marks any [`RevenueShareOrder`]s as Complete if there is no longer a corresponding
514484
/// open order in the user's account. This is used to lazily reconcile state when
515485
/// in place_order and settle_pnl instead of requiring explicit updates on cancels.

0 commit comments

Comments
 (0)