mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-12 04:42:36 -03:00
Merge #18262: bnb: exit selection when best_waste is 0
9b5950db86
bnb: exit selection when best_waste is 0 (Andrew Chow) Pull request description: If we find a solution which has no waste, just use that. This solution is what we would consider to be optimal, and other solutions we find would have to also have 0 waste, so they are equivalent to the first one with 0 waste. Thus we can optimize by just choosing the first one with 0 waste. Closes #18257 ACKs for top commit: instagibbs: utACK9b5950db86
meshcollider: utACK9b5950db86
Tree-SHA512: 59565ff4a3d8281e7bc0ce87065a34c8d8bf8a95f628ba96b4fe89f1274979165aea6312e5f1f21b418c8c484aafc5166d22d9eff9d127a8192498625d58c557
This commit is contained in:
commit
0856c15706
2 changed files with 6 additions and 4 deletions
|
@ -106,6 +106,9 @@ bool SelectCoinsBnB(std::vector<OutputGroup>& utxo_pool, const CAmount& target_v
|
||||||
best_selection = curr_selection;
|
best_selection = curr_selection;
|
||||||
best_selection.resize(utxo_pool.size());
|
best_selection.resize(utxo_pool.size());
|
||||||
best_waste = curr_waste;
|
best_waste = curr_waste;
|
||||||
|
if (best_waste == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
curr_waste -= (curr_value - actual_target); // Remove the excess value as we will be selecting different coins now
|
curr_waste -= (curr_value - actual_target); // Remove the excess value as we will be selecting different coins now
|
||||||
backtrack = true;
|
backtrack = true;
|
||||||
|
|
|
@ -176,8 +176,8 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
|
||||||
selection.clear();
|
selection.clear();
|
||||||
|
|
||||||
// Select 5 Cent
|
// Select 5 Cent
|
||||||
add_coin(3 * CENT, 3, actual_selection);
|
add_coin(4 * CENT, 4, actual_selection);
|
||||||
add_coin(2 * CENT, 2, actual_selection);
|
add_coin(1 * CENT, 1, actual_selection);
|
||||||
BOOST_CHECK(SelectCoinsBnB(GroupCoins(utxo_pool), 5 * CENT, 0.5 * CENT, selection, value_ret, not_input_fees));
|
BOOST_CHECK(SelectCoinsBnB(GroupCoins(utxo_pool), 5 * CENT, 0.5 * CENT, selection, value_ret, not_input_fees));
|
||||||
BOOST_CHECK(equal_sets(selection, actual_selection));
|
BOOST_CHECK(equal_sets(selection, actual_selection));
|
||||||
BOOST_CHECK_EQUAL(value_ret, 5 * CENT);
|
BOOST_CHECK_EQUAL(value_ret, 5 * CENT);
|
||||||
|
@ -204,9 +204,8 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
|
||||||
|
|
||||||
// Select 10 Cent
|
// Select 10 Cent
|
||||||
add_coin(5 * CENT, 5, utxo_pool);
|
add_coin(5 * CENT, 5, utxo_pool);
|
||||||
|
add_coin(5 * CENT, 5, actual_selection);
|
||||||
add_coin(4 * CENT, 4, actual_selection);
|
add_coin(4 * CENT, 4, actual_selection);
|
||||||
add_coin(3 * CENT, 3, actual_selection);
|
|
||||||
add_coin(2 * CENT, 2, actual_selection);
|
|
||||||
add_coin(1 * CENT, 1, actual_selection);
|
add_coin(1 * CENT, 1, actual_selection);
|
||||||
BOOST_CHECK(SelectCoinsBnB(GroupCoins(utxo_pool), 10 * CENT, 0.5 * CENT, selection, value_ret, not_input_fees));
|
BOOST_CHECK(SelectCoinsBnB(GroupCoins(utxo_pool), 10 * CENT, 0.5 * CENT, selection, value_ret, not_input_fees));
|
||||||
BOOST_CHECK(equal_sets(selection, actual_selection));
|
BOOST_CHECK(equal_sets(selection, actual_selection));
|
||||||
|
|
Loading…
Reference in a new issue