Skip to content

Commit 3af96e0

Browse files
committed
Merge 7524fcf into merged_master (Bitcoin PR bitcoin/bitcoin#28372)
2 parents 4c86bb8 + 7524fcf commit 3af96e0

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/wallet/test/fuzz/coinselection.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ FUZZ_TARGET(coinselection)
8787
const CFeeRate effective_fee_rate{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
8888
// Discard feerate must be at least dust relay feerate
8989
const CFeeRate discard_fee_rate{fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(DUST_RELAY_TX_FEE, COIN)};
90-
const CAmount min_viable_change{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
9190
const CAmount target{fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(1, MAX_MONEY)};
9291
const bool subtract_fee_outputs{fuzzed_data_provider.ConsumeBool()};
9392

@@ -96,12 +95,15 @@ FUZZ_TARGET(coinselection)
9695
coin_params.m_subtract_fee_outputs = subtract_fee_outputs;
9796
coin_params.m_long_term_feerate = long_term_fee_rate;
9897
coin_params.m_effective_feerate = effective_fee_rate;
99-
coin_params.min_viable_change = min_viable_change;
100-
coin_params.change_output_size = fuzzed_data_provider.ConsumeIntegralInRange<int>(10, 1000);
98+
coin_params.change_output_size = fuzzed_data_provider.ConsumeIntegralInRange(1, MAX_SCRIPT_SIZE);
10199
coin_params.m_change_fee = effective_fee_rate.GetFee(coin_params.change_output_size);
102100
coin_params.m_discard_feerate = discard_fee_rate;
103101
coin_params.change_spend_size = fuzzed_data_provider.ConsumeIntegralInRange<int>(41, 1000);
104-
coin_params.m_cost_of_change = coin_params.m_change_fee + coin_params.m_discard_feerate.GetFee(coin_params.change_spend_size);
102+
const auto change_spend_fee{coin_params.m_discard_feerate.GetFee(coin_params.change_spend_size)};
103+
coin_params.m_cost_of_change = coin_params.m_change_fee + change_spend_fee;
104+
CScript change_out_script = CScript() << std::vector<unsigned char>(coin_params.change_output_size, OP_TRUE);
105+
const auto dust{GetDustThreshold(CTxOut{/*nValueIn=*/0, change_out_script}, coin_params.m_discard_feerate)};
106+
coin_params.min_viable_change = std::max(change_spend_fee + 1, dust);
105107

106108
int next_locktime{0};
107109
CAmount total_balance{CreateCoins(fuzzed_data_provider, utxo_pool, coin_params, next_locktime)};
@@ -120,7 +122,7 @@ FUZZ_TARGET(coinselection)
120122
auto result_bnb = coin_params.m_subtract_fee_outputs ? util::Error{Untranslated("BnB disabled when SFFO is enabled")} :
121123
SelectCoinsBnB(group_pos, target, coin_params.m_cost_of_change, MAX_STANDARD_TX_WEIGHT);
122124
if (result_bnb) {
123-
assert(result_bnb->GetChange(coin_params.m_cost_of_change, CAmount{0}) == CAmountMap{});
125+
assert(result_bnb->GetChange(coin_params.min_viable_change, coin_params.m_change_fee) == CAmountMap{});
124126
CAmountMap map_target{{CAsset(), target}};
125127
assert(result_bnb->GetSelectedValue() >= map_target);
126128
(void)result_bnb->GetShuffledInputVector();

0 commit comments

Comments
 (0)