In the bitcoin-core codebase, it seems that discard fee-rate and long-term fee-rate are used interchangeably when computing the cost of change. Consider the following code
excerpts:
cost_of_change = discard_feerate.GetFee(change_spend_size) + effective_feerate.GetFee(change_output_size);
ref: https://github.com/bitcoin/bitcoin/blob/2990bd773551c835ab0b6b59d85730adab2fd428/src/wallet/spend.cpp#L1182
and also:
cost_of_change = effective_feerate.GetFee(change_output_size) + long_term_feerate.GetFee(change_spend_size);
ref: https://github.com/bitcoin/bitcoin/blob/2990bd773551c835ab0b6b59d85730adab2fd428/src/wallet/test/fuzz/coinselection.cpp#L96
In both of these snippets, the cost_of_change is being computed, however, one uses the long-term fee-rate while the other uses the discard fee-rate. Are these two terms actually distinct or can they be used interchangeably?
To my knowledge, cost_of_change should be calculated using the discard fee_rate, and the long_term fee_rate is useful as a parameter within the selection algorithm for knowing if the current fee-rate is cheap or expensive. And yet, I see these two code pieces which seem to conflate the two.










