@@ -214,42 +214,45 @@ pub mod payments {
214214 let fee_a = self . _calculate_fee (order_a_actual_sell_amount );
215215 // For `order_b`, the actual sold amount is `order_a_actual_buy_amount`.
216216 let fee_b = self . _calculate_fee (order_a_actual_buy_amount );
217- assert_with_byte_array (
218- sell_token . transfer_from (order_a . user, fee_recipient , fee_a . into ()),
219- transfer_failed_error (
220- token : order_a . sell_token, sender : order_a . user, amount : fee_a ,
221- ),
222- );
223- assert_with_byte_array (
224- buy_token . transfer_from (order_b . user, fee_recipient , fee_b . into ()),
225- transfer_failed_error (
226- token : order_a . buy_token, sender : order_b . user, amount : fee_b ,
227- ),
228- );
217+
218+ // Transfer fees only if they are non-zero
219+ if fee_a . is_non_zero () {
220+ assert_with_byte_array (
221+ sell_token . transfer_from (order_a . user, fee_recipient , fee_a . into ()),
222+ transfer_failed_error (
223+ token : order_a . sell_token, sender : order_a . user, amount : fee_a ,
224+ ),
225+ );
226+ }
227+ if fee_b . is_non_zero () {
228+ assert_with_byte_array (
229+ buy_token . transfer_from (order_b . user, fee_recipient , fee_b . into ()),
230+ transfer_failed_error (
231+ token : order_a . buy_token, sender : order_b . user, amount : fee_b ,
232+ ),
233+ );
234+ }
229235
230236 // Transfer the actual amounts.
231- assert_with_byte_array (
232- sell_token
233- . transfer_from (
234- order_a . user, order_b . user, (order_a_actual_sell_amount - fee_a ). into (),
237+ let net_sell_amount = order_a_actual_sell_amount - fee_a ;
238+ let net_buy_amount = order_a_actual_buy_amount - fee_b ;
239+
240+ if net_sell_amount . is_non_zero () {
241+ assert_with_byte_array (
242+ sell_token . transfer_from (order_a . user, order_b . user, net_sell_amount . into ()),
243+ transfer_failed_error (
244+ token : order_a . sell_token, sender : order_a . user, amount : net_sell_amount ,
235245 ),
236- transfer_failed_error (
237- token : order_a . sell_token,
238- sender : order_a . user,
239- amount : order_a_actual_sell_amount - fee_a ,
240- ),
241- );
242- assert_with_byte_array (
243- buy_token
244- . transfer_from (
245- order_b . user, order_a . user, (order_a_actual_buy_amount - fee_b ). into (),
246+ );
247+ }
248+ if net_buy_amount . is_non_zero () {
249+ assert_with_byte_array (
250+ buy_token . transfer_from (order_b . user, order_a . user, net_buy_amount . into ()),
251+ transfer_failed_error (
252+ token : order_a . buy_token, sender : order_b . user, amount : net_buy_amount ,
246253 ),
247- transfer_failed_error (
248- token : order_a . buy_token,
249- sender : order_b . user,
250- amount : order_a_actual_buy_amount - fee_b ,
251- ),
252- );
254+ );
255+ }
253256
254257 // Emit an event.
255258 self
0 commit comments