Bitcoin Core  27.99.0
P2P Digital Currency
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
wallet::CWallet Class Referencefinalabstract

A CWallet maintains a set of transactions and balances, and provides the ability to create new transactions. More...

#include <wallet.h>

Inheritance diagram for wallet::CWallet:
[legend]
Collaboration diagram for wallet::CWallet:
[legend]

Classes

struct  AddrBookFilter
 
struct  ScanResult
 

Public Types

typedef std::map< unsigned int, CMasterKeyMasterKeyMap
 
typedef std::multimap< int64_t, CWalletTx * > TxItems
 
using UpdateWalletTxFn = std::function< bool(CWalletTx &wtx, bool new_tx)>
 Callback for updating transaction metadata in mapWallet. More...
 
using ListAddrBookFunc = std::function< void(const CTxDestination &dest, const std::string &label, bool is_change, const std::optional< AddressPurpose > purpose)>
 Walk-through the address book entries. More...
 

Public Member Functions

WalletDatabaseGetDatabase () const override
 
const std::string & GetName () const
 Get a name for this wallet for logging/debugging purposes. More...
 
 CWallet (interfaces::Chain *chain, const std::string &name, std::unique_ptr< WalletDatabase > database)
 Construct wallet with specified name and database implementation. More...
 
 ~CWallet ()
 
bool IsCrypted () const
 
bool IsLocked () const override
 
bool Lock ()
 
bool HaveChain () const
 Interface to assert chain access. More...
 
std::unordered_map< uint256, CWalletTx, SaltedTxidHasher > mapWallet GUARDED_BY (cs_wallet)
 Map from txid to CWalletTx for all transactions this wallet is interested in, including received and sent transactions. More...
 
int64_t nOrderPosNext GUARDED_BY (cs_wallet)=0
 
std::map< CTxDestination, CAddressBookData > m_address_book GUARDED_BY (cs_wallet)
 
const CAddressBookDataFindAddressBookEntry (const CTxDestination &, bool allow_change=false) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
std::set< COutPoint > setLockedCoins GUARDED_BY (cs_wallet)
 Set of Coins owned by this wallet that we won't try to spend from. More...
 
interfaces::Chainchain () const
 Interface for accessing chain state. More...
 
