[wallet] GetBalance can take an isminefilter filter.
GetBalance() can now take an ismine filter, which is passed down to GetAvailableCredit. This allows GetBalance to be used to get watch-only balances.
This commit is contained in:
parent
d96bdd7830
commit
4279da4785
2 changed files with 23 additions and 11 deletions
|
@ -1968,7 +1968,7 @@ CAmount CWalletTx::GetImmatureCredit(bool fUseCache) const
|
|||
return 0;
|
||||
}
|
||||
|
||||
CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
||||
CAmount CWalletTx::GetAvailableCredit(bool fUseCache, const isminefilter& filter) const
|
||||
{
|
||||
if (pwallet == nullptr)
|
||||
return 0;
|
||||
|
@ -1977,8 +1977,17 @@ CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
|||
if (IsCoinBase() && GetBlocksToMaturity() > 0)
|
||||
return 0;
|
||||
|
||||
if (fUseCache && fAvailableCreditCached)
|
||||
return nAvailableCreditCached;
|
||||
CAmount* cache = nullptr;
|
||||
bool* cache_used = nullptr;
|
||||
|
||||
if (filter == ISMINE_SPENDABLE) {
|
||||
cache = &nAvailableCreditCached;
|
||||
cache_used = &fAvailableCreditCached;
|
||||
}
|
||||
|
||||
if (fUseCache && cache_used && *cache_used) {
|
||||
return *cache;
|
||||
}
|
||||
|
||||
CAmount nCredit = 0;
|
||||
uint256 hashTx = GetHash();
|
||||
|
@ -1987,14 +1996,16 @@ CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
|||
if (!pwallet->IsSpent(hashTx, i))
|
||||
{
|
||||
const CTxOut &txout = tx->vout[i];
|
||||
nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE);
|
||||
nCredit += pwallet->GetCredit(txout, filter);
|
||||
if (!MoneyRange(nCredit))
|
||||
throw std::runtime_error(std::string(__func__) + " : value out of range");
|
||||
}
|
||||
}
|
||||
|
||||
nAvailableCreditCached = nCredit;
|
||||
fAvailableCreditCached = true;
|
||||
if (cache) {
|
||||
*cache = nCredit;
|
||||
*cache_used = true;
|
||||
}
|
||||
return nCredit;
|
||||
}
|
||||
|
||||
|
@ -2154,7 +2165,7 @@ void CWallet::ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman
|
|||
*/
|
||||
|
||||
|
||||
CAmount CWallet::GetBalance() const
|
||||
CAmount CWallet::GetBalance(const isminefilter& filter) const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
{
|
||||
|
@ -2162,8 +2173,9 @@ CAmount CWallet::GetBalance() const
|
|||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx* pcoin = &entry.second;
|
||||
if (pcoin->IsTrusted())
|
||||
nTotal += pcoin->GetAvailableCredit();
|
||||
if (pcoin->IsTrusted()) {
|
||||
nTotal += pcoin->GetAvailableCredit(true, filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -460,7 +460,7 @@ public:
|
|||
CAmount GetDebit(const isminefilter& filter) const;
|
||||
CAmount GetCredit(const isminefilter& filter) const;
|
||||
CAmount GetImmatureCredit(bool fUseCache=true) const;
|
||||
CAmount GetAvailableCredit(bool fUseCache=true) const;
|
||||
CAmount GetAvailableCredit(bool fUseCache=true, const isminefilter& filter=ISMINE_SPENDABLE) const;
|
||||
CAmount GetImmatureWatchOnlyCredit(const bool fUseCache=true) const;
|
||||
CAmount GetAvailableWatchOnlyCredit(const bool fUseCache=true) const;
|
||||
CAmount GetChange() const;
|
||||
|
@ -944,7 +944,7 @@ public:
|
|||
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
|
||||
// ResendWalletTransactionsBefore may only be called if fBroadcastTransactions!
|
||||
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);
|
||||
CAmount GetBalance() const;
|
||||
CAmount GetBalance(const isminefilter& filter=ISMINE_SPENDABLE) const;
|
||||
CAmount GetUnconfirmedBalance() const;
|
||||
CAmount GetImmatureBalance() const;
|
||||
CAmount GetWatchOnlyBalance() const;
|
||||
|
|
Loading…
Reference in a new issue