@@ -1007,27 +1007,33 @@ impl<'a> RandomTxMaker<'a> {
10071007 get_random_order_to_fill ( self . orders_store , & orders_cache, & fill_value)
10081008 {
10091009 let filled_value =
1010- calculate_filled_order_value ( & orders_cache, order_id, amount_to_spend) ;
1010+ calculate_filled_order_value ( & orders_cache, order_id, amount_to_spend)
1011+ . unwrap ( ) ;
10111012
1012- if !is_frozen_token ( & filled_value, tokens_cache) {
1013- let input = TxInput :: OrderAccountCommand ( OrderAccountCommand :: FillOrder (
1014- order_id,
1015- amount_to_spend,
1016- key_manager. new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1017- ) ) ;
1013+ if let Some ( filled_value) = filled_value {
1014+ if !is_frozen_token ( & filled_value, tokens_cache) {
1015+ let input =
1016+ TxInput :: OrderAccountCommand ( OrderAccountCommand :: FillOrder (
1017+ order_id,
1018+ amount_to_spend,
1019+ key_manager
1020+ . new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1021+ ) ) ;
10181022
1019- let output = TxOutput :: Transfer (
1020- filled_value,
1021- key_manager. new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1022- ) ;
1023+ let output = TxOutput :: Transfer (
1024+ filled_value,
1025+ key_manager
1026+ . new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1027+ ) ;
10231028
1024- let _ = orders_cache
1025- . fill_order ( order_id, amount_to_spend, OrdersVersion :: V1 )
1026- . unwrap ( ) ;
1027- self . account_command_used = true ;
1029+ let _ = orders_cache
1030+ . fill_order ( order_id, amount_to_spend, OrdersVersion :: V1 )
1031+ . unwrap ( ) ;
1032+ self . account_command_used = true ;
10281033
1029- result_inputs. push ( input) ;
1030- result_outputs. push ( output) ;
1034+ result_inputs. push ( input) ;
1035+ result_outputs. push ( output) ;
1036+ }
10311037 }
10321038 }
10331039 } else if switch == 6 {
@@ -1228,28 +1234,37 @@ impl<'a> RandomTxMaker<'a> {
12281234 & orders_cache,
12291235 order_id,
12301236 Amount :: from_atoms ( atoms) ,
1231- ) ;
1232-
1233- if !is_frozen_token ( & filled_value, tokens_cache) {
1234- result_outputs. push ( TxOutput :: Transfer (
1235- filled_value,
1236- key_manager
1237- . new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1238- ) ) ;
1237+ )
1238+ . unwrap ( ) ;
12391239
1240- result_inputs . push ( TxInput :: OrderAccountCommand (
1241- OrderAccountCommand :: FillOrder (
1242- order_id ,
1243- Amount :: from_atoms ( atoms ) ,
1240+ if let Some ( filled_value ) = filled_value {
1241+ if ! is_frozen_token ( & filled_value , tokens_cache ) {
1242+ result_outputs . push ( TxOutput :: Transfer (
1243+ filled_value ,
12441244 key_manager
12451245 . new_destination ( self . chainstate . get_chain_config ( ) , rng) ,
1246- ) ,
1247- ) ) ;
1248-
1249- let _ = orders_cache
1250- . fill_order ( order_id, Amount :: from_atoms ( atoms) , OrdersVersion :: V1 )
1251- . unwrap ( ) ;
1252- self . account_command_used = true ;
1246+ ) ) ;
1247+
1248+ result_inputs. push ( TxInput :: OrderAccountCommand (
1249+ OrderAccountCommand :: FillOrder (
1250+ order_id,
1251+ Amount :: from_atoms ( atoms) ,
1252+ key_manager. new_destination (
1253+ self . chainstate . get_chain_config ( ) ,
1254+ rng,
1255+ ) ,
1256+ ) ,
1257+ ) ) ;
1258+
1259+ let _ = orders_cache
1260+ . fill_order (
1261+ order_id,
1262+ Amount :: from_atoms ( atoms) ,
1263+ OrdersVersion :: V1 ,
1264+ )
1265+ . unwrap ( ) ;
1266+ self . account_command_used = true ;
1267+ }
12531268 }
12541269 }
12551270 }
@@ -1470,11 +1485,17 @@ fn calculate_filled_order_value(
14701485 view : & impl OrdersAccountingView ,
14711486 order_id : OrderId ,
14721487 fill : Amount ,
1473- ) -> OutputValue {
1488+ ) -> Result < Option < OutputValue > , orders_accounting :: Error > {
14741489 let order_data = view. get_order_data ( & order_id) . unwrap ( ) . unwrap ( ) ;
14751490
1476- let filled_amount =
1477- orders_accounting:: calculate_fill_order ( view, order_id, fill, OrdersVersion :: V1 ) . unwrap ( ) ;
1491+ let result = orders_accounting:: calculate_fill_order ( view, order_id, fill, OrdersVersion :: V1 ) ;
14781492
1479- output_value_with_amount ( order_data. give ( ) , filled_amount)
1493+ match result {
1494+ Ok ( filled_amount) => Ok ( Some ( output_value_with_amount (
1495+ order_data. give ( ) ,
1496+ filled_amount,
1497+ ) ) ) ,
1498+ Err ( orders_accounting:: Error :: OrderUnderbid ( ..) ) => Ok ( None ) ,
1499+ Err ( e) => Err ( e) ,
1500+ }
14801501}
0 commit comments