mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-30 18:35:54 +02:00
wallet: Get all balances in one call
This commit is contained in:
@@ -2154,84 +2154,32 @@ void CWallet::ResendWalletTransactions(interfaces::Chain::Lock& locked_chain, in
|
||||
*/
|
||||
|
||||
|
||||
CAmount CWallet::GetBalance(const isminefilter& filter, const int min_depth) const
|
||||
CWallet::Balance CWallet::GetBalance(const int min_depth) const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
Balance ret;
|
||||
{
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx& wtx = entry.second;
|
||||
if (wtx.IsTrusted(*locked_chain) && wtx.GetDepthInMainChain(*locked_chain) >= min_depth) {
|
||||
nTotal += wtx.GetAvailableCredit(*locked_chain, true, filter);
|
||||
const bool is_trusted{wtx.IsTrusted(*locked_chain)};
|
||||
const int tx_depth{wtx.GetDepthInMainChain(*locked_chain)};
|
||||
const CAmount tx_credit_mine{wtx.GetAvailableCredit(*locked_chain, /* fUseCache */ true, ISMINE_SPENDABLE)};
|
||||
const CAmount tx_credit_watchonly{wtx.GetAvailableCredit(*locked_chain, /* fUseCache */ true, ISMINE_WATCH_ONLY)};
|
||||
if (is_trusted && tx_depth >= min_depth) {
|
||||
ret.m_mine_trusted += tx_credit_mine;
|
||||
ret.m_watchonly_trusted += tx_credit_watchonly;
|
||||
}
|
||||
if (!is_trusted && tx_depth == 0 && wtx.InMempool()) {
|
||||
ret.m_mine_untrusted_pending += tx_credit_mine;
|
||||
ret.m_watchonly_untrusted_pending += tx_credit_watchonly;
|
||||
}
|
||||
ret.m_mine_immature += wtx.GetImmatureCredit(*locked_chain);
|
||||
ret.m_watchonly_immature += wtx.GetImmatureWatchOnlyCredit(*locked_chain);
|
||||
}
|
||||
}
|
||||
|
||||
return nTotal;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetUnconfirmedBalance() const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
{
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx& wtx = entry.second;
|
||||
if (!wtx.IsTrusted(*locked_chain) && wtx.GetDepthInMainChain(*locked_chain) == 0 && wtx.InMempool())
|
||||
nTotal += wtx.GetAvailableCredit(*locked_chain);
|
||||
}
|
||||
}
|
||||
return nTotal;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetImmatureBalance() const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
{
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx& wtx = entry.second;
|
||||
nTotal += wtx.GetImmatureCredit(*locked_chain);
|
||||
}
|
||||
}
|
||||
return nTotal;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetUnconfirmedWatchOnlyBalance() const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
{
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx& wtx = entry.second;
|
||||
if (!wtx.IsTrusted(*locked_chain) && wtx.GetDepthInMainChain(*locked_chain) == 0 && wtx.InMempool())
|
||||
nTotal += wtx.GetAvailableCredit(*locked_chain, true, ISMINE_WATCH_ONLY);
|
||||
}
|
||||
}
|
||||
return nTotal;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetImmatureWatchOnlyBalance() const
|
||||
{
|
||||
CAmount nTotal = 0;
|
||||
{
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
for (const auto& entry : mapWallet)
|
||||
{
|
||||
const CWalletTx& wtx = entry.second;
|
||||
nTotal += wtx.GetImmatureWatchOnlyCredit(*locked_chain);
|
||||
}
|
||||
}
|
||||
return nTotal;
|
||||
return ret;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetAvailableBalance(const CCoinControl* coinControl) const
|
||||
|
||||
Reference in New Issue
Block a user