Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/coinselection.cpp
Show First 20 Lines • Show All 250 Lines • ▼ Show 20 Lines | bool KnapsackSolver(const Amount nTargetValue, std::vector<OutputGroup> &groups, | ||||
setCoinsRet.clear(); | setCoinsRet.clear(); | ||||
nValueRet = Amount::zero(); | nValueRet = Amount::zero(); | ||||
// List of values less than target | // List of values less than target | ||||
boost::optional<OutputGroup> lowest_larger; | boost::optional<OutputGroup> lowest_larger; | ||||
std::vector<OutputGroup> applicable_groups; | std::vector<OutputGroup> applicable_groups; | ||||
Amount nTotalLower = Amount::zero(); | Amount nTotalLower = Amount::zero(); | ||||
random_shuffle(groups.begin(), groups.end(), GetRandInt); | Shuffle(groups.begin(), groups.end(), FastRandomContext()); | ||||
for (const OutputGroup &group : groups) { | for (const OutputGroup &group : groups) { | ||||
if (group.m_value == nTargetValue) { | if (group.m_value == nTargetValue) { | ||||
util::insert(setCoinsRet, group.m_outputs); | util::insert(setCoinsRet, group.m_outputs); | ||||
nValueRet += group.m_value; | nValueRet += group.m_value; | ||||
return true; | return true; | ||||
} else if (group.m_value < nTargetValue + MIN_CHANGE) { | } else if (group.m_value < nTargetValue + MIN_CHANGE) { | ||||
applicable_groups.push_back(group); | applicable_groups.push_back(group); | ||||
▲ Show 20 Lines • Show All 112 Lines • Show Last 20 Lines |