receive.h raw
1 // Copyright (c) 2021-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef BITCOIN_WALLET_RECEIVE_H
6 #define BITCOIN_WALLET_RECEIVE_H
7
8 #include <consensus/amount.h>
9 #include <primitives/transaction_identifier.h>
10 #include <wallet/transaction.h>
11 #include <wallet/wallet.h>
12
13 namespace wallet {
14 bool InputIsMine(const CWallet& wallet, const CTxIn& txin) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
15
16 /** Returns whether all of the inputs belong to the wallet*/
17 bool AllInputsMine(const CWallet& wallet, const CTransaction& tx);
18
19 CAmount OutputGetCredit(const CWallet& wallet, const CTxOut& txout);
20 CAmount TxGetCredit(const CWallet& wallet, const CTransaction& tx);
21
22 bool ScriptIsChange(const CWallet& wallet, const CScript& script) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
23 bool OutputIsChange(const CWallet& wallet, const CTxOut& txout) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
24 CAmount OutputGetChange(const CWallet& wallet, const CTxOut& txout) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
25 CAmount TxGetChange(const CWallet& wallet, const CTransaction& tx);
26
27 CAmount CachedTxGetCredit(const CWallet& wallet, const CWalletTx& wtx, bool avoid_reuse)
28 EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
29 CAmount CachedTxGetDebit(const CWallet& wallet, const CWalletTx& wtx, bool avoid_reuse);
30 CAmount CachedTxGetChange(const CWallet& wallet, const CWalletTx& wtx);
31 struct COutputEntry
32 {
33 CTxDestination destination;
34 CAmount amount;
35 int vout;
36 };
37 void CachedTxGetAmounts(const CWallet& wallet, const CWalletTx& wtx,
38 std::list<COutputEntry>& listReceived,
39 std::list<COutputEntry>& listSent,
40 CAmount& nFee,
41 bool include_change);
42 bool CachedTxIsFromMe(const CWallet& wallet, const CWalletTx& wtx);
43 bool CachedTxIsTrusted(const CWallet& wallet, const CWalletTx& wtx, std::set<Txid>& trusted_parents) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
44 bool CachedTxIsTrusted(const CWallet& wallet, const CWalletTx& wtx);
45
46 struct Balance {
47 CAmount m_mine_trusted{0}; //!< Trusted, at depth=GetBalance.min_depth or more
48 CAmount m_mine_untrusted_pending{0}; //!< Untrusted, but in mempool (pending)
49 CAmount m_mine_immature{0}; //!< Immature coinbases in the main chain
50 CAmount m_mine_used{0}; //!< Trusted/untrusted/immature funds in utxos that have already been spent from (only populated if AVOID REUSE wallet flag is set)
51 CAmount m_mine_nonmempool{0}; //!< Coins spent by wallet txs that are not in the mempool
52 };
53 Balance GetBalance(const CWallet& wallet, int min_depth = 0, bool avoid_reuse = true, bool include_nonmempool = false);
54
55 std::map<CTxDestination, CAmount> GetAddressBalances(const CWallet& wallet);
56 std::set<std::set<CTxDestination>> GetAddressGroupings(const CWallet& wallet) EXCLUSIVE_LOCKS_REQUIRED(wallet.cs_wallet);
57 } // namespace wallet
58
59 #endif // BITCOIN_WALLET_RECEIVE_H
60