Skip to content

Commit bf26f97

Browse files
committed
fuzz: coinselection, fix m_cost_of_change
`m_cost_of_change` must not be generated randomly independent from m_change_fee. This commit changes it to set it up according to `wallet/spend`.
1 parent 6d9b26d commit bf26f97

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/wallet/test/fuzz/coinselection.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ FUZZ_TARGET(coinselection)
8484

8585
const CFeeRate long_term_fee_rate{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
8686
const CFeeRate effective_fee_rate{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
87-
const CAmount cost_of_change{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
87+
// Discard feerate must be at least dust relay feerate
88+
const CFeeRate discard_fee_rate{fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(DUST_RELAY_TX_FEE, COIN)};
8889
const CAmount min_viable_change{ConsumeMoney(fuzzed_data_provider, /*max=*/COIN)};
8990
const CAmount target{fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(1, MAX_MONEY)};
9091
const bool subtract_fee_outputs{fuzzed_data_provider.ConsumeBool()};
@@ -95,9 +96,11 @@ FUZZ_TARGET(coinselection)
9596
coin_params.m_long_term_feerate = long_term_fee_rate;
9697
coin_params.m_effective_feerate = effective_fee_rate;
9798
coin_params.min_viable_change = min_viable_change;
98-
coin_params.m_cost_of_change = cost_of_change;
9999
coin_params.change_output_size = fuzzed_data_provider.ConsumeIntegralInRange<int>(10, 1000);
100100
coin_params.m_change_fee = effective_fee_rate.GetFee(coin_params.change_output_size);
101+
coin_params.m_discard_feerate = discard_fee_rate;
102+
coin_params.change_spend_size = fuzzed_data_provider.ConsumeIntegralInRange<int>(41, 1000);
103+
coin_params.m_cost_of_change = coin_params.m_change_fee + coin_params.m_discard_feerate.GetFee(coin_params.change_spend_size);
101104

102105
int next_locktime{0};
103106
CAmount total_balance{CreateCoins(fuzzed_data_provider, utxo_pool, coin_params, next_locktime)};

0 commit comments

Comments
 (0)