Bitcoin ABC  0.28.12
P2P Digital Currency
Classes | Typedefs | Functions | Variables
wallet.h File Reference
#include <consensus/amount.h>
#include <interfaces/chain.h>
#include <interfaces/handler.h>
#include <outputtype.h>
#include <primitives/blockhash.h>
#include <psbt.h>
#include <tinyformat.h>
#include <util/message.h>
#include <util/strencodings.h>
#include <util/string.h>
#include <util/system.h>
#include <util/translation.h>
#include <util/ui_change_type.h>
#include <validationinterface.h>
#include <wallet/coinselection.h>
#include <wallet/crypter.h>
#include <wallet/rpcwallet.h>
#include <wallet/scriptpubkeyman.h>
#include <wallet/transaction.h>
#include <wallet/walletdb.h>
#include <wallet/walletutil.h>
#include <algorithm>
#include <atomic>
#include <cstdint>
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <stdexcept>
#include <string>
#include <utility>
#include <vector>
#include <boost/signals2/signal.hpp>
Include dependency graph for wallet.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  ReserveDestination
 A wrapper to reserve an address from a wallet. More...
 
class  CAddressBookData
 Address book data. More...
 
struct  CRecipient
 
struct  CoinSelectionParams
 
class  CWallet
 A CWallet maintains a set of transactions and balances, and provides the ability to create new transactions. More...
 
struct  CWallet::ScanResult
 
class  WalletRescanReserver
 RAII object to check and reserve a wallet rescan. More...
 

Typedefs

using LoadWalletFn = std::function< void(std::unique_ptr< interfaces::Wallet > wallet)>
 

Functions

void UnloadWallet (std::shared_ptr< CWallet > &&wallet)
 Explicitly unload and delete the wallet. More...
 
bool AddWallet (const std::shared_ptr< CWallet > &wallet)
 
