[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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
CAmount CWalletTx::GetAvailableCredit(bool fUseCache, const isminefilter& filter) const
|
||||||
{
|
{
|
||||||
if (pwallet == nullptr)
|
if (pwallet == nullptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1977,8 +1977,17 @@ CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
||||||
if (IsCoinBase() && GetBlocksToMaturity() > 0)
|
if (IsCoinBase() && GetBlocksToMaturity() > 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (fUseCache && fAvailableCreditCached)
|
CAmount* cache = nullptr;
|
||||||
return nAvailableCreditCached;
|
bool* cache_used = nullptr;
|
||||||
|
|
||||||
|
if (filter == ISMINE_SPENDABLE) {
|
||||||
|
cache = &nAvailableCreditCached;
|
||||||
|
cache_used = &fAvailableCreditCached;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fUseCache && cache_used && *cache_used) {
|
||||||
|
return *cache;
|
||||||
|
}
|
||||||
|
|
||||||
CAmount nCredit = 0;
|
CAmount nCredit = 0;
|
||||||
uint256 hashTx = GetHash();
|
uint256 hashTx = GetHash();
|
||||||
|
@ -1987,14 +1996,16 @@ CAmount CWalletTx::GetAvailableCredit(bool fUseCache) const
|
||||||
if (!pwallet->IsSpent(hashTx, i))
|
if (!pwallet->IsSpent(hashTx, i))
|
||||||
{
|
{
|
||||||
const CTxOut &txout = tx->vout[i];
|
const CTxOut &txout = tx->vout[i];
|
||||||
nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE);
|
nCredit += pwallet->GetCredit(txout, filter);
|
||||||
if (!MoneyRange(nCredit))
|
if (!MoneyRange(nCredit))
|
||||||
throw std::runtime_error(std::string(__func__) + " : value out of range");
|
throw std::runtime_error(std::string(__func__) + " : value out of range");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nAvailableCreditCached = nCredit;
|
if (cache) {
|
||||||
fAvailableCreditCached = true;
|
*cache = nCredit;
|
||||||
|
*cache_used = true;
|
||||||
|
}
|
||||||
return nCredit;
|
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;
|
CAmount nTotal = 0;
|
||||||
{
|
{
|
||||||
|
@ -2162,8 +2173,9 @@ CAmount CWallet::GetBalance() const
|
||||||
for (const auto& entry : mapWallet)
|
for (const auto& entry : mapWallet)
|
||||||
{
|
{
|
||||||
const CWalletTx* pcoin = &entry.second;
|
const CWalletTx* pcoin = &entry.second;
|
||||||
if (pcoin->IsTrusted())
|
if (pcoin->IsTrusted()) {
|
||||||
nTotal += pcoin->GetAvailableCredit();
|
nTotal += pcoin->GetAvailableCredit(true, filter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -460,7 +460,7 @@ public:
|
||||||
CAmount GetDebit(const isminefilter& filter) const;
|
CAmount GetDebit(const isminefilter& filter) const;
|
||||||
CAmount GetCredit(const isminefilter& filter) const;
|
CAmount GetCredit(const isminefilter& filter) const;
|
||||||
CAmount GetImmatureCredit(bool fUseCache=true) 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 GetImmatureWatchOnlyCredit(const bool fUseCache=true) const;
|
||||||
CAmount GetAvailableWatchOnlyCredit(const bool fUseCache=true) const;
|
CAmount GetAvailableWatchOnlyCredit(const bool fUseCache=true) const;
|
||||||
CAmount GetChange() const;
|
CAmount GetChange() const;
|
||||||
|
@ -944,7 +944,7 @@ public:
|
||||||
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
|
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
|
||||||
// ResendWalletTransactionsBefore may only be called if fBroadcastTransactions!
|
// ResendWalletTransactionsBefore may only be called if fBroadcastTransactions!
|
||||||
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);
|
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);
|
||||||
CAmount GetBalance() const;
|
CAmount GetBalance(const isminefilter& filter=ISMINE_SPENDABLE) const;
|
||||||
CAmount GetUnconfirmedBalance() const;
|
CAmount GetUnconfirmedBalance() const;
|
||||||
CAmount GetImmatureBalance() const;
|
CAmount GetImmatureBalance() const;
|
||||||
CAmount GetWatchOnlyBalance() const;
|
CAmount GetWatchOnlyBalance() const;
|
||||||
|
|
Loading…
Reference in a new issue