[wallet] deduplicate GetAvailableCredit logic

This commit is contained in:
John Newbery 2018-06-27 11:46:27 -04:00
parent ef7bc8893c
commit 7110c830f8

View file

@ -1983,6 +1983,9 @@ CAmount CWalletTx::GetAvailableCredit(bool fUseCache, const isminefilter& filter
if (filter == ISMINE_SPENDABLE) { if (filter == ISMINE_SPENDABLE) {
cache = &nAvailableCreditCached; cache = &nAvailableCreditCached;
cache_used = &fAvailableCreditCached; cache_used = &fAvailableCreditCached;
} else if (filter == ISMINE_WATCH_ONLY) {
cache = &nAvailableWatchCreditCached;
cache_used = &fAvailableWatchCreditCached;
} }
if (fUseCache && cache_used && *cache_used) { if (fUseCache && cache_used && *cache_used) {
@ -2025,31 +2028,7 @@ CAmount CWalletTx::GetImmatureWatchOnlyCredit(const bool fUseCache) const
CAmount CWalletTx::GetAvailableWatchOnlyCredit(const bool fUseCache) const CAmount CWalletTx::GetAvailableWatchOnlyCredit(const bool fUseCache) const
{ {
if (pwallet == nullptr) return GetAvailableCredit(fUseCache, ISMINE_WATCH_ONLY);
return 0;
// Must wait until coinbase is safely deep enough in the chain before valuing it
if (IsCoinBase() && GetBlocksToMaturity() > 0)
return 0;
if (fUseCache && fAvailableWatchCreditCached)
return nAvailableWatchCreditCached;
CAmount nCredit = 0;
for (unsigned int i = 0; i < tx->vout.size(); i++)
{
if (!pwallet->IsSpent(GetHash(), i))
{
const CTxOut &txout = tx->vout[i];
nCredit += pwallet->GetCredit(txout, ISMINE_WATCH_ONLY);
if (!MoneyRange(nCredit))
throw std::runtime_error(std::string(__func__) + ": value out of range");
}
}
nAvailableWatchCreditCached = nCredit;
fAvailableWatchCreditCached = true;
return nCredit;
} }
CAmount CWalletTx::GetChange() const CAmount CWalletTx::GetChange() const