Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/wallet.cpp
Show First 20 Lines • Show All 2,591 Lines • ▼ Show 20 Lines | if (coin_selection_params.use_bnb) { | ||||
// Filter by the min conf specs and add to utxo_pool and calculate | // Filter by the min conf specs and add to utxo_pool and calculate | ||||
// effective value | // effective value | ||||
for (OutputGroup &group : groups) { | for (OutputGroup &group : groups) { | ||||
if (!group.EligibleForSpending(eligibility_filter)) { | if (!group.EligibleForSpending(eligibility_filter)) { | ||||
continue; | continue; | ||||
} | } | ||||
group.fee = Amount::zero(); | |||||
group.long_term_fee = Amount::zero(); | |||||
group.effective_value = Amount::zero(); | |||||
for (auto it = group.m_outputs.begin(); | |||||
it != group.m_outputs.end();) { | |||||
const CInputCoin &coin = *it; | |||||
Amount effective_value = | |||||
coin.txout.nValue - | |||||
(coin.m_input_bytes < 0 | |||||
? Amount::zero() | |||||
: coin_selection_params.effective_fee.GetFee( | |||||
coin.m_input_bytes)); | |||||
// Only include outputs that are positive effective value (i.e. | |||||
// not dust) | |||||
if (effective_value > Amount::zero()) { | |||||
group.fee += | |||||
coin.m_input_bytes < 0 | |||||
? Amount::zero() | |||||
: coin_selection_params.effective_fee.GetFee( | |||||
coin.m_input_bytes); | |||||
group.long_term_fee += | |||||
coin.m_input_bytes < 0 | |||||
? Amount::zero() | |||||
: long_term_feerate.GetFee(coin.m_input_bytes); | |||||
if (coin_selection_params.m_subtract_fee_outputs) { | if (coin_selection_params.m_subtract_fee_outputs) { | ||||
group.effective_value += coin.txout.nValue; | // Set the effective feerate to 0 as we don't want to use the | ||||
} else { | // effective value since the fees will be deducted from the | ||||
group.effective_value += effective_value; | // output | ||||
} | group.SetFees(CFeeRate(Amount::zero()) /* effective_feerate */, | ||||
++it; | long_term_feerate); | ||||
} else { | } else { | ||||
it = group.Discard(coin); | group.SetFees(coin_selection_params.effective_fee, | ||||
} | long_term_feerate); | ||||
} | } | ||||
if (group.effective_value > Amount::zero()) { | |||||
utxo_pool.push_back(group); | OutputGroup pos_group = group.GetPositiveOnlyGroup(); | ||||
if (pos_group.effective_value > Amount::zero()) { | |||||
utxo_pool.push_back(pos_group); | |||||
} | } | ||||
} | } | ||||
// Calculate the fees for things that aren't inputs | // Calculate the fees for things that aren't inputs | ||||
Amount not_input_fees = coin_selection_params.effective_fee.GetFee( | Amount not_input_fees = coin_selection_params.effective_fee.GetFee( | ||||
coin_selection_params.tx_noinputs_size); | coin_selection_params.tx_noinputs_size); | ||||
bnb_used = true; | bnb_used = true; | ||||
return SelectCoinsBnB(utxo_pool, nTargetValue, cost_of_change, | return SelectCoinsBnB(utxo_pool, nTargetValue, cost_of_change, | ||||
setCoinsRet, nValueRet, not_input_fees); | setCoinsRet, nValueRet, not_input_fees); | ||||
▲ Show 20 Lines • Show All 2,477 Lines • Show Last 20 Lines |