Skip to content

Commit 1962093

Browse files
committed
Fix underbidding in simulation
1 parent 816b30b commit 1962093

1 file changed

Lines changed: 61 additions & 40 deletions

File tree

chainstate/test-framework/src/random_tx_maker.rs

Lines changed: 61 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)