refactor: add new helper methods

add Shuffle, Erase, and Add to CoinsResult struct
add a helper function for mapping TxoutType to OutputType

Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
This commit is contained in:
josibake 2022-07-29 10:01:25 +02:00
parent f5649db9d5
commit 3f27a2adce
No known key found for this signature in database
GPG key ID: 8ADCB558C4F33D65
2 changed files with 45 additions and 0 deletions

View file

@ -105,6 +105,47 @@ void CoinsResult::clear()
other.clear();
}
void CoinsResult::Erase(std::set<COutPoint>& preset_coins)
{
for (auto& it : coins) {
auto& vec = it.second;
auto i = std::find_if(vec.begin(), vec.end(), [&](const COutput &c) { return preset_coins.count(c.outpoint);});
if (i != vec.end()) {
vec.erase(i);
break;
}
}
}
void CoinsResult::Shuffle(FastRandomContext& rng_fast)
{
for (auto& it : coins) {
::Shuffle(it.second.begin(), it.second.end(), rng_fast);
}
}
void CoinsResult::Add(OutputType type, const COutput& out)
{
coins[type].emplace_back(out);
}
static OutputType GetOutputType(TxoutType type, bool is_from_p2sh)
{
switch (type) {
case TxoutType::WITNESS_V1_TAPROOT:
return OutputType::BECH32M;
case TxoutType::WITNESS_V0_KEYHASH:
case TxoutType::WITNESS_V0_SCRIPTHASH:
if (is_from_p2sh) return OutputType::P2SH_SEGWIT;
else return OutputType::BECH32;
case TxoutType::SCRIPTHASH:
case TxoutType::PUBKEYHASH:
return OutputType::LEGACY;
default:
return OutputType::UNKNOWN;
}
}
CoinsResult AvailableCoins(const CWallet& wallet,
const CCoinControl* coinControl,
std::optional<CFeeRate> feerate,

View file

@ -38,6 +38,7 @@ TxSize CalculateMaximumSignedTxSize(const CTransaction& tx, const CWallet* walle
* the CoinsResult struct as if it was a vector
*/
struct CoinsResult {
std::map<OutputType, std::vector<COutput>> coins;
/** Vectors for each OutputType */
std::vector<COutput> legacy;
std::vector<COutput> P2SH_segwit;
@ -54,6 +55,9 @@ struct CoinsResult {
* i.e., methods can work with individual OutputType vectors or on the entire object */
uint64_t size() const;
void clear();
void Erase(std::set<COutPoint>& preset_coins);
void Shuffle(FastRandomContext& rng_fast);
void Add(OutputType type, const COutput& out);
/** Sum of all available coins */
CAmount total_amount{0};