const CWalletTxGetWalletTx (const uint256 &hash) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
std::set< uint256GetTxConflicts (const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
int GetTxDepthInMainChain (const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Return depth of transaction in blockchain: <0 : conflicts with a transaction this deep in the blockchain 0 : in memory pool, waiting to be included in a block >=1 : this many blocks deep in the main chain. More...
 
int GetTxBlocksToMaturity (const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool IsTxImmatureCoinBase (const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool CanSupportFeature (enum WalletFeature wf) const override EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 check whether we support the named feature More...
 
bool IsSpent (const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Outpoint is spent if any non-conflicted transaction spends it: More...
 
bool IsSpentKey (const CScript &scriptPubKey) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void SetSpentKeyState (WalletBatch &batch, const uint256 &hash, unsigned int n, bool used, std::set< CTxDestination > &tx_destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool DisplayAddress (const CTxDestination &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Display address on an external signer. More...
 
bool IsLockedCoin (const COutPoint &output) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool LockCoin (const COutPoint &output, WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool UnlockCoin (const COutPoint &output, WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool UnlockAllCoins () EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void ListLockedCoins (std::vector< COutPoint > &vOutpts) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void AbortRescan ()
 
bool IsAbortingRescan () const
 
bool IsScanning () const
 
bool IsScanningWithPassphrase () const
 
SteadyClock::duration ScanningDuration () const
 
double ScanningProgress () const
 
void UpgradeKeyMetadata () EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Upgrade stored CKeyMetadata objects to store key origin info as KeyOriginInfo. More...
 
void UpgradeDescriptorCache () EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Upgrade DescriptorCaches. More...
 
bool LoadMinVersion (int nVersion) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void LoadAddressPreviouslySpent (const CTxDestination &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Marks destination as previously spent. More...
 
void LoadAddressReceiveRequest (const CTxDestination &dest, const std::string &id, const std::string &request) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Appends payment request to destination. More...
 
int64_t nRelockTime GUARDED_BY (cs_wallet)
 Holds a timestamp at which point the wallet is scheduled (externally) to be relocked. Caller must arrange for actual relocking to occur via Lock(). More...
 
bool Unlock (const SecureString &strWalletPassphrase)
 
bool ChangeWalletPassphrase (const SecureString &strOldWalletPassphrase, const SecureString &strNewWalletPassphrase)
 
bool EncryptWallet (const SecureString &strWalletPassphrase)
 
void GetKeyBirthTimes (std::map< CKeyID, int64_t > &mapKeyBirth) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
unsigned int ComputeTimeSmart (const CWalletTx &wtx, bool rescanning_old_block) const
 Compute smart timestamp for a transaction being added to the wallet. More...
 
int64_t IncOrderPosNext (WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Increment the next transaction order id. More...
 
DBErrors ReorderTransactions ()
 
void MarkDirty ()
 
CWalletTxAddToWallet (CTransactionRef tx, const TxState &state, const UpdateWalletTxFn &update_wtx=nullptr, bool fFlushOnClose=true, bool rescanning_old_block=false)
 Add the transaction to the wallet, wrapping it up inside a CWalletTx. More...
 
bool LoadToWallet (const uint256 &hash, const UpdateWalletTxFn &fill_wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void transactionAddedToMempool (const CTransactionRef &tx) override
 
void blockConnected (ChainstateRole role, const interfaces::BlockInfo &block) override
 
void blockDisconnected (const interfaces::BlockInfo &block) override
 
void updatedBlockTip () override
 
int64_t RescanFromTime (int64_t startTime, const WalletRescanReserver &reserver, bool update)
 Scan active chain for relevant transactions after importing keys. More...
 
ScanResult ScanForWalletTransactions (const uint256 &start_block, int start_height, std::optional< int > max_height, const WalletRescanReserver &reserver, bool fUpdate, const bool save_progress)
 Scan the block chain (starting in start_block) for transactions from or to us. More...
 
void transactionRemovedFromMempool (const CTransactionRef &tx, MemPoolRemovalReason reason) override
 
void SetNextResend ()
 Set the next time this wallet should resend transactions to 12-36 hours from now, ~1 day on average. More...
 
bool ShouldResend () const
 Return true if all conditions for periodically resending transactions are met. More...
 
void ResubmitWalletTransactions (bool relay, bool force)
 
OutputType TransactionChangeType (const std::optional< OutputType > &change_type, const std::vector< CRecipient > &vecSend) const
 
bool SignTransaction (CMutableTransaction &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Fetch the inputs and sign with SIGHASH_ALL. More...
 
bool SignTransaction (CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, bilingual_str > &input_errors) const
 Sign the tx given the input coins and sighash. More...
 
SigningResult SignMessage (const std::string &message, const PKHash &pkhash, std::string &str_sig) const
 
TransactionError FillPSBT (PartiallySignedTransaction &psbtx, bool &complete, int sighash_type=SIGHASH_DEFAULT, bool sign=true, bool bip32derivs=true, size_t *n_signed=nullptr, bool finalize=true) const
 Fills out a PSBT with information from the wallet. More...
 
void CommitTransaction (CTransactionRef tx, mapValue_t mapValue, std::vector< std::pair< std::string, std::string >> orderForm)
 Submit the transaction to the node's mempool and then relay to peers. More...
 
bool SubmitTxMemoryPoolAndRelay (CWalletTx &wtx, std::string &err_string, bool relay) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Pass this transaction to node for mempool insertion and relay to peers if flag set to true. More...
 
bool ImportScripts (const std::set< CScript > scripts, int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool ImportPrivKeys (const std::map< CKeyID, CKey > &privkey_map, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool ImportPubKeys (const std::vector< CKeyID > &ordered_pubkeys, const std::map< CKeyID, CPubKey > &pubkey_map, const std::map< CKeyID, std::pair< CPubKey, KeyOriginInfo >> &key_origins, const bool add_keypool, const bool internal, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool ImportScriptPubKeys (const std::string &label, const std::set< CScript > &script_pub_keys, const bool have_solving_data, const bool apply_label, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void MaybeUpdateBirthTime (int64_t time)
 Updates wallet birth time if 'time' is below it. More...
 
size_t KeypoolCountExternalKeys () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool TopUpKeyPool (unsigned int kpSize=0)
 
std::optional< int64_t > GetOldestKeyPoolTime () const
 
std::vector< CTxDestinationListAddrBookAddresses (const std::optional< AddrBookFilter > &filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Filter and retrieve destinations stored in the addressbook. More...
 
std::set< std::string > ListAddrBookLabels (const std::optional< AddressPurpose > purpose) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Retrieve all the known labels in the address book. More...
 
void ForEachAddrBookEntry (const ListAddrBookFunc &func) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void MarkDestinationsDirty (const std::set< CTxDestination > &destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Marks all outputs in each one of the destinations dirty, so their cache is reset and does not return outdated information. More...
 
util::Result< CTxDestinationGetNewDestination (const OutputType type, const std::string label)
 
util::Result< CTxDestinationGetNewChangeDestination (const OutputType type)
 
isminetype IsMine (const CTxDestination &dest) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
isminetype IsMine (const CScript &script) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
CAmount GetDebit (const CTxIn &txin, const isminefilter &filter) const
 Returns amount of debit if the input matches the filter, otherwise returns 0. More...
 
isminetype IsMine (const CTxOut &txout) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool IsMine (const CTransaction &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
isminetype IsMine (const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool IsFromMe (const CTransaction &tx) const
 should probably be renamed to IsRelevantToMe More...
 
CAmount GetDebit (const CTransaction &tx, const isminefilter &filter) const
 
void chainStateFlushed (ChainstateRole role, const CBlockLocator &loc) override
 
DBErrors LoadWallet ()
 
util::Result< void > RemoveTxs (std::vector< uint256 > &txs_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Erases the provided transactions from the wallet. More...
 
bool SetAddressBook (const CTxDestination &address, const std::string &strName, const std::optional< AddressPurpose > &purpose)
 
bool DelAddressBook (const CTxDestination &address)
 
bool DelAddressBookWithDB (WalletBatch &batch, const CTxDestination &address)
 
bool IsAddressPreviouslySpent (const CTxDestination &dest) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool SetAddressPreviouslySpent (WalletBatch &batch, const CTxDestination &dest, bool used) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
std::vector< std::string > GetAddressReceiveRequests () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool SetAddressReceiveRequest (WalletBatch &batch, const CTxDestination &dest, const std::string &id, const std::string &value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool EraseAddressReceiveRequest (WalletBatch &batch, const CTxDestination &dest, const std::string &id) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
unsigned int GetKeyPoolSize () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void SetMinVersion (enum WalletFeature, WalletBatch *batch_in=nullptr) override
 signify that a particular wallet feature is now used. More...
 
int GetVersion () const
 get the current wallet format (the oldest client version guaranteed to understand this wallet) More...
 
std::set< uint256GetConflicts (const uint256 &txid) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Get wallet transactions that conflict with given transaction (spend same outputs) More...
 
bool HasWalletSpend (const CTransactionRef &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Check if a given transaction has any of its outputs spent by another transaction in the wallet. More...
 
void Flush ()
 Flush wallet (bitdb flush) More...
 
void Close ()
 Close wallet database. More...
 
bool GetBroadcastTransactions () const
 Inquire whether this wallet broadcasts transactions. More...
 
void SetBroadcastTransactions (bool broadcast)
 Set whether this wallet broadcasts transactions. More...
 
bool TransactionCanBeAbandoned (const uint256 &hashTx) const
 Return whether transaction can be abandoned. More...
 
bool AbandonTransaction (const uint256 &hashTx)
 
bool MarkReplaced (const uint256 &originalHash, const uint256 &newHash)
 Mark a transaction as replaced by another transaction. More...
 
void postInitProcess ()
 Wallet post-init setup Gives the wallet a chance to register repetitive tasks and complete post-init tasks. More...
 
bool BackupWallet (const std::string &strDest) const
 
bool IsHDEnabled () const
 
bool CanGetAddresses (bool internal=false) const
 
int64_t GetBirthTime () const
 
void UnsetWalletFlag (uint64_t flag)
 Unsets a single wallet flag. More...
 
bool IsWalletFlagSet (uint64_t flag) const override
 check if a certain wallet flag is set More...
 
void InitWalletFlags (uint64_t flags)
 overwrite all flags by the given uint64_t flags must be uninitialised (or 0) only known flags may be present More...
 
bool LoadWalletFlags (uint64_t flags)
 Loads the flags into the wallet. More...
 
bool IsLegacy () const
 Determine if we are a legacy wallet. More...
 
std::string GetDisplayName () const override
 Returns a bracketed wallet name for displaying in logs, will return [default wallet] if the wallet has no name. More...
 
template<typename... Params>
void WalletLogPrintf (const char *fmt, Params... parameters) const
 Prepends the wallet name in logging output to ease debugging in multi-wallet use cases. More...
 
bool UpgradeWallet (int version, bilingual_str &error)
 Upgrade the wallet. More...
 
std::set< ScriptPubKeyMan * > GetActiveScriptPubKeyMans () const
 Returns all unique ScriptPubKeyMans in m_internal_spk_managers and m_external_spk_managers. More...
 
bool IsActiveScriptPubKeyMan (const ScriptPubKeyMan &spkm) const
 
std::set< ScriptPubKeyMan * > GetAllScriptPubKeyMans () const
 Returns all unique ScriptPubKeyMans. More...
 
ScriptPubKeyManGetScriptPubKeyMan (const OutputType &type, bool internal) const
 Get the ScriptPubKeyMan for the given OutputType and internal/external chain. More...
 
std::set< ScriptPubKeyMan * > GetScriptPubKeyMans (const CScript &script) const
 Get all the ScriptPubKeyMans for a script. More...
 
ScriptPubKeyManGetScriptPubKeyMan (const uint256 &id) const
 Get the ScriptPubKeyMan by id. More...
 
std::unique_ptr< SigningProviderGetSolvingProvider (const CScript &script) const
 Get the SigningProvider for a script. More...
 
std::unique_ptr< SigningProviderGetSolvingProvider (const CScript &script, SignatureData &sigdata) const
 
std::vector< WalletDescriptorGetWalletDescriptors (const CScript &script) const
 Get the wallet descriptors for a script. More...
 
LegacyScriptPubKeyManGetLegacyScriptPubKeyMan () const
 Get the LegacyScriptPubKeyMan which is used for all types, internal, and external. More...
 
LegacyScriptPubKeyManGetOrCreateLegacyScriptPubKeyMan ()
 
void SetupLegacyScriptPubKeyMan ()
 Make a LegacyScriptPubKeyMan and set it for all types, internal, and external. More...
 
bool WithEncryptionKey (std::function< bool(const CKeyingMaterial &)> cb) const override
 Pass the encryption key to cb(). More...
 
bool HasEncryptionKeys () const override
 
int GetLastBlockHeight () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Get last block processed height. More...
 
uint256 GetLastBlockHash () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void SetLastBlockProcessed (int block_height, uint256 block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Set last block processed height, currently only use in unit test. More...
 
void ConnectScriptPubKeyManNotifiers ()
 Connect the signals from ScriptPubKeyMans to the signals in CWallet. More...
 
DescriptorScriptPubKeyManLoadDescriptorScriptPubKeyMan (uint256 id, WalletDescriptor &desc)
 Instantiate a descriptor ScriptPubKeyMan from the WalletDescriptor and load it. More...
 
void AddActiveScriptPubKeyMan (uint256 id, OutputType type, bool internal)
 Adds the active ScriptPubKeyMan for the specified type and internal. More...
 
void LoadActiveScriptPubKeyMan (uint256 id, OutputType type, bool internal)
 Loads an active ScriptPubKeyMan for the specified type and internal. More...
 
void DeactivateScriptPubKeyMan (uint256 id, OutputType type, bool internal)
 Remove specified ScriptPubKeyMan from set of active SPK managers. More...
 
DescriptorScriptPubKeyManSetupDescriptorScriptPubKeyMan (WalletBatch &batch, const CExtKey &master_key, const OutputType &output_type, bool internal) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Create new DescriptorScriptPubKeyMan and add it to the wallet. More...
 
void SetupDescriptorScriptPubKeyMans (const CExtKey &master_key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Create new DescriptorScriptPubKeyMans and add them to the wallet. More...
 
void SetupDescriptorScriptPubKeyMans () EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
DescriptorScriptPubKeyManGetDescriptorScriptPubKeyMan (const WalletDescriptor &desc) const
 Return the DescriptorScriptPubKeyMan for a WalletDescriptor if it is already in the wallet. More...
 
std::optional< bool > IsInternalScriptPubKeyMan (ScriptPubKeyMan *spk_man) const
 Returns whether the provided ScriptPubKeyMan is internal. More...
 
ScriptPubKeyManAddWalletDescriptor (WalletDescriptor &desc, const FlatSigningProvider &signing_provider, const std::string &label, bool internal) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Add a descriptor to the wallet, return a ScriptPubKeyMan & associated output type. More...
 
bool MigrateToSQLite (bilingual_str &error) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Move all records from the BDB database to a new SQLite database for storage. More...
 
std::optional< MigrationDataGetDescriptorsForLegacy (bilingual_str &error) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Get all of the descriptors from a legacy wallet. More...
 
bool ApplyMigrationData (MigrationData &data, bilingual_str &error) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Adds the ScriptPubKeyMans given in MigrationData to this wallet, removes LegacyScriptPubKeyMan, and where needed, moves tx and address book entries to watchonly_wallet or solvable_wallet. More...
 
bool CanGrindR () const
 Whether the (external) signer performs R-value signature grinding. More...
 
void CacheNewScriptPubKeys (const std::set< CScript > &spks, ScriptPubKeyMan *spkm)
 Add scriptPubKeys for this ScriptPubKeyMan into the scriptPubKey cache. More...
 
void TopUpCallback (const std::set< CScript > &spks, ScriptPubKeyMan *spkm) override
 Callback function for after TopUp completes containing any scripts that were added by a SPKMan. More...
 
std::set< CExtPubKeyGetActiveHDPubKeys () const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Retrieve the xpubs in use by the active descriptors. More...
 
std::optional< CKeyGetKey (const CKeyID &keyid) const
 Find the private key for the given key id from the wallet's descriptors, if available Returns nullopt when no descriptor has the key or if the wallet is locked. More...
 
- Public Member Functions inherited from wallet::WalletStorage
virtual ~WalletStorage ()=default
 
- Public Member Functions inherited from interfaces::Chain::Notifications
virtual ~Notifications ()
 

Static Public Member Functions

static std::shared_ptr< CWalletCreate (WalletContext &context, const std::string &name, std::unique_ptr< WalletDatabase > database, uint64_t wallet_creation_flags, bilingual_str &error, std::vector< bilingual_str > &warnings)
 

Public Attributes

RecursiveMutex cs_wallet
 Main wallet lock. More...
 
MasterKeyMap mapMasterKeys
 
unsigned int nMasterKeyMaxID = 0
 
TxItems wtxOrdered
 
std::unique_ptr< interfaces::Handlerm_chain_notifications_handler
 Registered interfaces::Chain::Notifications handler. More...
 
Mutex m_unlock_mutex
 
RecursiveMutex m_relock_mutex
 
CFeeRate m_pay_tx_fee {DEFAULT_PAY_TX_FEE}
 
unsigned int m_confirm_target {DEFAULT_TX_CONFIRM_TARGET}
 
bool m_spend_zero_conf_change {DEFAULT_SPEND_ZEROCONF_CHANGE}
 Allow Coin Selection to pick unconfirmed UTXOs that were sent from our own wallet if it cannot fund the transaction otherwise. More...
 
bool m_signal_rbf {DEFAULT_WALLET_RBF}
 
bool m_allow_fallback_fee {true}
 will be false if -fallbackfee=0 More...
 
CFeeRate m_min_fee {DEFAULT_TRANSACTION_MINFEE}
 Override with -mintxfee. More...
 
CFeeRate m_fallback_fee {DEFAULT_FALLBACK_FEE}
 If fee estimation does not have enough data to provide estimates, use this fee instead. More...
 
CFeeRate m_discard_rate {DEFAULT_DISCARD_FEE}
 If the cost to spend a change output at this feerate is greater than the value of the output itself, just drop it to fees. More...
 
CFeeRate m_consolidate_feerate {DEFAULT_CONSOLIDATE_FEERATE}
 When the actual feerate is less than the consolidate feerate, we will tend to make transactions which consolidate inputs. More...
 
CAmount m_max_aps_fee {DEFAULT_MAX_AVOIDPARTIALSPEND_FEE}
 The maximum fee amount we're willing to pay to prioritize partial spend avoidance. More...
 
OutputType m_default_address_type {DEFAULT_ADDRESS_TYPE}
 
std::optional< OutputTypem_default_change_type {}
 Default output type for change outputs. More...
 
CAmount m_default_max_tx_fee {DEFAULT_TRANSACTION_MAXFEE}
 Absolute maximum transaction fee (in satoshis) used by default for the wallet. More...
 
int64_t m_keypool_size {DEFAULT_KEYPOOL_SIZE}
 Number of pre-generated keys/scripts by each spkm (part of the look-ahead process, used to detect payments) More...
 
std::string m_notify_tx_changed_script
 Notify external script when a wallet transaction comes in or is updated (handled by -walletnotify) More...
 
boost::signals2::signal< void()> NotifyUnload
 Wallet is about to be unloaded. More...
 
boost::signals2::signal< void(const CTxDestination &address, const std::string &label, bool isMine, AddressPurpose purpose, ChangeType status)> NotifyAddressBookChanged
 Address book entry changed. More...
 
boost::signals2::signal< void(const uint256 &hashTx, ChangeType status)> NotifyTransactionChanged
 Wallet transaction added, removed or updated. More...
 
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
 Show progress e.g. More...
 
boost::signals2::signal< void(bool fHaveWatchOnly)> NotifyWatchonlyChanged
 Watch-only address added. More...
 
boost::signals2::signal< void()> NotifyCanGetAddressesChanged
 Keypool has new keys. More...
 
boost::signals2::signal< void(CWallet *wallet)> NotifyStatusChanged
 Wallet status (encrypted, locked) changed. More...
 

Private Types

enum class  TxUpdate { UNCHANGED , CHANGED , NOTIFY_CHANGED }
 
typedef std::unordered_multimap< COutPoint, uint256, SaltedOutpointHasherTxSpends
 Used to keep track of spent outpoints, and detect and report conflicts (double-spends or mutated transactions where the mutant gets mined). More...
 
using TryUpdatingStateFn = std::function< TxUpdate(CWalletTx &wtx)>
 

Private Member Functions

CKeyingMaterial vMasterKey GUARDED_BY (cs_wallet)
 
bool Unlock (const CKeyingMaterial &vMasterKeyIn)
 
int nWalletVersion GUARDED_BY (cs_wallet)
 the current wallet version: clients below this version are not able to load the wallet More...
 
TxSpends mapTxSpends GUARDED_BY (cs_wallet)
 
void AddToSpends (const COutPoint &outpoint, const uint256 &wtxid, WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void AddToSpends (const CWalletTx &wtx, WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool AddToWalletIfInvolvingMe (const CTransactionRef &tx, const SyncTxState &state, bool fUpdate, bool rescanning_old_block) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Add a transaction to the wallet, or update it. More...
 
void MarkConflicted (const uint256 &hashBlock, int conflicting_height, const uint256 &hashTx)
 Mark a transaction (and its in-wallet descendants) as conflicting with a particular block. More...
 
void RecursiveUpdateTxState (const uint256 &tx_hash, const TryUpdatingStateFn &try_updating_state) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Mark a transaction (and its in-wallet descendants) as a particular tx state. More...
 
void RecursiveUpdateTxState (WalletBatch *batch, const uint256 &tx_hash, const TryUpdatingStateFn &try_updating_state) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void MarkInputsDirty (const CTransactionRef &tx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 Mark a transaction's inputs dirty, thus forcing the outputs to be recomputed. More...
 
void SyncMetaData (std::pair< TxSpends::iterator, TxSpends::iterator >) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
void SyncTransaction (const CTransactionRef &tx, const SyncTxState &state, bool update_tx=true, bool rescanning_old_block=false) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
 
bool SetAddressBookWithDB (WalletBatch &batch, const CTxDestination &address, const std::string &strName, const std::optional< AddressPurpose > &strPurpose)
 
void UnsetWalletFlagWithDB (WalletBatch &batch, uint64_t flag)
 Unsets a wallet flag and saves it to disk. More...
 
void UnsetBlankWalletFlag (WalletBatch &batch) override
 Unset the blank wallet flag and saves it to disk. More...
 
uint256 m_last_block_processed GUARDED_BY (cs_wallet)
 The following is used to keep track of how far behind the wallet is from the chain sync, and to allow clients to block on us being caught up. More...
 
int m_last_block_processed_height GUARDED_BY (cs_wallet)
 Height of last block processed is used by wallet to know depth of transactions without relying on Chain interface beyond asynchronous updates. More...
 
void AddScriptPubKeyMan (const uint256 &id, std::unique_ptr< ScriptPubKeyMan > spkm_man)
 
void AddActiveScriptPubKeyManWithDb (WalletBatch &batch, uint256 id, OutputType type, bool internal)
 

Static Private Member Functions

static bool AttachChain (const std::shared_ptr< CWallet > &wallet, interfaces::Chain &chain, const bool rescan_required, bilingual_str &error, std::vector< bilingual_str > &warnings)
 Catch wallet up to current chain, scanning new blocks, updating the best block locator and m_last_block_processed, and registering for notifications about new blocks and transactions. More...
 
static NodeClock::time_point GetDefaultNextResend ()
 

Private Attributes

std::atomic< bool > fAbortRescan {false}
 
std::atomic< bool > fScanningWallet {false}
 
std::atomic< bool > m_attaching_chain {false}
 
std::atomic< bool > m_scanning_with_passphrase {false}
 
std::atomic< SteadyClock::time_point > m_scanning_start {SteadyClock::time_point{}}
 
std::atomic< double > m_scanning_progress {0}
 
NodeClock::time_point m_next_resend {GetDefaultNextResend()}
 The next scheduled rebroadcast of wallet transactions. More...
 
bool fBroadcastTransactions = false
 Whether this wallet will submit newly created transactions to the node's mempool and prompt rebroadcasts (see ResendWalletTransactions()). More...
 
std::atomic< int64_t > m_best_block_time {0}
 
std::atomic< int64_t > m_birth_time {std::numeric_limits<int64_t>::max()}
 
std::atomic< uint64_t > m_wallet_flags {0}
 WalletFlags set on this wallet. More...
 
interfaces::Chainm_chain
 Interface for accessing chain state. More...
 
std::string m_name
 Wallet name: relative directory name or "" for default wallet. More...
 
std::unique_ptr< WalletDatabasem_database
 Internal database handle. More...
 
std::map< OutputType, ScriptPubKeyMan * > m_external_spk_managers
 
std::map< OutputType, ScriptPubKeyMan * > m_internal_spk_managers
 
std::map< uint256, std::unique_ptr< ScriptPubKeyMan > > m_spk_managers
 
std::unordered_map< CScript, std::vector< ScriptPubKeyMan * >, SaltedSipHasherm_cached_spks
 Cache of descriptor ScriptPubKeys used for IsMine. Maps ScriptPubKey to set of spkms. More...
 

Friends

class WalletRescanReserver
 

Detailed Description

A CWallet maintains a set of transactions and balances, and provides the ability to create new transactions.

Definition at line 300 of file wallet.h.

Member Typedef Documentation

◆ ListAddrBookFunc

using wallet::CWallet::ListAddrBookFunc = std::function<void(const CTxDestination& dest, const std::string& label, bool is_change, const std::optional<AddressPurpose> purpose)>

Walk-through the address book entries.

Stops when the provided 'ListAddrBookFunc' returns false.

Definition at line 764 of file wallet.h.

◆ MasterKeyMap

typedef std::map<unsigned int, CMasterKey> wallet::CWallet::MasterKeyMap

Definition at line 455 of file wallet.h.

◆ TryUpdatingStateFn

using wallet::CWallet::TryUpdatingStateFn = std::function<TxUpdate(CWalletTx& wtx)>
private

Definition at line 363 of file wallet.h.

◆ TxItems

typedef std::multimap<int64_t, CWalletTx*> wallet::CWallet::TxItems

Definition at line 484 of file wallet.h.

◆ TxSpends

typedef std::unordered_multimap<COutPoint, uint256, SaltedOutpointHasher> wallet::CWallet::TxSpends
private

Used to keep track of spent outpoints, and detect and report conflicts (double-spends or mutated transactions where the mutant gets mined).

Definition at line 335 of file wallet.h.

◆ UpdateWalletTxFn

using wallet::CWallet::UpdateWalletTxFn = std::function<bool(CWalletTx& wtx, bool new_tx)>

Callback for updating transaction metadata in mapWallet.

Parameters
wtx- reference to mapWallet transaction to update
new_tx- true if wtx is newly inserted, false if it previously existed
Returns
true if wtx is changed and needs to be saved to disk, otherwise false

Definition at line 602 of file wallet.h.

Member Enumeration Documentation

◆ TxUpdate

enum wallet::CWallet::TxUpdate
strongprivate
Enumerator
UNCHANGED 
CHANGED 
NOTIFY_CHANGED 

Definition at line 361 of file wallet.h.

Constructor & Destructor Documentation

◆ CWallet()

wallet::CWallet::CWallet ( interfaces::Chain chain,
const std::string &  name,
std::unique_ptr< WalletDatabase database 
)
inline

Construct wallet with specified name and database implementation.

Definition at line 460 of file wallet.h.

Here is the caller graph for this function:

◆ ~CWallet()

wallet::CWallet::~CWallet ( )
inline

Definition at line 467 of file wallet.h.

Here is the call graph for this function:

Member Function Documentation

◆ AbortRescan()

void wallet::CWallet::AbortRescan ( )
inline

Definition at line 552 of file wallet.h.

◆ AddActiveScriptPubKeyMan()

void wallet::CWallet::AddActiveScriptPubKeyMan ( uint256  id,
OutputType  type,
bool  internal 
)

Adds the active ScriptPubKeyMan for the specified type and internal.

Writes it to the wallet file

Parameters
[in]idThe unique id for the ScriptPubKeyMan
[in]typeThe OutputType this ScriptPubKeyMan provides addresses for
[in]internalWhether this ScriptPubKeyMan provides change addresses

Definition at line 3758 of file wallet.cpp.

Here is the call graph for this function:

◆ AddActiveScriptPubKeyManWithDb()

void wallet::CWallet::AddActiveScriptPubKeyManWithDb ( WalletBatch batch,
uint256  id,
OutputType  type,
bool  internal 
)
private

Definition at line 3764 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddScriptPubKeyMan()

void wallet::CWallet::AddScriptPubKeyMan ( const uint256 id,
std::unique_ptr< ScriptPubKeyMan spkm_man 
)
private

Definition at line 3608 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddWalletDescriptor()

ScriptPubKeyMan * wallet::CWallet::AddWalletDescriptor ( WalletDescriptor desc,
const FlatSigningProvider signing_provider,
const std::string &  label,
bool  internal 
)

Add a descriptor to the wallet, return a ScriptPubKeyMan & associated output type.

Definition at line 3855 of file wallet.cpp.

Here is the call graph for this function:

◆ ApplyMigrationData()

bool wallet::CWallet::ApplyMigrationData ( MigrationData data,
bilingual_str error 
)

Adds the ScriptPubKeyMans given in MigrationData to this wallet, removes LegacyScriptPubKeyMan, and where needed, moves tx and address book entries to watchonly_wallet or solvable_wallet.

Definition at line 4007 of file wallet.cpp.

Here is the call graph for this function:

◆ AttachChain()

bool wallet::CWallet::AttachChain ( const std::shared_ptr< CWallet > &  wallet,
interfaces::Chain chain,
const bool  rescan_required,
bilingual_str error,
std::vector< bilingual_str > &  warnings 
)
staticprivate

Catch wallet up to current chain, scanning new blocks, updating the best block locator and m_last_block_processed, and registering for notifications about new blocks and transactions.

Definition at line 3211 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BackupWallet()

bool wallet::CWallet::BackupWallet ( const std::string &  strDest) const

Definition at line 3386 of file wallet.cpp.

Here is the call graph for this function:

◆ CacheNewScriptPubKeys()

void wallet::CWallet::CacheNewScriptPubKeys ( const std::set< CScript > &  spks,
ScriptPubKeyMan spkm 
)

Add scriptPubKeys for this ScriptPubKeyMan into the scriptPubKey cache.

Definition at line 4511 of file wallet.cpp.

Here is the caller graph for this function:

◆ CanGrindR()

bool wallet::CWallet::CanGrindR ( ) const

Whether the (external) signer performs R-value signature grinding.

Definition at line 4223 of file wallet.cpp.

Here is the call graph for this function:

◆ CanSupportFeature()

bool wallet::CWallet::CanSupportFeature ( enum WalletFeature  wf) const
inlineoverridevirtual

check whether we support the named feature

Implements wallet::WalletStorage.

Definition at line 532 of file wallet.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ chain()

interfaces::Chain& wallet::CWallet::chain ( ) const
inline

Interface for accessing chain state.

Definition at line 502 of file wallet.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeTimeSmart()

unsigned int wallet::CWallet::ComputeTimeSmart ( const CWalletTx wtx,
bool  rescanning_old_block 
) const

Compute smart timestamp for a transaction being added to the wallet.

Logic:

  • If sending a transaction, assign its timestamp to the current time.
  • If receiving a transaction outside a block, assign its timestamp to the current time.
  • If receiving a transaction during a rescanning process, assign all its (not already known) transactions' timestamps to the block time.
  • If receiving a block with a future timestamp, assign all its (not already known) transactions' timestamps to the current time.
  • If receiving a block with a past timestamp, before the most recent known transaction (that we care about), assign all its (not already known) transactions' timestamps to the same timestamp as that most-recent-known transaction.
  • If receiving a block with a past timestamp, but after the most recent known transaction, assign all its (not already known) transactions' timestamps to the block time.

For more information see CWalletTx::nTimeSmart, https://bitcointalk.org/?topic=54527, or https://github.com/bitcoin/bitcoin/pull/1393.

Definition at line 2817 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConnectScriptPubKeyManNotifiers()

void wallet::CWallet::ConnectScriptPubKeyManNotifiers ( )

Connect the signals from ScriptPubKeyMans to the signals in CWallet.

Definition at line 3644 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Create()

std::shared_ptr< CWallet > wallet::CWallet::Create ( WalletContext context,
const std::string &  name,
std::unique_ptr< WalletDatabase database,
uint64_t  wallet_creation_flags,
bilingual_str error,
std::vector< bilingual_str > &  warnings 
)
static

Definition at line 2947 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DeactivateScriptPubKeyMan()

void wallet::CWallet::DeactivateScriptPubKeyMan ( uint256  id,
OutputType  type,
bool  internal 
)

Remove specified ScriptPubKeyMan from set of active SPK managers.

Writes the change to the wallet file.

Parameters
[in]idThe unique id for the ScriptPubKeyMan
[in]typeThe OutputType this ScriptPubKeyMan provides addresses for
[in]internalWhether this ScriptPubKeyMan provides change addresses

Definition at line 3792 of file wallet.cpp.

Here is the call graph for this function:

◆ EraseAddressReceiveRequest()

bool wallet::CWallet::EraseAddressReceiveRequest ( WalletBatch batch,
const CTxDestination dest,
const std::string &  id 
)

Definition at line 2916 of file wallet.cpp.

Here is the call graph for this function:

◆ FindAddressBookEntry()

const CAddressBookData * wallet::CWallet::FindAddressBookEntry ( const CTxDestination dest,
bool  allow_change = false 
) const

Definition at line 3333 of file wallet.cpp.

Here is the caller graph for this function:

◆ GetActiveHDPubKeys()

std::set< CExtPubKey > wallet::CWallet::GetActiveHDPubKeys ( ) const

Retrieve the xpubs in use by the active descriptors.

Definition at line 4524 of file wallet.cpp.

Here is the call graph for this function:

◆ GetActiveScriptPubKeyMans()

std::set< ScriptPubKeyMan * > wallet::CWallet::GetActiveScriptPubKeyMans ( ) const

Returns all unique ScriptPubKeyMans in m_internal_spk_managers and m_external_spk_managers.

Definition at line 3486 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetAddressReceiveRequests()

std::vector< std::string > wallet::CWallet::GetAddressReceiveRequests ( ) const

Definition at line 2898 of file wallet.cpp.

◆ GetAllScriptPubKeyMans()

std::set< ScriptPubKeyMan * > wallet::CWallet::GetAllScriptPubKeyMans ( ) const

Returns all unique ScriptPubKeyMans.

Definition at line 3511 of file wallet.cpp.

Here is the caller graph for this function:

◆ GetBirthTime()

int64_t wallet::CWallet::GetBirthTime ( ) const
inline

Definition at line 893 of file wallet.h.

◆ GetBroadcastTransactions()

bool wallet::CWallet::GetBroadcastTransactions ( ) const
inline

Inquire whether this wallet broadcasts transactions.

Definition at line 862 of file wallet.h.

Here is the caller graph for this function:

◆ GetDatabase()

WalletDatabase& wallet::CWallet::GetDatabase ( ) const
inlineoverridevirtual

Implements wallet::WalletStorage.

Definition at line 445 of file wallet.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDescriptorScriptPubKeyMan()

DescriptorScriptPubKeyMan * wallet::CWallet::GetDescriptorScriptPubKeyMan ( const WalletDescriptor desc) const

Return the DescriptorScriptPubKeyMan for a WalletDescriptor if it is already in the wallet.

Definition at line 3818 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDescriptorsForLegacy()

std::optional< MigrationData > wallet::CWallet::GetDescriptorsForLegacy ( bilingual_str error) const

Get all of the descriptors from a legacy wallet.

Definition at line 3988 of file wallet.cpp.

Here is the call graph for this function:

◆ GetDisplayName()

std::string wallet::CWallet::GetDisplayName ( ) const
inlineoverridevirtual

Returns a bracketed wallet name for displaying in logs, will return [default wallet] if the wallet has no name.

Implements wallet::WalletStorage.

Definition at line 923 of file wallet.h.

Here is the caller graph for this function:

◆ GetKey()

std::optional< CKey > wallet::CWallet::GetKey ( const CKeyID keyid) const

Find the private key for the given key id from the wallet's descriptors, if available Returns nullopt when no descriptor has the key or if the wallet is locked.

Definition at line 4545 of file wallet.cpp.

Here is the call graph for this function:

◆ GetKeyBirthTimes()

void wallet::CWallet::GetKeyBirthTimes ( std::map< CKeyID, int64_t > &  mapKeyBirth) const

Definition at line 2734 of file wallet.cpp.

Here is the call graph for this function:

◆ GetLastBlockHash()

uint256 wallet::CWallet::GetLastBlockHash ( ) const
inline

Definition at line 979 of file wallet.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLastBlockHeight()

int wallet::CWallet::GetLastBlockHeight ( ) const
inline

Get last block processed height.

Definition at line 973 of file wallet.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLegacyScriptPubKeyMan()

LegacyScriptPubKeyMan * wallet::CWallet::GetLegacyScriptPubKeyMan ( ) const

Get the LegacyScriptPubKeyMan which is used for all types, internal, and external.

Definition at line 3590 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetName()

const std::string& wallet::CWallet::GetName ( ) const
inline

Get a name for this wallet for logging/debugging purposes.

Definition at line 453 of file wallet.h.

Here is the caller graph for this function:

◆ GetOrCreateLegacyScriptPubKeyMan()

LegacyScriptPubKeyMan * wallet::CWallet::GetOrCreateLegacyScriptPubKeyMan ( )

Definition at line 3602 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetScriptPubKeyMan() [1/2]

ScriptPubKeyMan * wallet::CWallet::GetScriptPubKeyMan ( const OutputType type,
bool  internal 
) const

Get the ScriptPubKeyMan for the given OutputType and internal/external chain.

Definition at line 3520 of file wallet.cpp.

Here is the caller graph for this function:

◆ GetScriptPubKeyMan() [2/2]

ScriptPubKeyMan * wallet::CWallet::GetScriptPubKeyMan ( const uint256 id) const

Get the ScriptPubKeyMan by id.

Definition at line 3548 of file wallet.cpp.

◆ GetScriptPubKeyMans()

std::set< ScriptPubKeyMan * > wallet::CWallet::GetScriptPubKeyMans ( const CScript script) const

Get all the ScriptPubKeyMans for a script.

Definition at line 3530 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSolvingProvider() [1/2]

std::unique_ptr< SigningProvider > wallet::CWallet::GetSolvingProvider ( const CScript script) const

Get the SigningProvider for a script.

Definition at line 3556 of file wallet.cpp.

◆ GetSolvingProvider() [2/2]

std::unique_ptr< SigningProvider > wallet::CWallet::GetSolvingProvider ( const CScript script,
SignatureData sigdata 
) const

Definition at line 3562 of file wallet.cpp.

Here is the call graph for this function:

◆ GetTxBlocksToMaturity()

int wallet::CWallet::GetTxBlocksToMaturity ( const CWalletTx wtx) const
Returns
number of blocks to maturity for this transaction: 0 : is not a coinbase transaction, or is a mature coinbase transaction >0 : is a coinbase transaction which matures in this many blocks

Definition at line 3420 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTxDepthInMainChain()

int wallet::CWallet::GetTxDepthInMainChain ( const CWalletTx wtx) const

Return depth of transaction in blockchain: <0 : conflicts with a transaction this deep in the blockchain 0 : in memory pool, waiting to be included in a block >=1 : this many blocks deep in the main chain.

Preconditions: it is only valid to call this function when the wallet is online and the block index is loaded. So this cannot be called by bitcoin-wallet tool code or by wallet migration code. If this is called without the wallet being online, it won't be able able to determine the the height of the last block processed, or the heights of blocks referenced in transaction, and might cause assert failures.

Definition at line 3406 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetVersion()

int wallet::CWallet::GetVersion ( ) const
inline

get the current wallet format (the oldest client version guaranteed to understand this wallet)

Definition at line 814 of file wallet.h.

Here is the caller graph for this function:

◆ GetWalletDescriptors()

std::vector< WalletDescriptor > wallet::CWallet::GetWalletDescriptors ( const CScript script) const

Get the wallet descriptors for a script.

Definition at line 3578 of file wallet.cpp.

Here is the call graph for this function:

◆ GUARDED_BY() [1/10]

CKeyingMaterial vMasterKey wallet::CWallet::GUARDED_BY ( cs_wallet  )
private

◆ GUARDED_BY() [2/10]

int nWalletVersion wallet::CWallet::GUARDED_BY ( cs_wallet  )
inlineprivate

the current wallet version: clients below this version are not able to load the wallet

Definition at line 316 of file wallet.h.

◆ GUARDED_BY() [3/10]

TxSpends mapTxSpends wallet::CWallet::GUARDED_BY ( cs_wallet  )
private

◆ GUARDED_BY() [4/10]

uint256 m_last_block_processed wallet::CWallet::GUARDED_BY ( cs_wallet  )
private

The following is used to keep track of how far behind the wallet is from the chain sync, and to allow clients to block on us being caught up.

Processed hash is a pointer on node's tip and doesn't imply that the wallet has scanned sequentially all blocks up to this one.

◆ GUARDED_BY() [5/10]

int m_last_block_processed_height wallet::CWallet::GUARDED_BY ( cs_wallet  )
private

Height of last block processed is used by wallet to know depth of transactions without relying on Chain interface beyond asynchronous updates.

For safety, we initialize it to -1. Height is a pointer on node's tip and doesn't imply that the wallet has scanned sequentially all blocks up to this one.

◆ GUARDED_BY() [6/10]

std::unordered_map<uint256, CWalletTx, SaltedTxidHasher> mapWallet wallet::CWallet::GUARDED_BY ( cs_wallet  )

Map from txid to CWalletTx for all transactions this wallet is interested in, including received and sent transactions.

◆ GUARDED_BY() [7/10]

std::map<CTxDestination, CAddressBookData> m_address_book wallet::CWallet::GUARDED_BY ( cs_wallet  )

◆ GUARDED_BY() [8/10]

std::set<COutPoint> setLockedCoins wallet::CWallet::GUARDED_BY ( cs_wallet  )

Set of Coins owned by this wallet that we won't try to spend from.

A Coin may be locked if it has already been used to fund a transaction that hasn't confirmed yet. We wouldn't consider the Coin spent already, but also shouldn't try to use it again.

◆ GUARDED_BY() [9/10]

int64_t nRelockTime wallet::CWallet::GUARDED_BY ( cs_wallet  )
inline

Holds a timestamp at which point the wallet is scheduled (externally) to be relocked. Caller must arrange for actual relocking to occur via Lock().

Definition at line 573 of file wallet.h.

◆ GUARDED_BY() [10/10]

int64_t nOrderPosNext wallet::CWallet::GUARDED_BY ( cs_wallet  )
pure virtual

◆ HasEncryptionKeys()

bool wallet::CWallet::HasEncryptionKeys ( ) const
overridevirtual

Implements wallet::WalletStorage.

Definition at line 3639 of file wallet.cpp.

Here is the caller graph for this function:

◆ HaveChain()

bool wallet::CWallet::HaveChain ( ) const
inline

Interface to assert chain access.

Definition at line 478 of file wallet.h.

Here is the caller graph for this function:

◆ IsAbortingRescan()

bool wallet::CWallet::IsAbortingRescan ( ) const
inline

Definition at line 553 of file wallet.h.

◆ IsActiveScriptPubKeyMan()

bool wallet::CWallet::IsActiveScriptPubKeyMan ( const ScriptPubKeyMan spkm) const

Definition at line 3500 of file wallet.cpp.

Here is the call graph for this function:

◆ IsAddressPreviouslySpent()

bool wallet::CWallet::IsAddressPreviouslySpent ( const CTxDestination dest) const

Definition at line 2892 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsCrypted()

bool wallet::CWallet::IsCrypted ( ) const

Definition at line 3440 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsInternalScriptPubKeyMan()

std::optional< bool > wallet::CWallet::IsInternalScriptPubKeyMan ( ScriptPubKeyMan spk_man) const

Returns whether the provided ScriptPubKeyMan is internal.

Parameters
[in]spk_manThe ScriptPubKeyMan to test
Returns
contains value only for active DescriptorScriptPubKeyMan, otherwise undefined

Definition at line 3831 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsLegacy()

bool wallet::CWallet::IsLegacy ( ) const

Determine if we are a legacy wallet.

Definition at line 3809 of file wallet.cpp.

Here is the caller graph for this function:

◆ IsLocked()

bool wallet::CWallet::IsLocked ( ) const
overridevirtual

Implements wallet::WalletStorage.

Definition at line 3445 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsScanning()

bool wallet::CWallet::IsScanning ( ) const
inline

Definition at line 554 of file wallet.h.

◆ IsScanningWithPassphrase()

bool wallet::CWallet::IsScanningWithPassphrase ( ) const
inline

Definition at line 555 of file wallet.h.

◆ IsTxImmatureCoinBase()

bool wallet::CWallet::IsTxImmatureCoinBase ( const CWalletTx wtx) const

Definition at line 3432 of file wallet.cpp.

Here is the call graph for this function:

◆ LoadActiveScriptPubKeyMan()

void wallet::CWallet::LoadActiveScriptPubKeyMan ( uint256  id,
OutputType  type,
bool  internal 
)

Loads an active ScriptPubKeyMan for the specified type and internal.

(used by LoadWallet)

Parameters
[in]idThe unique id for the ScriptPubKeyMan
[in]typeThe OutputType this ScriptPubKeyMan provides addresses for
[in]internalWhether this ScriptPubKeyMan provides change addresses

Definition at line 3772 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadAddressPreviouslySpent()

void wallet::CWallet::LoadAddressPreviouslySpent ( const CTxDestination dest)

Marks destination as previously spent.

Definition at line 2882 of file wallet.cpp.

Here is the caller graph for this function:

◆ LoadAddressReceiveRequest()

void wallet::CWallet::LoadAddressReceiveRequest ( const CTxDestination dest,
const std::string &  id,
const std::string &  request 
)

Appends payment request to destination.

Definition at line 2887 of file wallet.cpp.

◆ LoadDescriptorScriptPubKeyMan()

DescriptorScriptPubKeyMan & wallet::CWallet::LoadDescriptorScriptPubKeyMan ( uint256  id,
WalletDescriptor desc 
)

Instantiate a descriptor ScriptPubKeyMan from the WalletDescriptor and load it.

Definition at line 3653 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadMinVersion()

bool wallet::CWallet::LoadMinVersion ( int  nVersion)
inline

Definition at line 565 of file wallet.h.

Here is the call graph for this function:

◆ Lock()

bool wallet::CWallet::Lock ( )

Definition at line 3454 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MigrateToSQLite()

bool wallet::CWallet::MigrateToSQLite ( bilingual_str error)

Move all records from the BDB database to a new SQLite database for storage.

The original BDB file will be deleted and replaced with a new SQLite file. A backup is not created. May crash if something unexpected happens in the filesystem.

Definition at line 3914 of file wallet.cpp.

Here is the call graph for this function:

◆ postInitProcess()

void wallet::CWallet::postInitProcess ( )

Wallet post-init setup Gives the wallet a chance to register repetitive tasks and complete post-init tasks.

Definition at line 3376 of file wallet.cpp.

Here is the call graph for this function:

◆ ScanningDuration()

SteadyClock::duration wallet::CWallet::ScanningDuration ( ) const
inline

Definition at line 556 of file wallet.h.

◆ ScanningProgress()

double wallet::CWallet::ScanningProgress ( ) const
inline

Definition at line 557 of file wallet.h.

◆ SetAddressPreviouslySpent()

bool wallet::CWallet::SetAddressPreviouslySpent ( WalletBatch batch,
const CTxDestination dest,
bool  used 
)

Definition at line 2868 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetAddressReceiveRequest()

bool wallet::CWallet::SetAddressReceiveRequest ( WalletBatch batch,
const CTxDestination dest,
const std::string &  id,
const std::string &  value 
)

Definition at line 2909 of file wallet.cpp.

Here is the call graph for this function:

◆ SetBroadcastTransactions()

void wallet::CWallet::SetBroadcastTransactions ( bool  broadcast)
inline

Set whether this wallet broadcasts transactions.

Definition at line 864 of file wallet.h.

◆ SetLastBlockProcessed()

void wallet::CWallet::SetLastBlockProcessed ( int  block_height,
uint256  block_hash 
)
inline

Set last block processed height, currently only use in unit test.

Definition at line 986 of file wallet.h.

Here is the call graph for this function:

◆ SetNextResend()

void wallet::CWallet::SetNextResend ( )
inline

Set the next time this wallet should resend transactions to 12-36 hours from now, ~1 day on average.

Definition at line 634 of file wallet.h.

◆ SetupDescriptorScriptPubKeyMan()

DescriptorScriptPubKeyMan & wallet::CWallet::SetupDescriptorScriptPubKeyMan ( WalletBatch batch,
const CExtKey master_key,
const OutputType output_type,
bool  internal 
)

Create new DescriptorScriptPubKeyMan and add it to the wallet.

Definition at line 3665 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupDescriptorScriptPubKeyMans() [1/2]

void wallet::CWallet::SetupDescriptorScriptPubKeyMans ( )

Definition at line 3703 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupDescriptorScriptPubKeyMans() [2/2]

void wallet::CWallet::SetupDescriptorScriptPubKeyMans ( const CExtKey master_key)

Create new DescriptorScriptPubKeyMans and add them to the wallet.

Definition at line 3685 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupLegacyScriptPubKeyMan()

void wallet::CWallet::SetupLegacyScriptPubKeyMan ( )

Make a LegacyScriptPubKeyMan and set it for all types, internal, and external.

Definition at line 3618 of file wallet.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TopUpCallback()

void wallet::CWallet::TopUpCallback ( const std::set< CScript > &  ,
ScriptPubKeyMan  
)
overridevirtual

Callback function for after TopUp completes containing any scripts that were added by a SPKMan.

Implements wallet::WalletStorage.

Definition at line 4518 of file wallet.cpp.

Here is the call graph for this function:

◆ Unlock()

bool wallet::CWallet::Unlock ( const CKeyingMaterial vMasterKeyIn)
private

Definition at line 3471 of file wallet.cpp.

Here is the caller graph for this function:

◆ UpgradeWallet()

bool wallet::CWallet::UpgradeWallet ( int  version,
bilingual_str error 
)

Upgrade the wallet.

Definition at line 3343 of file wallet.cpp.

Here is the call graph for this function:

◆ WalletLogPrintf()

template<typename... Params>
void wallet::CWallet::WalletLogPrintf ( const char *  fmt,
Params...  parameters 
) const
inline

Prepends the wallet name in logging output to ease debugging in multi-wallet use cases.

Definition at line 931 of file wallet.h.

Here is the caller graph for this function:

◆ WithEncryptionKey()

bool wallet::CWallet::WithEncryptionKey ( std::function< bool(const CKeyingMaterial &)>  cb) const
overridevirtual

Pass the encryption key to cb().

Implements wallet::WalletStorage.

Definition at line 3633 of file wallet.cpp.

Friends And Related Function Documentation

◆ WalletRescanReserver

friend class WalletRescanReserver
friend

Definition at line 313 of file wallet.h.

Member Data Documentation

◆ cs_wallet

RecursiveMutex wallet::CWallet::cs_wallet
mutable

Main wallet lock.

This lock protects all the fields added by CWallet.

Definition at line 443 of file wallet.h.

◆ fAbortRescan

std::atomic<bool> wallet::CWallet::fAbortRescan {false}
private

Definition at line 307 of file wallet.h.

◆ fBroadcastTransactions

bool wallet::CWallet::fBroadcastTransactions = false
private

Whether this wallet will submit newly created transactions to the node's mempool and prompt rebroadcasts (see ResendWalletTransactions()).

Definition at line 322 of file wallet.h.

◆ fScanningWallet

std::atomic<bool> wallet::CWallet::fScanningWallet {false}
private

Definition at line 308 of file wallet.h.

◆ m_allow_fallback_fee

bool wallet::CWallet::m_allow_fallback_fee {true}

will be false if -fallbackfee=0

Definition at line 699 of file wallet.h.

◆ m_attaching_chain

std::atomic<bool> wallet::CWallet::m_attaching_chain {false}
private

Definition at line 309 of file wallet.h.

◆ m_best_block_time

std::atomic<int64_t> wallet::CWallet::m_best_block_time {0}
private

Definition at line 324 of file wallet.h.

◆ m_birth_time

std::atomic<int64_t> wallet::CWallet::m_birth_time {std::numeric_limits<int64_t>::max()}
private

Definition at line 328 of file wallet.h.

◆ m_cached_spks

std::unordered_map<CScript, std::vector<ScriptPubKeyMan*>, SaltedSipHasher> wallet::CWallet::m_cached_spks
private

Cache of descriptor ScriptPubKeys used for IsMine. Maps ScriptPubKey to set of spkms.

Definition at line 427 of file wallet.h.

◆ m_chain

interfaces::Chain* wallet::CWallet::m_chain
private

Interface for accessing chain state.

Definition at line 388 of file wallet.h.

◆ m_chain_notifications_handler

std::unique_ptr<interfaces::Handler> wallet::CWallet::m_chain_notifications_handler

Registered interfaces::Chain::Notifications handler.

Definition at line 499 of file wallet.h.

◆ m_confirm_target

unsigned int wallet::CWallet::m_confirm_target {DEFAULT_TX_CONFIRM_TARGET}

Definition at line 694 of file wallet.h.

◆ m_consolidate_feerate

CFeeRate wallet::CWallet::m_consolidate_feerate {DEFAULT_CONSOLIDATE_FEERATE}

When the actual feerate is less than the consolidate feerate, we will tend to make transactions which consolidate inputs.

When the actual feerate is greater than the consolidate feerate, we will tend to make transactions which have the lowest fees.

Definition at line 716 of file wallet.h.

◆ m_database

std::unique_ptr<WalletDatabase> wallet::CWallet::m_database
private

Internal database handle.

Definition at line 394 of file wallet.h.

◆ m_default_address_type

OutputType wallet::CWallet::m_default_address_type {DEFAULT_ADDRESS_TYPE}

Definition at line 720 of file wallet.h.

◆ m_default_change_type

std::optional<OutputType> wallet::CWallet::m_default_change_type {}

Default output type for change outputs.

When unset, automatically choose type based on address type setting and the types other of non-change outputs (see -changetype option documentation and implementation in CWallet::TransactionChangeType for details).

Definition at line 727 of file wallet.h.

◆ m_default_max_tx_fee

CAmount wallet::CWallet::m_default_max_tx_fee {DEFAULT_TRANSACTION_MAXFEE}

Absolute maximum transaction fee (in satoshis) used by default for the wallet.

Definition at line 729 of file wallet.h.

◆ m_discard_rate

CFeeRate wallet::CWallet::m_discard_rate {DEFAULT_DISCARD_FEE}

If the cost to spend a change output at this feerate is greater than the value of the output itself, just drop it to fees.

Definition at line 710 of file wallet.h.

◆ m_external_spk_managers

std::map<OutputType, ScriptPubKeyMan*> wallet::CWallet::m_external_spk_managers
private

Definition at line 412 of file wallet.h.

◆ m_fallback_fee

CFeeRate wallet::CWallet::m_fallback_fee {DEFAULT_FALLBACK_FEE}

If fee estimation does not have enough data to provide estimates, use this fee instead.

Has no effect if not using fee estimation Override with -fallbackfee

Definition at line 706 of file wallet.h.

◆ m_internal_spk_managers

std::map<OutputType, ScriptPubKeyMan*> wallet::CWallet::m_internal_spk_managers
private

Definition at line 413 of file wallet.h.

◆ m_keypool_size

int64_t wallet::CWallet::m_keypool_size {DEFAULT_KEYPOOL_SIZE}

Number of pre-generated keys/scripts by each spkm (part of the look-ahead process, used to detect payments)

Definition at line 732 of file wallet.h.

◆ m_max_aps_fee

CAmount wallet::CWallet::m_max_aps_fee {DEFAULT_MAX_AVOIDPARTIALSPEND_FEE}

The maximum fee amount we're willing to pay to prioritize partial spend avoidance.

note: this is absolute fee, not fee rate

Definition at line 719 of file wallet.h.

◆ m_min_fee

CFeeRate wallet::CWallet::m_min_fee {DEFAULT_TRANSACTION_MINFEE}

Override with -mintxfee.

Definition at line 700 of file wallet.h.

◆ m_name

std::string wallet::CWallet::m_name
private

Wallet name: relative directory name or "" for default wallet.

Definition at line 391 of file wallet.h.

◆ m_next_resend

NodeClock::time_point wallet::CWallet::m_next_resend {GetDefaultNextResend()}
private

The next scheduled rebroadcast of wallet transactions.

Definition at line 319 of file wallet.h.

◆ m_notify_tx_changed_script

std::string wallet::CWallet::m_notify_tx_changed_script

Notify external script when a wallet transaction comes in or is updated (handled by -walletnotify)

Definition at line 735 of file wallet.h.

◆ m_pay_tx_fee

CFeeRate wallet::CWallet::m_pay_tx_fee {DEFAULT_PAY_TX_FEE}

Definition at line 693 of file wallet.h.

◆ m_relock_mutex

RecursiveMutex wallet::CWallet::m_relock_mutex

Definition at line 578 of file wallet.h.

◆ m_scanning_progress

std::atomic<double> wallet::CWallet::m_scanning_progress {0}
private

Definition at line 312 of file wallet.h.

◆ m_scanning_start

std::atomic<SteadyClock::time_point> wallet::CWallet::m_scanning_start {SteadyClock::time_point{}}
private

Definition at line 311 of file wallet.h.

◆ m_scanning_with_passphrase

std::atomic<bool> wallet::CWallet::m_scanning_with_passphrase {false}
private

Definition at line 310 of file wallet.h.

◆ m_signal_rbf

bool wallet::CWallet::m_signal_rbf {DEFAULT_WALLET_RBF}

Definition at line 698 of file wallet.h.

◆ m_spend_zero_conf_change

bool wallet::CWallet::m_spend_zero_conf_change {DEFAULT_SPEND_ZEROCONF_CHANGE}

Allow Coin Selection to pick unconfirmed UTXOs that were sent from our own wallet if it cannot fund the transaction otherwise.

Definition at line 697 of file wallet.h.

◆ m_spk_managers

std::map<uint256, std::unique_ptr<ScriptPubKeyMan> > wallet::CWallet::m_spk_managers
private

Definition at line 417 of file wallet.h.

◆ m_unlock_mutex

Mutex wallet::CWallet::m_unlock_mutex

Definition at line 576 of file wallet.h.

◆ m_wallet_flags

std::atomic<uint64_t> wallet::CWallet::m_wallet_flags {0}
private

WalletFlags set on this wallet.

Definition at line 377 of file wallet.h.

◆ mapMasterKeys

MasterKeyMap wallet::CWallet::mapMasterKeys

Definition at line 456 of file wallet.h.

◆ nMasterKeyMaxID

unsigned int wallet::CWallet::nMasterKeyMaxID = 0

Definition at line 457 of file wallet.h.

◆ NotifyAddressBookChanged

boost::signals2::signal<void(const CTxDestination& address, const std::string& label, bool isMine, AddressPurpose purpose, ChangeType status)> wallet::CWallet::NotifyAddressBookChanged

Address book entry changed.

Note
called without lock cs_wallet held.

Definition at line 838 of file wallet.h.

◆ NotifyCanGetAddressesChanged

boost::signals2::signal<void ()> wallet::CWallet::NotifyCanGetAddressesChanged

Keypool has new keys.

Definition at line 853 of file wallet.h.

◆ NotifyStatusChanged

boost::signals2::signal<void (CWallet* wallet)> wallet::CWallet::NotifyStatusChanged

Wallet status (encrypted, locked) changed.

Note: Called without locks held.

Definition at line 859 of file wallet.h.

◆ NotifyTransactionChanged

boost::signals2::signal<void(const uint256& hashTx, ChangeType status)> wallet::CWallet::NotifyTransactionChanged

Wallet transaction added, removed or updated.

Note
called with lock cs_wallet held.

Definition at line 844 of file wallet.h.

◆ NotifyUnload

boost::signals2::signal<void ()> wallet::CWallet::NotifyUnload

Wallet is about to be unloaded.

Definition at line 829 of file wallet.h.

◆ NotifyWatchonlyChanged

boost::signals2::signal<void (bool fHaveWatchOnly)> wallet::CWallet::NotifyWatchonlyChanged

Watch-only address added.

Definition at line 850 of file wallet.h.

◆ ShowProgress

boost::signals2::signal<void (const std::string &title, int nProgress)> wallet::CWallet::ShowProgress

Show progress e.g.

for rescan

Definition at line 847 of file wallet.h.

◆ wtxOrdered

TxItems wallet::CWallet::wtxOrdered

Definition at line 485 of file wallet.h.


The documentation for this class was generated from the following files: