@@ -84,7 +84,8 @@ FUZZ_TARGET(coinselection)
84
84
85
85
const CFeeRate long_term_fee_rate{ConsumeMoney (fuzzed_data_provider, /* max=*/ COIN)};
86
86
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)};
88
89
const CAmount min_viable_change{ConsumeMoney (fuzzed_data_provider, /* max=*/ COIN)};
89
90
const CAmount target{fuzzed_data_provider.ConsumeIntegralInRange <CAmount>(1 , MAX_MONEY)};
90
91
const bool subtract_fee_outputs{fuzzed_data_provider.ConsumeBool ()};
@@ -95,9 +96,11 @@ FUZZ_TARGET(coinselection)
95
96
coin_params.m_long_term_feerate = long_term_fee_rate;
96
97
coin_params.m_effective_feerate = effective_fee_rate;
97
98
coin_params.min_viable_change = min_viable_change;
98
- coin_params.m_cost_of_change = cost_of_change;
99
99
coin_params.change_output_size = fuzzed_data_provider.ConsumeIntegralInRange <int >(10 , 1000 );
100
100
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 );
101
104
102
105
int next_locktime{0 };
103
106
CAmount total_balance{CreateCoins (fuzzed_data_provider, utxo_pool, coin_params, next_locktime)};
0 commit comments