bool RemoveWallet (const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
 
bool RemoveWallet (const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start)
 
std::vector< std::shared_ptr< CWallet > > GetWallets ()
 
std::shared_ptr< CWalletGetWallet (const std::string &name)
 
std::shared_ptr< CWalletLoadWallet (interfaces::Chain &chain, const std::string &name, std::optional< bool > load_on_start, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
 
std::shared_ptr< CWalletCreateWallet (interfaces::Chain &chain, const std::string &name, std::optional< bool > load_on_start, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
 
std::unique_ptr< interfaces::HandlerHandleLoadWallet (LoadWalletFn load_wallet)
 
std::unique_ptr< WalletDatabaseMakeWalletDatabase (const std::string &name, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
 
static const Amount WALLET_INCREMENTAL_RELAY_FEE (5000 *SATOSHI)
 minimum recommended increment for BIP 125 replacement txs More...
 
void MaybeResendWalletTxs ()
 Called periodically by the schedule thread. More...
 
bool AddWalletSetting (interfaces::Chain &chain, const std::string &wallet_name)
 Add wallet name to persistent configuration so it will be loaded on startup. More...
 
bool RemoveWalletSetting (interfaces::Chain &chain, const std::string &wallet_name)
 Remove wallet name from persistent configuration so it will not be loaded on startup. More...
 

Variables

constexpr Amount DEFAULT_PAY_TX_FEE = Amount::zero()
 -paytxfee default More...
 
static const Amount DEFAULT_FALLBACK_FEE = Amount::zero()
 -fallbackfee default More...
 
static const Amount DEFAULT_TRANSACTION_MINFEE_PER_KB = 1000 * SATOSHI
 -mintxfee default More...
 
static const Amount DEFAULT_MAX_AVOIDPARTIALSPEND_FEE = Amount::zero()
 maximum fee increase allowed to do partial spend avoidance, even for nodes with this feature disabled by default More...
 
constexpr Amount HIGH_APS_FEE {COIN / 10000}
 discourage APS fee higher than this amount More...
 
static const bool DEFAULT_SPEND_ZEROCONF_CHANGE = true
 Default for -spendzeroconfchange. More...
 
static const bool DEFAULT_WALLETBROADCAST = true
 
static const bool DEFAULT_DISABLE_WALLET = false
 
constexpr Amount DEFAULT_TRANSACTION_MAXFEE {COIN / 10}
 -maxtxfee default More...
 
constexpr Amount HIGH_TX_FEE_PER_KB {COIN / 100}
 Discourage users to set fees higher than this amount (in satoshis) per kB. More...
 
constexpr Amount HIGH_MAX_TX_FEE {100 * HIGH_TX_FEE_PER_KB}
 -maxtxfee will warn if called with a higher fee than this amount (in satoshis) More...
 
static constexpr size_t DUMMY_P2PKH_INPUT_SIZE = 148
 Pre-calculated constants for input size estimation. More...
 
constexpr OutputType DEFAULT_ADDRESS_TYPE {OutputType::LEGACY}
 Default for -addresstype. More...
 
static constexpr uint64_t KNOWN_WALLET_FLAGS
 
static constexpr uint64_t MUTABLE_WALLET_FLAGS = WALLET_FLAG_AVOID_REUSE
 
static const std::map< std::string, WalletFlagsWALLET_FLAG_MAP
 
const std::map< uint64_t, std::string > WALLET_FLAG_CAVEATS
 

Typedef Documentation

◆ LoadWalletFn

using LoadWalletFn = std::function<void(std::unique_ptr<interfaces::Wallet> wallet)>

Definition at line 46 of file wallet.h.

Function Documentation

◆ AddWallet()

bool AddWallet ( const std::shared_ptr< CWallet > &  wallet)

Definition at line 105 of file wallet.cpp.

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

◆ AddWalletSetting()

bool AddWalletSetting ( interfaces::Chain chain,
const std::string &  wallet_name 
)

Add wallet name to persistent configuration so it will be loaded on startup.

Definition at line 53 of file wallet.cpp.

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

◆ CreateWallet()

std::shared_ptr<CWallet> CreateWallet ( interfaces::Chain chain,
const std::string &  name,
std::optional< bool >  load_on_start,
const DatabaseOptions options,
DatabaseStatus status,
bilingual_str error,
std::vector< bilingual_str > &  warnings 
)

Definition at line 281 of file wallet.cpp.

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

◆ GetWallet()

std::shared_ptr<CWallet> GetWallet ( const std::string &  name)

Definition at line 154 of file wallet.cpp.

Here is the caller graph for this function:

◆ GetWallets()

std::vector<std::shared_ptr<CWallet> > GetWallets ( )

Definition at line 149 of file wallet.cpp.

Here is the caller graph for this function:

◆ HandleLoadWallet()

std::unique_ptr<interfaces::Handler> HandleLoadWallet ( LoadWalletFn  load_wallet)

Definition at line 165 of file wallet.cpp.

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

◆ LoadWallet()

std::shared_ptr<CWallet> LoadWallet ( interfaces::Chain chain,
const std::string &  name,
std::optional< bool >  load_on_start,
const DatabaseOptions options,
DatabaseStatus status,
bilingual_str error,
std::vector< bilingual_str > &  warnings 
)

Definition at line 263 of file wallet.cpp.

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

◆ MakeWalletDatabase()

std::unique_ptr<WalletDatabase> MakeWalletDatabase ( const std::string &  name,
const DatabaseOptions options,
DatabaseStatus status,
bilingual_str error 
)

Definition at line 2673 of file wallet.cpp.

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

◆ MaybeResendWalletTxs()

void MaybeResendWalletTxs ( )

Called periodically by the schedule thread.

Prompts individual wallets to resend their transactions. Actual rebroadcast schedule is managed by the wallets themselves.

Definition at line 1989 of file wallet.cpp.

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

◆ RemoveWallet() [1/2]

bool RemoveWallet ( const std::shared_ptr< CWallet > &  wallet,
std::optional< bool >  load_on_start 
)

Definition at line 143 of file wallet.cpp.

Here is the call graph for this function:

◆ RemoveWallet() [2/2]

bool RemoveWallet ( const std::shared_ptr< CWallet > &  wallet,
std::optional< bool >  load_on_start,
std::vector< bilingual_str > &  warnings 
)

Definition at line 119 of file wallet.cpp.

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

◆ RemoveWalletSetting()

bool RemoveWalletSetting ( interfaces::Chain chain,
const std::string &  wallet_name 
)

Remove wallet name from persistent configuration so it will not be loaded on startup.

Definition at line 68 of file wallet.cpp.

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

◆ UnloadWallet()

void UnloadWallet ( std::shared_ptr< CWallet > &&  wallet)

Explicitly unload and delete the wallet.

Blocks the current thread after signaling the unload intent so that all wallet clients release the wallet. Note that, when blocking is not required, the wallet is implicitly unloaded by the shared pointer deleter.

Definition at line 200 of file wallet.cpp.

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

◆ WALLET_INCREMENTAL_RELAY_FEE()

static const Amount WALLET_INCREMENTAL_RELAY_FEE ( 5000 *  SATOSHI)
static

minimum recommended increment for BIP 125 replacement txs

Variable Documentation

◆ DEFAULT_ADDRESS_TYPE

constexpr OutputType DEFAULT_ADDRESS_TYPE {OutputType::LEGACY}
constexpr

Default for -addresstype.

Definition at line 125 of file wallet.h.

◆ DEFAULT_DISABLE_WALLET

const bool DEFAULT_DISABLE_WALLET = false
static

Definition at line 105 of file wallet.h.

◆ DEFAULT_FALLBACK_FEE

const Amount DEFAULT_FALLBACK_FEE = Amount::zero()
static

-fallbackfee default

Definition at line 84 of file wallet.h.

◆ DEFAULT_MAX_AVOIDPARTIALSPEND_FEE

const Amount DEFAULT_MAX_AVOIDPARTIALSPEND_FEE = Amount::zero()
static

maximum fee increase allowed to do partial spend avoidance, even for nodes with this feature disabled by default

A value of -1 disables this feature completely. A value of 0 (current default) means to attempt to do partial spend avoidance, and use its results if the fees remain unchanged A value > 0 means to do partial spend avoidance if the fee difference against a regular coin selection instance is in the range [0..value].

Definition at line 97 of file wallet.h.

◆ DEFAULT_PAY_TX_FEE

constexpr Amount DEFAULT_PAY_TX_FEE = Amount::zero()
constexpr

-paytxfee default

Definition at line 82 of file wallet.h.

◆ DEFAULT_SPEND_ZEROCONF_CHANGE

const bool DEFAULT_SPEND_ZEROCONF_CHANGE = true
static

Default for -spendzeroconfchange.

Definition at line 103 of file wallet.h.

◆ DEFAULT_TRANSACTION_MAXFEE

constexpr Amount DEFAULT_TRANSACTION_MAXFEE {COIN / 10}
constexpr

-maxtxfee default

Definition at line 107 of file wallet.h.

◆ DEFAULT_TRANSACTION_MINFEE_PER_KB

const Amount DEFAULT_TRANSACTION_MINFEE_PER_KB = 1000 * SATOSHI
static

-mintxfee default

Definition at line 86 of file wallet.h.

◆ DEFAULT_WALLETBROADCAST

const bool DEFAULT_WALLETBROADCAST = true
static

Definition at line 104 of file wallet.h.

◆ DUMMY_P2PKH_INPUT_SIZE

constexpr size_t DUMMY_P2PKH_INPUT_SIZE = 148
staticconstexpr

Pre-calculated constants for input size estimation.

Definition at line 114 of file wallet.h.

◆ HIGH_APS_FEE

constexpr Amount HIGH_APS_FEE {COIN / 10000}
constexpr

discourage APS fee higher than this amount

Definition at line 99 of file wallet.h.

◆ HIGH_MAX_TX_FEE

constexpr Amount HIGH_MAX_TX_FEE {100 * HIGH_TX_FEE_PER_KB}
constexpr

-maxtxfee will warn if called with a higher fee than this amount (in satoshis)

Definition at line 112 of file wallet.h.

◆ HIGH_TX_FEE_PER_KB

constexpr Amount HIGH_TX_FEE_PER_KB {COIN / 100}
constexpr

Discourage users to set fees higher than this amount (in satoshis) per kB.

Definition at line 109 of file wallet.h.

◆ KNOWN_WALLET_FLAGS

constexpr uint64_t KNOWN_WALLET_FLAGS
staticconstexpr
Initial value:
=
@ WALLET_FLAG_DISABLE_PRIVATE_KEYS
Definition: walletutil.h:55
@ WALLET_FLAG_AVOID_REUSE
Definition: walletutil.h:47
@ WALLET_FLAG_KEY_ORIGIN_METADATA
Definition: walletutil.h:51
@ WALLET_FLAG_DESCRIPTORS
Indicate that this wallet supports DescriptorScriptPubKeyMan.
Definition: walletutil.h:70
@ WALLET_FLAG_BLANK_WALLET
Flag set when a wallet contains no HD seed and no private keys, scripts, addresses,...
Definition: walletutil.h:67

Definition at line 127 of file wallet.h.

◆ MUTABLE_WALLET_FLAGS

constexpr uint64_t MUTABLE_WALLET_FLAGS = WALLET_FLAG_AVOID_REUSE
staticconstexpr

Definition at line 132 of file wallet.h.

◆ WALLET_FLAG_CAVEATS

const std::map<uint64_t, std::string> WALLET_FLAG_CAVEATS
extern

Definition at line 42 of file wallet.cpp.

◆ WALLET_FLAG_MAP

const std::map<std::string, WalletFlags> WALLET_FLAG_MAP
static
Initial value:
{
{"avoid_reuse", WALLET_FLAG_AVOID_REUSE},
{"key_origin_metadata", WALLET_FLAG_KEY_ORIGIN_METADATA},
{"disable_private_keys", WALLET_FLAG_DISABLE_PRIVATE_KEYS},
{"descriptor_wallet", WALLET_FLAG_DESCRIPTORS},
}

Definition at line 134 of file wallet.h.