Bitcoin Core 32.99.0
P2P Digital Currency
wallet.h
Go to the documentation of this file.
1// Copyright (c) 2009-2010 Satoshi Nakamoto
2// Copyright (c) 2009-present The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef BITCOIN_WALLET_WALLET_H
7#define BITCOIN_WALLET_WALLET_H
8
9#include <addresstype.h>
10#include <consensus/amount.h>
11#include <interfaces/chain.h>
12#include <interfaces/handler.h>
13#include <kernel/cs_main.h>
14#include <key.h>
15#include <node/types.h>
16#include <outputtype.h>
17#include <policy/feerate.h>
20#include <pubkey.h>
21#include <script/interpreter.h>
22#include <script/script.h>
24#include <sync.h>
25#include <tinyformat.h>
26#include <uint256.h>
27#include <util/btcsignals.h>
28#include <util/expected.h>
29#include <util/fs.h>
30#include <util/hasher.h>
31#include <util/log.h>
32#include <util/result.h>
33#include <util/string.h>
34#include <util/time.h>
35#include <util/ui_change_type.h>
36#include <wallet/crypter.h>
37#include <wallet/db.h>
39#include <wallet/transaction.h>
40#include <wallet/types.h>
41#include <wallet/walletutil.h>
42
43#include <atomic>
44#include <cassert>
45#include <cstddef>
46#include <cstdint>
47#include <functional>
48#include <limits>
49#include <map>
50#include <memory>
51#include <optional>
52#include <set>
53#include <string>
54#include <unordered_map>
55#include <utility>
56#include <vector>
57
58class CKey;
59class CKeyID;
60class CPubKey;
61class Coin;
62class SigningProvider;
63enum class MemPoolRemovalReason;
64enum class SigningResult;
65namespace common {
66enum class PSBTError;
67} // namespace common
68namespace interfaces {
69class Wallet;
70}
71namespace wallet {
72class CWallet;
73class WalletBatch;
74enum class DBErrors : int;
75} // namespace wallet
76struct CBlockLocator;
77struct CExtKey;
79struct KeyOriginInfo;
81struct SignatureData;
82
83using LoadWalletFn = std::function<void(std::unique_ptr<interfaces::Wallet> wallet)>;
84
85struct bilingual_str;
86
87namespace wallet {
88class ChainScanner;
89struct WalletContext;
90
93void WaitForDeleteWallet(std::shared_ptr<CWallet>&& wallet);
94
95bool AddWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet);
96bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start, std::vector<bilingual_str>& warnings);
97bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start);
98std::vector<std::shared_ptr<CWallet>> GetWallets(WalletContext& context);
99std::shared_ptr<CWallet> GetDefaultWallet(WalletContext& context, size_t& count);
100std::shared_ptr<CWallet> GetWallet(WalletContext& context, const std::string& name);
101std::shared_ptr<CWallet> LoadWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
102std::shared_ptr<CWallet> CreateWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
103std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const fs::path& backup_file, const std::string& wallet_name, std::optional<bool> load_on_start, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings, bool load_after_restore = true, bool allow_unnamed = false);
104std::unique_ptr<interfaces::Handler> HandleLoadWallet(WalletContext& context, LoadWalletFn load_wallet);
105void NotifyWalletLoaded(WalletContext& context, const std::shared_ptr<CWallet>& wallet);
106std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error);
107
109inline constexpr CAmount DEFAULT_FALLBACK_FEE = 0;
111inline constexpr CAmount DEFAULT_DISCARD_FEE{10'000};
113inline constexpr CAmount DEFAULT_TRANSACTION_MINFEE = 1000;
115inline constexpr CAmount DEFAULT_CONSOLIDATE_FEERATE{10'000}; // 10 sat/vbyte
125inline constexpr CAmount HIGH_APS_FEE{COIN / 10000};
127inline constexpr CAmount WALLET_INCREMENTAL_RELAY_FEE = 5000;
129inline constexpr bool DEFAULT_SPEND_ZEROCONF_CHANGE = true;
131inline constexpr bool DEFAULT_WALLET_REJECT_LONG_CHAINS{true};
133inline constexpr unsigned int DEFAULT_TX_CONFIRM_TARGET = 6;
135inline constexpr bool DEFAULT_WALLET_RBF = true;
136inline constexpr bool DEFAULT_WALLETBROADCAST = true;
137inline constexpr bool DEFAULT_DISABLE_WALLET = false;
138inline constexpr bool DEFAULT_WALLETCROSSCHAIN = false;
142inline constexpr CAmount HIGH_TX_FEE_PER_KB{COIN / 100};
146inline constexpr size_t DUMMY_NESTED_P2WPKH_INPUT_SIZE = 91;
147
148class CCoinControl;
149
152
153inline constexpr uint64_t KNOWN_WALLET_FLAGS =
161
162inline constexpr uint64_t MUTABLE_WALLET_FLAGS =
164
165static const std::map<WalletFlags, std::string> WALLET_FLAG_TO_STRING{
166 {WALLET_FLAG_AVOID_REUSE, "avoid_reuse"},
167 {WALLET_FLAG_BLANK_WALLET, "blank"},
168 {WALLET_FLAG_KEY_ORIGIN_METADATA, "key_origin_metadata"},
169 {WALLET_FLAG_LAST_HARDENED_XPUB_CACHED, "last_hardened_xpub_cached"},
170 {WALLET_FLAG_DISABLE_PRIVATE_KEYS, "disable_private_keys"},
171 {WALLET_FLAG_DESCRIPTORS, "descriptor_wallet"},
172 {WALLET_FLAG_EXTERNAL_SIGNER, "external_signer"}
173};
174
175static const std::map<std::string, WalletFlags> STRING_TO_WALLET_FLAG{
183};
184
201{
202protected:
204 const CWallet* const pwallet;
209 int64_t nIndex{-1};
213 bool fInternal{false};
214
215public:
219 , type(type) { }
220
223
226 {
228 }
229
233 void ReturnDestination();
235 void KeepDestination();
236};
237
242{
250 std::optional<std::string> label;
251
257 std::optional<AddressPurpose> purpose;
258
266 bool previously_spent{false};
267
275 std::map<std::string, std::string> receive_requests{};
276
278 bool IsChange() const { return !label.has_value(); }
279 std::string GetLabel() const { return label ? *label : std::string{}; }
280 void SetLabel(std::string name) { label = std::move(name); }
281};
282
283inline std::string PurposeToString(AddressPurpose p)
284{
285 switch(p) {
286 case AddressPurpose::RECEIVE: return "receive";
287 case AddressPurpose::SEND: return "send";
288 case AddressPurpose::REFUND: return "refund";
289 } // no default case, so the compiler can warn about missing cases
290 assert(false);
291}
292
293inline std::optional<AddressPurpose> PurposeFromString(std::string_view s)
294{
295 if (s == "receive") return AddressPurpose::RECEIVE;
296 else if (s == "send") return AddressPurpose::SEND;
297 else if (s == "refund") return AddressPurpose::REFUND;
298 return {};
299}
300
302{
306};
307
308
313{
314private:
316
317 bool Unlock(const CKeyingMaterial& vMasterKeyIn);
318
319 friend class ChainScanner;
320
326 // Local time that the tip block was received. Used to schedule wallet rebroadcasts.
327 std::atomic<int64_t> m_best_block_time {0};
328
329 // First created key time. Used to skip blocks prior to this time.
330 // 'std::numeric_limits<int64_t>::max()' if wallet is blank.
331 std::atomic<int64_t> m_birth_time{std::numeric_limits<int64_t>::max()};
332
338 typedef std::unordered_multimap<COutPoint, Txid, SaltedOutpointHasher> TxSpends;
340 void AddToSpends(const COutPoint& outpoint, const Txid& txid) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
342
358 bool AddToWalletIfInvolvingMe(const CTransactionRef& tx, const SyncTxState& state, bool rescanning_old_block) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
359
361 void MarkConflicted(const uint256& hashBlock, int conflicting_height, const Txid& hashTx);
362
363 enum class TxUpdate { UNCHANGED, CHANGED, NOTIFY_CHANGED };
364
365 using TryUpdatingStateFn = std::function<TxUpdate(CWalletTx& wtx)>;
366
368 void RecursiveUpdateTxState(const Txid& tx_hash, const TryUpdatingStateFn& try_updating_state) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
369 void RecursiveUpdateTxState(WalletBatch* batch, const Txid& tx_hash, const TryUpdatingStateFn& try_updating_state) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
370
373
376 std::set<CWalletTx*, WalletTxOrderComparator> GetMalleatedVariants(const CWalletTx& wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
377
379
380 bool SyncTransaction(const CTransactionRef& tx, const SyncTxState& state, bool rescanning_old_block = false) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
381
383 std::atomic<uint64_t> m_wallet_flags{0};
384
385 bool SetAddressBookWithDB(WalletBatch& batch, const CTxDestination& address, const std::string& strName, const std::optional<AddressPurpose>& strPurpose);
386
388 void UnsetWalletFlagWithDB(WalletBatch& batch, uint64_t flag);
389
391 void UnsetBlankWalletFlag(WalletBatch& batch) override;
392
395
397 std::string m_name;
398
400 std::unique_ptr<WalletDatabase> m_database;
401
402 std::unique_ptr<ChainScanner> m_scanner;
403
411 uint256 m_last_block_processed GUARDED_BY(cs_wallet);
412
418 int m_last_block_processed_height GUARDED_BY(cs_wallet) = -1;
419
420 std::map<OutputType, ScriptPubKeyMan*> m_external_spk_managers;
421 std::map<OutputType, ScriptPubKeyMan*> m_internal_spk_managers;
422
423 // Indexed by a unique identifier produced by each ScriptPubKeyMan using
424 // ScriptPubKeyMan::GetID. In many cases it will be the hash of an internal structure
425 std::map<uint256, std::unique_ptr<ScriptPubKeyMan>> m_spk_managers;
426
427 // Appends spk managers into the main 'm_spk_managers'.
428 // Must be the only method adding data to it.
429 void AddScriptPubKeyMan(const uint256& id, std::unique_ptr<ScriptPubKeyMan> spkm_man);
430
431 // Same as 'AddActiveScriptPubKeyMan' but designed for use within a batch transaction context
432 void AddActiveScriptPubKeyManWithDb(WalletBatch& batch, uint256 id, OutputType type, bool internal);
433
435 void SetWalletFlagWithDB(WalletBatch& batch, uint64_t flags);
436
438 std::unordered_map<CScript, std::vector<ScriptPubKeyMan*>, SaltedSipHasher> m_cached_spks;
439
441 std::unordered_map<COutPoint, WalletTXO, SaltedOutpointHasher> m_txos GUARDED_BY(cs_wallet);
442
448 static bool AttachChain(const std::shared_ptr<CWallet>& wallet, interfaces::Chain& chain, bool rescan_required, bilingual_str& error, std::vector<bilingual_str>& warnings);
449
451
452 // Update last block processed in memory only
453 void SetLastBlockProcessedInMem(int block_height, uint256 block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
454
456 void UpdateTrucSiblingConflicts(const CWalletTx& parent_wtx, const Txid& child_txid, bool add_conflict) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
457
458public:
464
465 WalletDatabase& GetDatabase() const override
466 {
467 assert(static_cast<bool>(m_database));
468 return *m_database;
469 }
470
473 const std::string& GetName() const { return m_name; }
474
475 typedef std::map<unsigned int, CMasterKey> MasterKeyMap;
477 unsigned int nMasterKeyMaxID = 0;
478
480 CWallet(interfaces::Chain* chain, const std::string& name, std::unique_ptr<WalletDatabase> database);
481 ~CWallet();
482
483 bool IsLocked() const override;
484 bool Lock();
485
487 bool HaveChain() const { return m_chain ? true : false; }
488
491 std::unordered_map<Txid, CWalletTx, SaltedTxidHasher> mapWallet GUARDED_BY(cs_wallet);
492
493 typedef std::multimap<int64_t, CWalletTx*> TxItems;
495
496 int64_t nOrderPosNext GUARDED_BY(cs_wallet) = 0;
497
498 std::map<CTxDestination, CAddressBookData> m_address_book GUARDED_BY(cs_wallet);
499 const CAddressBookData* FindAddressBookEntry(const CTxDestination&, bool allow_change = false) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
500
507 std::map<COutPoint, bool> m_locked_coins GUARDED_BY(cs_wallet);
508
511
513 interfaces::Chain& chain() const { assert(m_chain); return *m_chain; }
514
516
517 std::set<Txid> GetTxConflicts(const CWalletTx& wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
518
519 const std::unordered_map<COutPoint, WalletTXO, SaltedOutpointHasher>& GetTXOs() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); return m_txos; };
520 std::optional<WalletTXO> GetTXO(const COutPoint& outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
521
526
541
549
550 enum class SpendType {
551 UNSPENT,
552 CONFIRMED,
553 MEMPOOL,
554 NONMEMPOOL,
555 };
557 bool IsSpent(const COutPoint& outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
558
559 // Whether this or any known scriptPubKey with the same single key has been spent.
560 bool IsSpentKey(const CScript& scriptPubKey) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
561 void SetSpentKeyState(WalletBatch& batch, const Txid& hash, unsigned int n, bool used, std::set<CTxDestination>& tx_destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
562
565
566 bool IsLockedCoin(const COutPoint& output) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
567 void LoadLockedCoin(const COutPoint& coin, bool persistent) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
568 bool LockCoin(const COutPoint& output, bool persist) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
571 void ListLockedCoins(std::vector<COutPoint>& vOutpts) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
572
574 const ChainScanner& Scanner() const;
575
578
582 void LoadAddressReceiveRequest(const CTxDestination& dest, const std::string& id, const std::string& request) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
583
585 int64_t nRelockTime GUARDED_BY(cs_wallet){0};
586
587 // Used to prevent concurrent calls to walletpassphrase RPC.
589 // Used to prevent deleting the passphrase from memory when it is still in use.
591
592 bool Unlock(const SecureString& strWalletPassphrase);
593 bool ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase);
594 bool EncryptWallet(const SecureString& strWalletPassphrase);
595
596 unsigned int ComputeTimeSmart(const CWalletTx& wtx, bool rescanning_old_block) const;
597
604
605 void MarkDirty();
606
613 using UpdateWalletTxFn = std::function<bool(CWalletTx& wtx, bool new_tx)>;
614
619 CWalletTx* AddToWallet(CTransactionRef tx, const TxState& state, const UpdateWalletTxFn& update_wtx=nullptr, bool rescanning_old_block = false);
621 void transactionAddedToMempool(const CTransactionRef& tx) override;
622 void blockConnected(const kernel::ChainstateRole& role, const interfaces::BlockInfo& block) override;
623 void blockDisconnected(const interfaces::BlockInfo& block) override;
624 void updatedBlockTip() override;
629 bool ShouldResend() const;
630 void ResubmitWalletTransactions(node::TxBroadcast broadcast_method, bool force);
631
632 OutputType TransactionChangeType(const std::optional<OutputType>& change_type, const std::vector<CRecipient>& vecSend) const;
633
637 bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const;
638 SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const;
639
652 std::optional<common::PSBTError> FillPSBT(PartiallySignedTransaction& psbtx,
653 const common::PSBTFillOptions& options,
654 bool& complete,
655 size_t* n_signed = nullptr) const;
656
670 std::optional<Txid> replaces_txid = std::nullopt,
671 std::optional<std::string> comment = std::nullopt,
672 std::optional<std::string> comment_to = std::nullopt,
673 const std::vector<std::string>& messages = {},
674 const std::vector<std::string>& payment_requests = {}
675 );
676
678 bool SubmitTxMemoryPoolAndRelay(CWalletTx& wtx, std::string& err_string, node::TxBroadcast broadcast_method) const
680
682 void MaybeUpdateBirthTime(int64_t time);
683
697
701
707
717 std::optional<OutputType> m_default_change_type{};
720
723
726
728 bool TopUpKeyPool(unsigned int kpSize = 0);
729
730 // Filter struct for 'ListAddrBookAddresses'
732 // Fetch addresses with the provided label
733 std::optional<std::string> m_op_label{std::nullopt};
734 // Don't include change addresses by default
735 bool ignore_change{true};
736 };
737
741 std::vector<CTxDestination> ListAddrBookAddresses(const std::optional<AddrBookFilter>& filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
742
746 std::set<std::string> ListAddrBookLabels(std::optional<AddressPurpose> purpose) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
747
752 using ListAddrBookFunc = std::function<void(const CTxDestination& dest, const std::string& label, bool is_change, const std::optional<AddressPurpose> purpose)>;
754
759 void MarkDestinationsDirty(const std::set<CTxDestination>& destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
760
761 util::Result<CTxDestination> GetNewDestination(OutputType type, const std::string& label);
763
767 CAmount GetDebit(const CTxIn& txin) const;
768 bool IsMine(const CTxOut& txout) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
770 bool IsMine(const COutPoint& outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
772 bool IsFromMe(const CTransaction& tx) const;
773 CAmount GetDebit(const CTransaction& tx) const;
774
775 DBErrors PopulateWalletFromDB(bilingual_str& error, std::vector<bilingual_str>& warnings);
776
778 util::Result<void> RemoveTxs(std::vector<Txid>& txs_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
779 util::Result<void> RemoveTxs(WalletBatch& batch, std::vector<Txid>& txs_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
780
781 bool SetAddressBook(const CTxDestination& address, const std::string& strName, const std::optional<AddressPurpose>& purpose);
782
783 bool DelAddressBook(const CTxDestination& address);
784 bool DelAddressBookWithDB(WalletBatch& batch, const CTxDestination& address);
785
788
789 std::vector<std::string> GetAddressReceiveRequests() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
790 bool SetAddressReceiveRequest(WalletBatch& batch, const CTxDestination& dest, const std::string& id, const std::string& value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
792
794
797
800
802 void Close();
803
805 btcsignals::signal<void ()> NotifyUnload;
806
811 btcsignals::signal<void(const CTxDestination& address,
812 const std::string& label, bool isMine,
813 AddressPurpose purpose, ChangeType status)>
815
820 btcsignals::signal<void(const Txid& hashTx, ChangeType status)> NotifyTransactionChanged;
821
823 btcsignals::signal<void (const std::string &title, int nProgress)> ShowProgress;
824
827
833
837 void SetBroadcastTransactions(bool broadcast) { fBroadcastTransactions = broadcast; }
838
840 bool TransactionCanBeAbandoned(const Txid& hashTx) const;
841
842 /* Mark a transaction (and it in-wallet descendants) as abandoned so its inputs may be respent. */
843 bool AbandonTransaction(const Txid& hashTx);
845
847 bool MarkReplaced(const Txid& originalHash, const Txid& newHash);
848
849 static bool LoadWalletArgs(std::shared_ptr<CWallet> wallet, const WalletContext& context, bilingual_str& error, std::vector<bilingual_str>& warnings);
850
851 /* Initializes, creates and returns a new CWallet; returns a null pointer in case of an error */
852 static std::shared_ptr<CWallet> CreateNew(WalletContext& context, const std::string& name, std::unique_ptr<WalletDatabase> database, uint64_t wallet_creation_flags, bool born_encrypted, bilingual_str& error, std::vector<bilingual_str>& warnings);
853
854 /* Initializes, loads, and returns a CWallet from an existing wallet; returns a null pointer in case of an error */
855 static std::shared_ptr<CWallet> LoadExisting(WalletContext& context, const std::string& name, std::unique_ptr<WalletDatabase> database, bilingual_str& error, std::vector<bilingual_str>& warnings);
856
861 void postInitProcess();
862
863 [[nodiscard]] bool BackupWallet(const std::string& strDest) const;
864
865 /* Returns true if HD is enabled */
866 bool IsHDEnabled() const;
867
868 /* Returns true if the wallet can give out new addresses. This means it has keys in the keypool or can generate new keys */
869 bool CanGetAddresses(bool internal = false) const;
870
871 /* Returns the time of the first created key or, in case of an import, it could be the time of the first received transaction */
872 int64_t GetBirthTime() const { return m_birth_time; }
873
880 void BlockUntilSyncedToCurrentChain() const LOCKS_EXCLUDED(::cs_main) EXCLUSIVE_LOCKS_REQUIRED(!cs_wallet);
881
883 void SetWalletFlag(uint64_t flags);
884
886 void UnsetWalletFlag(uint64_t flag);
887
889 bool IsWalletFlagSet(uint64_t flag) const override;
890
894 void InitWalletFlags(uint64_t flags);
896 bool LoadWalletFlags(uint64_t flags);
898 uint64_t GetWalletFlags() const;
899
901 std::string LogName() const override
902 {
903 std::string name{GetName()};
904 return name.empty() ? "default wallet" : name;
905 };
906
908 std::string DisplayName() const
909 {
910 std::string name{GetName()};
911 return name.empty() ? _("default wallet") : name;
912 };
913
915 template <typename... Params>
916 void WalletLogPrintf(util::ConstevalFormatString<sizeof...(Params)> wallet_fmt, const Params&... params) const
917 {
918 LogInfo("[%s] %s", LogName(), tfm::format(wallet_fmt, params...));
919 };
920
922 {
924 WalletLogPrintf("setKeyPool.size() = %u\n", GetKeyPoolSize());
925 WalletLogPrintf("mapWallet.size() = %u\n", mapWallet.size());
926 WalletLogPrintf("m_address_book.size() = %u\n", m_address_book.size());
927 };
928
930 std::set<ScriptPubKeyMan*> GetActiveScriptPubKeyMans() const;
931 bool IsActiveScriptPubKeyMan(const ScriptPubKeyMan& spkm) const;
932
934 std::set<ScriptPubKeyMan*> GetAllScriptPubKeyMans() const;
935
937 ScriptPubKeyMan* GetScriptPubKeyMan(const OutputType& type, bool internal) const;
938
940 std::set<ScriptPubKeyMan*> GetScriptPubKeyMans(const CScript& script) const;
943
945 std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const;
946 std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script, SignatureData& sigdata) const;
947
949 std::vector<WalletDescriptor> GetWalletDescriptors(const CScript& script) const;
950
954
956 void SetupLegacyDataSPKM();
957
958 bool WithEncryptionKey(std::function<bool (const CKeyingMaterial&)> cb) const override;
959
960 bool HasEncryptionKeys() const override;
961 bool HaveCryptedKeys() const;
962
965 {
967 assert(m_last_block_processed_height >= 0);
968 return m_last_block_processed_height;
969 };
971 {
973 assert(m_last_block_processed_height >= 0);
974 return m_last_block_processed;
975 }
977 void SetLastBlockProcessed(int block_height, uint256 block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
980
983
986
991 void AddActiveScriptPubKeyMan(uint256 id, OutputType type, bool internal);
992
997 void LoadActiveScriptPubKeyMan(uint256 id, OutputType type, bool internal);
998
1003 void DeactivateScriptPubKeyMan(uint256 id, OutputType type, bool internal);
1004
1010
1013
1016
1019
1023 std::optional<bool> IsInternalScriptPubKeyMan(ScriptPubKeyMan* spk_man) const;
1024
1026 util::Result<std::reference_wrapper<DescriptorScriptPubKeyMan>> AddWalletDescriptor(WalletDescriptor& desc, const FlatSigningProvider& signing_provider, const std::string& label, bool internal) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
1027
1035 util::Expected<CExtPubKey, WalletError> AddHDKey(const std::optional<CExtKey>& key);
1036
1043
1046
1050
1052 bool CanGrindR() const;
1053
1055 void CacheNewScriptPubKeys(const std::set<CScript>& spks, ScriptPubKeyMan* spkm);
1056
1057 void TopUpCallback(const std::set<CScript>& spks, ScriptPubKeyMan* spkm) override;
1058
1060 enum class HDKeyFilter {
1061 Active,
1062 All,
1063 UnusedKey,
1064 };
1065 using HDPubKeyMap = std::map<CExtPubKey, std::set<DescriptorScriptPubKeyMan*>>;
1068
1071 std::optional<CKey> GetKey(const CKeyID& keyid) const;
1072
1075 std::optional<CExtKey> GetExtKey(const CExtPubKey& xpub) const;
1076
1079};
1080
1085void MaybeResendWalletTxs(WalletContext& context);
1086
1087
1089bool AddWalletSetting(interfaces::Chain& chain, const std::string& wallet_name);
1090
1092bool RemoveWalletSetting(interfaces::Chain& chain, const std::string& wallet_name);
1093
1095 std::string wallet_name;
1096 std::optional<std::string> watchonly_wallet_name;
1097 std::optional<std::string> solvables_wallet_name;
1098 std::shared_ptr<CWallet> wallet;
1099 std::shared_ptr<CWallet> watchonly_wallet;
1100 std::shared_ptr<CWallet> solvables_wallet;
1101 fs::path backup_path;
1102};
1103
1105[[nodiscard]] util::Result<MigrationResult> MigrateLegacyToDescriptor(const std::string& wallet_name, const SecureString& passphrase, WalletContext& context, bool load_wallet = true);
1107[[nodiscard]] util::Result<MigrationResult> MigrateLegacyToDescriptor(std::shared_ptr<CWallet> local_wallet, const SecureString& passphrase, WalletContext& context, bool load_wallet = true);
1108
1110util::Result<fs::path> GetWalletPath(const std::string& name);
1111} // namespace wallet
1112
1113#endif // BITCOIN_WALLET_WALLET_H
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
Definition: addresstype.h:143
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
constexpr CAmount COIN
The amount of satoshis in one BTC.
Definition: amount.h:15
int flags
Definition: bitcoin-tx.cpp:530
const CChainParams & Params()
Return the currently selected parameters.
Fee rate in satoshis per virtualbyte: CAmount / vB the feerate is represented internally as FeeFrac.
Definition: feerate.h:32
An encapsulated private key.
Definition: key.h:40
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:26
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:30
An encapsulated public key.
Definition: pubkey.h:40
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:406
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:287
An input of a transaction.
Definition: transaction.h:63
An output of a transaction.
Definition: transaction.h:141
A UTXO entry.
Definition: coins.h:46
A version of CTransaction with the PSBT format.
Definition: psbt.h:1239
An interface to be implemented by keystores that support signing.
Chain notifications.
Definition: chain.h:305
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
Definition: chain.h:117
256-bit opaque blob.
Definition: uint256.h:196
Coin Control Features.
Definition: coincontrol.h:83
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
Definition: wallet.h:313
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 ...
Definition: wallet.cpp:2430
bool SetAddressBook(const CTxDestination &address, const std::string &strName, const std::optional< AddressPurpose > &purpose)
Definition: wallet.cpp:2318
bool TopUpKeyPool(unsigned int kpSize=0)
Definition: wallet.cpp:2393
bool HaveChain() const
Interface to assert chain access.
Definition: wallet.h:487
bool GetBroadcastTransactions() const
Inquire whether this wallet broadcasts transactions.
Definition: wallet.h:835
bool m_signal_rbf
Definition: wallet.h:688
int64_t GetBirthTime() const
Definition: wallet.h:872
DBErrors PopulateWalletFromDB(bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:2167
unsigned int GetKeyPoolSize() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2382
std::function< bool(CWalletTx &wtx, bool new_tx)> UpdateWalletTxFn
Callback for updating transaction metadata in mapWallet.
Definition: wallet.h:613
CAmount m_default_max_tx_fee
Absolute maximum transaction fee (in satoshis) used by default for the wallet.
Definition: wallet.h:719
btcsignals::signal< void()> NotifyUnload
Wallet is about to be unloaded.
Definition: wallet.h:805
std::optional< WalletTXO > GetTXO(const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:4490
bool IsActiveScriptPubKeyMan(const ScriptPubKeyMan &spkm) const
Definition: wallet.cpp:3230
static bool AttachChain(const std::shared_ptr< CWallet > &wallet, interfaces::Chain &chain, 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_blo...
Definition: wallet.cpp:2995
OutputType m_default_address_type
Definition: wallet.h:710
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 Cha...
static std::shared_ptr< CWallet > LoadExisting(WalletContext &context, const std::string &name, std::unique_ptr< WalletDatabase > database, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:2951
CFeeRate m_discard_rate
If the cost to spend a change output at this feerate is greater than the value of the output itself,...
Definition: wallet.h:700
void AddActiveScriptPubKeyMan(uint256 id, OutputType type, bool internal)
Adds the active ScriptPubKeyMan for the specified type and internal.
Definition: wallet.cpp:3501
void LogStats() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.h:921
btcsignals::signal< void(const CTxDestination &address, const std::string &label, bool isMine, AddressPurpose purpose, ChangeType status)> NotifyAddressBookChanged
Address book entry changed.
Definition: wallet.h:814
void LoadActiveScriptPubKeyMan(uint256 id, OutputType type, bool internal)
Loads an active ScriptPubKeyMan for the specified type and internal.
Definition: wallet.cpp:3515
std::unique_ptr< WalletDatabase > m_database
Internal database handle.
Definition: wallet.h:400
bool IsLockedCoin(const COutPoint &output) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2577
bool SignTransaction(CMutableTransaction &tx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Fetch the inputs and sign with SIGHASH_ALL.
Definition: wallet.cpp:1957
CWallet(interfaces::Chain *chain, const std::string &name, std::unique_ptr< WalletDatabase > database)
Construct wallet with specified name and database implementation.
Definition: wallet.cpp:485
std::function< void(const CTxDestination &dest, const std::string &label, bool is_change, const std::optional< AddressPurpose > purpose)> ListAddrBookFunc
Walk-through the address book entries.
Definition: wallet.h:752
std::unique_ptr< SigningProvider > GetSolvingProvider(const CScript &script) const
Get the SigningProvider for a script.
Definition: wallet.cpp:3283
bool IsTxImmatureCoinBase(const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:3167
void RefreshAllTXOs() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Cache outputs that belong to the wallet for all transactions in the wallet.
Definition: wallet.cpp:4482
void AddActiveScriptPubKeyManWithDb(WalletBatch &batch, uint256 id, OutputType type, bool internal)
Definition: wallet.cpp:3507
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.
Definition: wallet.cpp:4401
std::set< ScriptPubKeyMan * > GetActiveScriptPubKeyMans() const
Returns all unique ScriptPubKeyMans in m_internal_spk_managers and m_external_spk_managers.
Definition: wallet.cpp:3216
const CAddressBookData * FindAddressBookEntry(const CTxDestination &, bool allow_change=false) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:3115
void postInitProcess()
Wallet post-init setup Gives the wallet a chance to register repetitive tasks and complete post-init ...
Definition: wallet.cpp:3125
std::optional< CExtKey > GetExtKey(const CExtPubKey &xpub) const
Reconstruct the extended private key for an HD xpub.
Definition: wallet.cpp:4445
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 blockch...
Definition: wallet.cpp:3141
unsigned int nMasterKeyMaxID
Definition: wallet.h:477
bool SetAddressReceiveRequest(WalletBatch &batch, const CTxDestination &dest, const std::string &id, const std::string &value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2706
int GetLastBlockHeight() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Get last block processed height.
Definition: wallet.h:964
ChainScanner & Scanner()
Definition: wallet.cpp:499
LegacyDataSPKM * GetLegacyDataSPKM() const
Get the LegacyDataSPKM used for all legacy output types and both internal and external chains.
Definition: wallet.cpp:3314
void DisconnectChainNotifications()
Disconnect chain notifications and wait for all notifications to be processed.
Definition: wallet.cpp:4500
CAmount m_max_aps_fee
The maximum fee amount we're willing to pay to prioritize partial spend avoidance.
Definition: wallet.h:709
std::optional< common::PSBTError > FillPSBT(PartiallySignedTransaction &psbtx, const common::PSBTFillOptions &options, bool &complete, size_t *n_signed=nullptr) const
Fills out a PSBT with information from the wallet.
Definition: wallet.cpp:1991
void SetupWalletGeneration() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Setup new descriptors or seed for new address generation.
Definition: wallet.cpp:3489
std::vector< CTxDestination > ListAddrBookAddresses(const std::optional< AddrBookFilter > &filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Filter and retrieve destinations stored in the addressbook.
Definition: wallet.cpp:2453
DescriptorScriptPubKeyMan * GetDescriptorScriptPubKeyMan(const WalletDescriptor &desc) const
Return the DescriptorScriptPubKeyMan for a WalletDescriptor if it is already in the wallet.
Definition: wallet.cpp:3552
btcsignals::signal< void(CWallet *wallet)> NotifyStatusChanged
Wallet status (encrypted, locked) changed.
Definition: wallet.h:832
std::unique_ptr< ChainScanner > m_scanner
Definition: wallet.h:402
btcsignals::signal< void()> NotifyCanGetAddressesChanged
Keypool has new keys.
Definition: wallet.h:826
std::map< OutputType, ScriptPubKeyMan * > m_external_spk_managers
Definition: wallet.h:420
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,...
CKeyingMaterial vMasterKey GUARDED_BY(cs_wallet)
const std::unordered_map< COutPoint, WalletTXO, SaltedOutpointHasher > & GetTXOs() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.h:519
void SetBroadcastTransactions(bool broadcast)
Set whether this wallet broadcasts transactions.
Definition: wallet.h:837
std::optional< MigrationData > GetDescriptorsForLegacy(bilingual_str &error) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Get all of the descriptors from a legacy wallet.
Definition: wallet.cpp:3784
std::optional< OutputType > m_default_change_type
Default output type for change outputs.
Definition: wallet.h:717
bool HaveCryptedKeys() const
Definition: wallet.cpp:3368
int64_t nOrderPosNext GUARDED_BY(cs_wallet)=0
LegacyDataSPKM * GetOrCreateLegacyDataSPKM()
Definition: wallet.cpp:3334
interfaces::Chain & chain() const
Interface for accessing chain state.
Definition: wallet.h:513
const std::string & GetName() const
Get a name for this wallet for logging/debugging purposes.
Definition: wallet.h:473
bool Unlock(const CKeyingMaterial &vMasterKeyIn)
Definition: wallet.cpp:3201
bool MigrateToSQLite(bilingual_str &error) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Move all records from the BDB database to a new SQLite database for storage.
Definition: wallet.cpp:3710
bool BackupWallet(const std::string &strDest) const
Definition: wallet.cpp:3135
std::unique_ptr< interfaces::Handler > m_chain_notifications_handler
Registered interfaces::Chain::Notifications handler.
Definition: wallet.h:510
std::map< OutputType, ScriptPubKeyMan * > m_internal_spk_managers
Definition: wallet.h:421
std::string m_name
Wallet name: relative directory name or "" for default wallet.
Definition: wallet.h:397
std::map< CExtPubKey, std::set< DescriptorScriptPubKeyMan * > > HDPubKeyMap
Definition: wallet.h:1065
bool SetAddressPreviouslySpent(WalletBatch &batch, const CTxDestination &dest, bool used) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2665
void LoadDescriptorScriptPubKeyMan(uint256 id, WalletDescriptor &desc, const KeyMap &keys, const CryptedKeyMap &ckeys)
Instantiate a descriptor ScriptPubKeyMan from the WalletDescriptor and load it.
Definition: wallet.cpp:3388
util::Result< void > RemoveTxs(std::vector< Txid > &txs_to_remove) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Erases the provided transactions from the wallet.
Definition: wallet.cpp:2221
RecursiveMutex m_relock_mutex
Definition: wallet.h:590
btcsignals::signal< void(const Txid &hashTx, ChangeType status)> NotifyTransactionChanged
Wallet transaction added, removed or updated.
Definition: wallet.h:820
std::string m_notify_tx_changed_script
Notify external script when a wallet transaction comes in or is updated (handled by -walletnotify)
Definition: wallet.h:725
std::vector< std::string > GetAddressReceiveRequests() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2695
std::vector< WalletDescriptor > GetWalletDescriptors(const CScript &script) const
Get the wallet descriptors for a script.
Definition: wallet.cpp:3302
bool fBroadcastTransactions
Whether this wallet will submit newly created transactions to the node's mempool and prompt rebroadca...
Definition: wallet.h:325
size_t KeypoolCountExternalKeys() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2370
void CacheNewScriptPubKeys(const std::set< CScript > &spks, ScriptPubKeyMan *spkm)
Add scriptPubKeys for this ScriptPubKeyMan into the scriptPubKey cache.
Definition: wallet.cpp:4394
int GetTxBlocksToMaturity(const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:3155
void WalletLogPrintf(util::ConstevalFormatString< sizeof...(Params)> wallet_fmt, const Params &... params) const
Prepends the wallet name in logging output to ease debugging in multi-wallet use cases.
Definition: wallet.h:916
bool HasEncryptionKeys() const override
Definition: wallet.cpp:3363
bool CanGrindR() const
Whether the (external) signer performs R-value signature grinding.
Definition: wallet.cpp:4012
std::map< CTxDestination, CAddressBookData > m_address_book GUARDED_BY(cs_wallet)
std::string LogName() const override
Return wallet name for use in logs, will return "default wallet" if the wallet has no name.
Definition: wallet.h:901
void CommitTransaction(CTransactionRef tx, std::optional< Txid > replaces_txid=std::nullopt, std::optional< std::string > comment=std::nullopt, std::optional< std::string > comment_to=std::nullopt, const std::vector< std::string > &messages={}, const std::vector< std::string > &payment_requests={})
Submit the transaction to the node's mempool and then relay to peers.
Definition: wallet.cpp:2120
util::Result< CTxDestination > GetNewChangeDestination(OutputType type)
Definition: wallet.cpp:2419
std::optional< bool > IsInternalScriptPubKeyMan(ScriptPubKeyMan *spk_man) const
Returns whether the provided ScriptPubKeyMan is internal.
Definition: wallet.cpp:3566
void SetNextResend()
Set the next time this wallet should resend transactions to 12-36 hours from now, ~1 day on average.
Definition: wallet.h:627
void LoadLockedCoin(const COutPoint &coin, bool persistent) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2533
void SetupLegacyDataSPKM()
Create a LegacyDataSPKM and set it for all legacy output types and both internal and external chains.
Definition: wallet.cpp:3340
TxItems wtxOrdered
Definition: wallet.h:494
static std::shared_ptr< CWallet > CreateNew(WalletContext &context, const std::string &name, std::unique_ptr< WalletDatabase > database, uint64_t wallet_creation_flags, bool born_encrypted, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:2896
SigningResult SignMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig) const
Definition: wallet.cpp:2046
bool m_spend_zero_conf_change
Allow Coin Selection to pick unconfirmed UTXOs that were sent from our own wallet if it cannot fund t...
Definition: wallet.h:687
MasterKeyMap mapMasterKeys
Definition: wallet.h:476
unsigned int m_confirm_target
Definition: wallet.h:684
CFeeRate m_consolidate_feerate
When the actual feerate is less than the consolidate feerate, we will tend to make transactions which...
Definition: wallet.h:706
btcsignals::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
Definition: wallet.h:823
util::Result< void > ApplyMigrationData(WalletBatch &local_wallet_batch, MigrationData &data) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Adds the ScriptPubKeyMans from MigrationData to this wallet, removes the LegacyDataSPKM,...
Definition: wallet.cpp:3803
util::Expected< CExtPubKey, WalletError > AddHDKey(const std::optional< CExtKey > &key)
Add an HD key to the wallet and return its master xpub.
Definition: wallet.cpp:3639
NodeClock::time_point m_next_resend
The next scheduled rebroadcast of wallet transactions.
Definition: wallet.h:322
HDKeyFilter
Which descriptors GetHDPubKeys() should consider.
Definition: wallet.h:1060
WalletDatabase & GetDatabase() const override
Definition: wallet.h:465
std::optional< CKey > GetKey(const CKeyID &keyid) const
Find the private key for the given key id from the wallet's descriptors, if available Returns nullopt...
Definition: wallet.cpp:4430
bool EraseAddressReceiveRequest(WalletBatch &batch, const CTxDestination &dest, const std::string &id) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2713
bool SetAddressBookWithDB(WalletBatch &batch, const CTxDestination &address, const std::string &strName, const std::optional< AddressPurpose > &strPurpose)
Definition: wallet.cpp:2282
void WriteBestBlock() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Write the current best block to database.
Definition: wallet.cpp:4453
bool DelAddressBookWithDB(WalletBatch &batch, const CTxDestination &address)
Definition: wallet.cpp:2331
std::string DisplayName() const
Return wallet name for display, like LogName() but translates "default wallet" string.
Definition: wallet.h:908
void LoadAddressReceiveRequest(const CTxDestination &dest, const std::string &id, const std::string &request) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Appends payment request to destination.
Definition: wallet.cpp:2684
Mutex m_unlock_mutex
Definition: wallet.h:588
void AddScriptPubKeyMan(const uint256 &id, std::unique_ptr< ScriptPubKeyMan > spkm_man)
Definition: wallet.cpp:3324
void DeactivateScriptPubKeyMan(uint256 id, OutputType type, bool internal)
Remove specified ScriptPubKeyMan from set of active SPK managers.
Definition: wallet.cpp:3535
std::atomic< uint64_t > m_wallet_flags
WalletFlags set on this wallet.
Definition: wallet.h:383
interfaces::Chain * m_chain
Interface for accessing chain state.
Definition: wallet.h:394
bool LockCoin(const COutPoint &output, bool persist) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2539
CFeeRate m_fallback_fee
If fee estimation does not have enough data to provide estimates, use this fee instead.
Definition: wallet.h:696
bool IsLocked() const override
Definition: wallet.cpp:3175
std::map< unsigned int, CMasterKey > MasterKeyMap
Definition: wallet.h:475
OutputType TransactionChangeType(const std::optional< OutputType > &change_type, const std::vector< CRecipient > &vecSend) const
Definition: wallet.cpp:2059
std::set< ScriptPubKeyMan * > GetAllScriptPubKeyMans() const
Returns all unique ScriptPubKeyMans.
Definition: wallet.cpp:3241
void RefreshTXOsFromTx(const CWalletTx &wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Cache outputs that belong to the wallet from a single transaction.
Definition: wallet.cpp:4468
unsigned int ComputeTimeSmart(const CWalletTx &wtx, bool rescanning_old_block) const
Compute smart timestamp for a transaction being added to the wallet.
Definition: wallet.cpp:2614
TxSpends mapTxSpends GUARDED_BY(cs_wallet)
std::set< std::string > ListAddrBookLabels(std::optional< AddressPurpose > purpose) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Retrieve all the known labels in the address book.
Definition: wallet.cpp:2469
std::unordered_map< COutPoint, WalletTXO, SaltedOutpointHasher > m_txos GUARDED_BY(cs_wallet)
Set of both spent and unspent transaction outputs owned by this wallet.
void ListLockedCoins(std::vector< COutPoint > &vOutpts) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2583
bool UnlockAllCoins() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2565
util::Result< CTxDestination > GetNewDestination(OutputType type, const std::string &label)
Definition: wallet.cpp:2403
ScriptPubKeyMan * GetScriptPubKeyMan(const OutputType &type, bool internal) const
Get the ScriptPubKeyMan for the given OutputType and internal/external chain.
Definition: wallet.cpp:3250
bool IsAddressPreviouslySpent(const CTxDestination &dest) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2689
bool WithEncryptionKey(std::function< bool(const CKeyingMaterial &)> cb) const override
Pass the encryption key to cb().
Definition: wallet.cpp:3357
uint256 GetLastBlockHash() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.h:970
bool m_allow_fallback_fee
will be false if -fallbackfee=0
Definition: wallet.h:689
int64_t m_keypool_size
Number of pre-generated keys/scripts by each spkm (part of the look-ahead process,...
Definition: wallet.h:722
RecursiveMutex cs_wallet
Main wallet lock.
Definition: wallet.h:463
void ForEachAddrBookEntry(const ListAddrBookFunc &func) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2444
void ConnectScriptPubKeyManNotifiers()
Connect the signals from ScriptPubKeyMans to the signals in CWallet.
Definition: wallet.cpp:3376
bool DelAddressBook(const CTxDestination &address)
Definition: wallet.cpp:2324
CFeeRate m_min_fee
Definition: wallet.h:690
std::atomic< int64_t > m_best_block_time
Definition: wallet.h:327
std::unordered_map< CScript, std::vector< ScriptPubKeyMan * >, SaltedSipHasher > m_cached_spks
Cache of descriptor ScriptPubKeys used for IsMine. Maps ScriptPubKey to set of spkms.
Definition: wallet.h:438
std::multimap< int64_t, CWalletTx * > TxItems
Definition: wallet.h:493
std::unordered_map< Txid, CWalletTx, SaltedTxidHasher > mapWallet GUARDED_BY(cs_wallet)
Map from txid to CWalletTx for all transactions this wallet is interested in, including received and ...
void SetupOwnDescriptorScriptPubKeyMans(WalletBatch &batch) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Create new seed and default DescriptorScriptPubKeyMans for this wallet.
Definition: wallet.cpp:3423
void SetupDescriptorScriptPubKeyMans() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:3439
DescriptorScriptPubKeyMan & SetupDescriptorScriptPubKeyMan(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.
Definition: wallet.cpp:3399
std::map< uint256, std::unique_ptr< ScriptPubKeyMan > > m_spk_managers
Definition: wallet.h:425
std::function< TxUpdate(CWalletTx &wtx)> TryUpdatingStateFn
Definition: wallet.h:365
bool UnlockCoin(const COutPoint &output) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:2550
std::atomic< int64_t > m_birth_time
Definition: wallet.h:331
void LoadAddressPreviouslySpent(const CTxDestination &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Marks destination as previously spent.
Definition: wallet.cpp:2679
util::Result< std::reference_wrapper< DescriptorScriptPubKeyMan > > AddWalletDescriptor(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.
Definition: wallet.cpp:3585
static bool LoadWalletArgs(std::shared_ptr< CWallet > wallet, const WalletContext &context, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:2770
HDPubKeyMap GetHDPubKeys(HDKeyFilter filter) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Retrieve descriptor xpubs matching the requested filter.
Definition: wallet.cpp:4407
std::set< ScriptPubKeyMan * > GetScriptPubKeyMans(const CScript &script) const
Get all the ScriptPubKeyMans for a script.
Definition: wallet.cpp:3260
util::Result< void > DisplayAddress(const CTxDestination &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Display address on an external signer.
Definition: wallet.cpp:2518
std::unordered_multimap< COutPoint, Txid, SaltedOutpointHasher > TxSpends
Used to keep track of spent outpoints, and detect and report conflicts (double-spends or mutated tran...
Definition: wallet.h:338
A transaction with a bunch of additional info that only the owner cares about.
Definition: transaction.h:194
A wrapper to reserve an address from a wallet.
Definition: wallet.h:201
const CWallet *const pwallet
The wallet to reserve from.
Definition: wallet.h:204
void KeepDestination()
Keep the address. Do not return its key to the keypool when this object goes out of scope.
Definition: wallet.cpp:2500
CTxDestination address
The destination.
Definition: wallet.h:211
bool fInternal
Whether this is from the internal (change output) keypool.
Definition: wallet.h:213
~ReserveDestination()
Destructor. If a key has been reserved and not KeepKey'ed, it will be returned to the keypool.
Definition: wallet.h:225
ReserveDestination(CWallet *pwallet, OutputType type)
Construct a ReserveDestination object. This does NOT reserve an address yet.
Definition: wallet.h:217
void ReturnDestination()
Return reserved address.
Definition: wallet.cpp:2509
ScriptPubKeyMan * m_spk_man
The ScriptPubKeyMan to reserve from. Based on type when GetReservedDestination is called.
Definition: wallet.h:206
ReserveDestination & operator=(const ReserveDestination &)=delete
int64_t nIndex
The index of the address's key in the keypool.
Definition: wallet.h:209
OutputType const type
Definition: wallet.h:207
util::Result< CTxDestination > GetReservedDestination(bool internal)
Reserve an address.
Definition: wallet.cpp:2483
ReserveDestination(const ReserveDestination &)=delete
Access to the wallet database.
Definition: walletdb.h:197
An instance of this class represents one database.
Definition: db.h:129
Descriptor with some wallet metadata.
Definition: walletutil.h:64
static const PrecomputedData data
Precomputed COutPoint and CCoins values.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition: cs_main.cpp:8
bool IsSpentKey(const CScript &scriptPubKey) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1029
int64_t IncOrderPosNext(WalletBatch *batch=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Increment the next transaction order id.
Definition: wallet.cpp:946
void RecursiveUpdateTxState(const Txid &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.
Definition: wallet.cpp:1366
void MarkInputsDirty(const CTransactionRef &tx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Mark a transaction's inputs dirty, thus forcing the outputs to be recomputed.
Definition: wallet.cpp:1288
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.
Definition: wallet.cpp:682
bool ChangeWalletPassphrase(const SecureString &strOldWalletPassphrase, const SecureString &strNewWalletPassphrase)
Definition: wallet.cpp:611
bool AbandonTransaction(const Txid &hashTx)
Definition: wallet.cpp:1298
void SetWalletFlagWithDB(WalletBatch &batch, uint64_t flags)
Store wallet flags.
Definition: wallet.cpp:1740
uint64_t GetWalletFlags() const
Retrieve all of the wallet's flags.
Definition: wallet.cpp:1800
void updatedBlockTip() override
Definition: wallet.cpp:1610
bool TransactionCanBeAbandoned(const Txid &hashTx) const
Return whether transaction can be abandoned.
Definition: wallet.cpp:1264
void SyncMalleatedTxMetadata(WalletBatch &batch, const CWalletTx &wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:729
void BlockUntilSyncedToCurrentChain() const LOCKS_EXCLUDED(void SetWalletFlag(uint64_t flags)
Blocks until the wallet state is up-to-date to /at least/ the current chain at the time this function...
Definition: wallet.cpp:1734
bool AddToWalletIfInvolvingMe(const CTransactionRef &tx, const SyncTxState &state, bool rescanning_old_block) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Add a transaction to the wallet, or update it.
Definition: wallet.cpp:1199
void MaybeUpdateBirthTime(int64_t time)
Updates wallet birth time if 'time' is below it.
Definition: wallet.cpp:1805
void blockDisconnected(const interfaces::BlockInfo &block) override
Definition: wallet.cpp:1563
std::set< Txid > GetConflicts(const Txid &txid) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Get wallet transactions that conflict with given transaction (spend same outputs)
Definition: wallet.cpp:659
bool IsWalletFlagSet(uint64_t flag) const override
check if a certain wallet flag is set
Definition: wallet.cpp:1767
SpendType HowSpent(const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:774
void AddToSpends(const COutPoint &outpoint, const Txid &txid) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:797
void SetLastBlockProcessedInMem(int block_height, uint256 block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:643
void UnsetWalletFlagWithDB(WalletBatch &batch, uint64_t flag)
Unsets a wallet flag and saves it to disk.
Definition: wallet.cpp:1754
bool IsSpent(const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Outpoint is spent if any non-conflicted transaction spends it:
Definition: wallet.cpp:757
void ResubmitWalletTransactions(node::TxBroadcast broadcast_method, bool force)
Definition: wallet.cpp:1910
std::set< Txid > GetTxConflicts(const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1856
void UnsetBlankWalletFlag(WalletBatch &batch) override
Unset the blank wallet flag and saves it to disk.
Definition: wallet.cpp:1762
CWalletTx * AddToWallet(CTransactionRef tx, const TxState &state, const UpdateWalletTxFn &update_wtx=nullptr, bool rescanning_old_block=false)
Add the transaction to the wallet, wrapping it up inside a CWalletTx.
Definition: wallet.cpp:1042
bool MarkReplaced(const Txid &originalHash, const Txid &newHash)
Mark a transaction as replaced by another transaction.
Definition: wallet.cpp:967
bool CanGetAddresses(bool internal=false) const
Definition: wallet.cpp:1721
void MarkDirty()
Definition: wallet.cpp:958
bool LoadToWallet(CWalletTx &&wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1167
void UpdateTrucSiblingConflicts(const CWalletTx &parent_wtx, const Txid &child_txid, bool add_conflict) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Update mempool conflicts for TRUC sibling transactions.
Definition: wallet.cpp:1271
bool LoadWalletFlags(uint64_t flags)
Loads the flags into the wallet.
Definition: wallet.cpp:1772
bool IsHDEnabled() const
Definition: wallet.cpp:1710
bool SubmitTxMemoryPoolAndRelay(CWalletTx &wtx, std::string &err_string, node::TxBroadcast broadcast_method) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Pass this transaction to node for optional mempool insertion and relay to peers.
Definition: wallet.cpp:1813
void blockConnected(const kernel::ChainstateRole &role, const interfaces::BlockInfo &block) override
Definition: wallet.cpp:1534
void transactionRemovedFromMempool(const CTransactionRef &tx, MemPoolRemovalReason reason) override
Definition: wallet.cpp:1465
static NodeClock::time_point GetDefaultNextResend()
Definition: wallet.cpp:1883
bool ShouldResend() const
Return true if all conditions for periodically resending transactions are met.
Definition: wallet.cpp:1866
bool SyncTransaction(const CTransactionRef &tx, const SyncTxState &state, bool rescanning_old_block=false) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1410
const CWalletTx * GetWalletTx(const Txid &hash) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:507
void InitWalletFlags(uint64_t flags)
overwrite all flags by the given uint64_t flags must be uninitialised (or 0) only known flags may be ...
Definition: wallet.cpp:1784
void UnsetWalletFlag(uint64_t flag)
Unsets a single wallet flag.
Definition: wallet.cpp:1748
std::set< CWalletTx *, WalletTxOrderComparator > GetMalleatedVariants(const CWalletTx &wtx) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Collects all wallet txs that differ from wtx only in their scriptSigs (i.e.
Definition: wallet.cpp:699
bool EncryptWallet(const SecureString &strWalletPassphrase)
Definition: wallet.cpp:814
void SetLastBlockProcessed(int block_height, uint256 block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Set last block processed height, and write to database.
Definition: wallet.cpp:651
bool IsFromMe(const CTransaction &tx) const
should probably be renamed to IsRelevantToMe
Definition: wallet.cpp:1689
DBErrors ReorderTransactions()
Definition: wallet.cpp:889
bool IsMine(const CTxDestination &dest) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1643
void UpgradeDescriptorCache() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Upgrade DescriptorCaches.
Definition: wallet.cpp:516
void SetSpentKeyState(WalletBatch &batch, const Txid &hash, unsigned int n, bool used, std::set< CTxDestination > &tx_destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Definition: wallet.cpp:1010
CAmount GetDebit(const CTxIn &txin) const
Returns amount of debit, i.e.
Definition: wallet.cpp:1627
void MarkConflicted(const uint256 &hashBlock, int conflicting_height, const Txid &hashTx)
Mark a transaction (and its in-wallet descendants) as conflicting with a particular block.
Definition: wallet.cpp:1336
void transactionAddedToMempool(const CTransactionRef &tx) override
Definition: wallet.cpp:1422
void Close()
Close wallet database.
Definition: wallet.cpp:694
#define LogInfo(...)
Definition: log.h:125
MemPoolRemovalReason
Reason why a transaction was removed from the mempool, this is passed to the notification signal.
@ MEMPOOL
Definition: categories.h:18
btcsignals is a simple mechanism for signaling events to multiple subscribers.
Definition: handler.h:11
Definition: init.cpp:17
PSBTError
Definition: types.h:19
TxBroadcast
How to broadcast a local transaction.
Definition: types.h:35
void format(std::ostream &out, FormatStringCheck< sizeof...(Args)> fmt, const Args &... args)
Format list of arguments to the stream according to given format string.
Definition: tinyformat.h:1079
constexpr size_t DUMMY_NESTED_P2WPKH_INPUT_SIZE
Pre-calculated constants for input size estimation in virtual size
Definition: wallet.h:146
constexpr bool DEFAULT_WALLET_RBF
-walletrbf default
Definition: wallet.h:135
constexpr bool DEFAULT_WALLETCROSSCHAIN
Definition: wallet.h:138
constexpr CAmount HIGH_APS_FEE
discourage APS fee higher than this amount
Definition: wallet.h:125
std::shared_ptr< CWallet > LoadWallet(WalletContext &context, const std::string &name, std::optional< bool > load_on_start, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:321
constexpr unsigned int DEFAULT_KEYPOOL_SIZE
Default for -keypool.
constexpr bool DEFAULT_WALLET_REJECT_LONG_CHAINS
Default for -walletrejectlongchains.
Definition: wallet.h:131
void MaybeResendWalletTxs(WalletContext &context)
Called periodically by the schedule thread.
Definition: wallet.cpp:1947
std::variant< TxStateConfirmed, TxStateInMempool, TxStateInactive > SyncTxState
Subset of states transaction sync logic is implemented to handle.
Definition: transaction.h:84
std::vector< std::shared_ptr< CWallet > > GetWallets(WalletContext &context)
Definition: wallet.cpp:206
util::Result< MigrationResult > MigrateLegacyToDescriptor(const std::string &wallet_name, const SecureString &passphrase, WalletContext &context, bool load_wallet)
Do all steps to migrate a legacy wallet to a descriptor wallet.
Definition: wallet.cpp:4145
constexpr CAmount DEFAULT_TRANSACTION_MAXFEE
-maxtxfee default
Definition: wallet.h:140
std::variant< TxStateConfirmed, TxStateInMempool, TxStateBlockConflicted, TxStateInactive, TxStateUnrecognized > TxState
All possible CWalletTx states.
Definition: transaction.h:81
std::vector< unsigned char, secure_allocator< unsigned char > > CKeyingMaterial
Definition: crypter.h:63
std::map< CKeyID, std::pair< CPubKey, std::vector< unsigned char > > > CryptedKeyMap
constexpr CAmount DEFAULT_MAX_AVOIDPARTIALSPEND_FEE
maximum fee increase allowed to do partial spend avoidance, even for nodes with this feature disabled...
Definition: wallet.h:123
DBErrors
Overview of wallet database classes:
Definition: walletdb.h:46
bool AddWalletSetting(interfaces::Chain &chain, const std::string &wallet_name)
Add wallet name to persistent configuration so it will be loaded on startup.
Definition: wallet.cpp:101
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: wallet.cpp:114
std::unique_ptr< interfaces::Handler > HandleLoadWallet(WalletContext &context, LoadWalletFn load_wallet)
Definition: wallet.cpp:228
constexpr bool DEFAULT_DISABLE_WALLET
Definition: wallet.h:137
constexpr CAmount WALLET_INCREMENTAL_RELAY_FEE
minimum recommended increment for replacement txs
Definition: wallet.h:127
constexpr CAmount HIGH_TX_FEE_PER_KB
Discourage users to set fees higher than this amount (in satoshis) per kB.
Definition: wallet.h:142
constexpr OutputType DEFAULT_ADDRESS_TYPE
Default for -addresstype.
Definition: wallet.h:151
std::unique_ptr< WalletDatabase > MakeWalletDatabase(const std::string &name, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error_string)
Definition: wallet.cpp:2759
void NotifyWalletLoaded(WalletContext &context, const std::shared_ptr< CWallet > &wallet)
Definition: wallet.cpp:235
constexpr CAmount HIGH_MAX_TX_FEE
-maxtxfee will warn if called with a higher fee than this amount (in satoshis)
Definition: wallet.h:144
constexpr CAmount DEFAULT_FALLBACK_FEE
-fallbackfee default
Definition: wallet.h:109
std::shared_ptr< CWallet > RestoreWallet(WalletContext &context, const fs::path &backup_file, const std::string &wallet_name, std::optional< bool > load_on_start, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings, bool load_after_restore, bool allow_unnamed)
Definition: wallet.cpp:406
std::string PurposeToString(AddressPurpose p)
Definition: wallet.h:283
AddressPurpose
Address purpose field that has been been stored with wallet sending and receiving addresses since BIP...
Definition: types.h:44
@ REFUND
Never set in current code may be present in older wallet databases.
bool AddWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet)
Definition: wallet.cpp:163
constexpr uint64_t KNOWN_WALLET_FLAGS
Definition: wallet.h:153
constexpr CAmount DEFAULT_CONSOLIDATE_FEERATE
-consolidatefeerate default
Definition: wallet.h:115
constexpr CAmount DEFAULT_TRANSACTION_MINFEE
-mintxfee default
Definition: wallet.h:113
constexpr CAmount DEFAULT_DISCARD_FEE
-discardfee default
Definition: wallet.h:111
std::shared_ptr< CWallet > CreateWallet(WalletContext &context, const std::string &name, std::optional< bool > load_on_start, DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:334
@ WALLET_FLAG_EXTERNAL_SIGNER
Indicates that the wallet needs an external signer.
Definition: walletutil.h:56
@ WALLET_FLAG_LAST_HARDENED_XPUB_CACHED
Definition: walletutil.h:27
@ WALLET_FLAG_KEY_ORIGIN_METADATA
Definition: walletutil.h:24
@ WALLET_FLAG_AVOID_REUSE
Definition: walletutil.h:21
@ WALLET_FLAG_DESCRIPTORS
Indicate that this wallet supports DescriptorScriptPubKeyMan.
Definition: walletutil.h:53
@ WALLET_FLAG_DISABLE_PRIVATE_KEYS
Definition: walletutil.h:30
@ WALLET_FLAG_BLANK_WALLET
Flag set when a wallet contains no HD seed and no private keys, scripts, addresses,...
Definition: walletutil.h:50
std::optional< AddressPurpose > PurposeFromString(std::string_view s)
Definition: wallet.h:293
void WaitForDeleteWallet(std::shared_ptr< CWallet > &&wallet)
Explicitly delete the wallet.
Definition: wallet.cpp:266
static const std::map< std::string, WalletFlags > STRING_TO_WALLET_FLAG
Definition: wallet.h:175
constexpr uint64_t MUTABLE_WALLET_FLAGS
Definition: wallet.h:162
std::map< CKeyID, CKey > KeyMap
std::shared_ptr< CWallet > GetWallet(WalletContext &context, const std::string &name)
Definition: wallet.cpp:219
util::Result< fs::path > GetWalletPath(const std::string &name)
Determine the path that the wallet is stored in.
Definition: wallet.cpp:2720
static const std::map< WalletFlags, std::string > WALLET_FLAG_TO_STRING
Definition: wallet.h:165
constexpr bool DEFAULT_WALLETBROADCAST
Definition: wallet.h:136
DatabaseStatus
Definition: db.h:180
bool RemoveWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
Definition: wallet.cpp:175
std::shared_ptr< CWallet > GetDefaultWallet(WalletContext &context, size_t &count)
Definition: wallet.cpp:212
constexpr bool DEFAULT_SPEND_ZEROCONF_CHANGE
Default for -spendzeroconfchange.
Definition: wallet.h:129
constexpr unsigned int DEFAULT_TX_CONFIRM_TARGET
-txconfirmtarget default
Definition: wallet.h:133
is a home for public enum and struct type definitions that are used internally by node code,...
OutputType
Definition: outputtype.h:18
std::shared_ptr< const CTransaction > CTransactionRef
Definition: transaction.h:417
const char * name
Definition: rest.cpp:71
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
Definition: secure.h:53
SigningResult
Definition: signmessage.h:43
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
Definition: block.h:117
Definition: key.h:232
A mutable version of CTransaction.
Definition: transaction.h:372
std::chrono::time_point< NodeClock > time_point
Definition: time.h:28
Bilingual messages:
Definition: translation.h:24
Instructions for how a PSBT should be signed or filled with information.
Definition: types.h:31
A wrapper for a compile-time partially validated format string.
Definition: string.h:96
Address book data.
Definition: wallet.h:242
std::optional< AddressPurpose > purpose
Address purpose which was originally recorded for payment protocol support but now serves as a cached...
Definition: wallet.h:257
void SetLabel(std::string name)
Definition: wallet.h:280
std::string GetLabel() const
Definition: wallet.h:279
bool previously_spent
Whether coins with this address have previously been spent.
Definition: wallet.h:266
std::map< std::string, std::string > receive_requests
Map containing data about previously generated receive requests requesting funds to be sent to this a...
Definition: wallet.h:275
std::optional< std::string > label
Address label which is always nullopt for change addresses.
Definition: wallet.h:250
bool IsChange() const
Accessor methods.
Definition: wallet.h:278
CAmount nAmount
Definition: wallet.h:304
bool fSubtractFeeFromAmount
Definition: wallet.h:305
CTxDestination dest
Definition: wallet.h:303
struct containing information needed for migrating legacy wallets to descriptor wallets
std::optional< std::string > solvables_wallet_name
Definition: wallet.h:1097
std::optional< std::string > watchonly_wallet_name
Definition: wallet.h:1096
std::shared_ptr< CWallet > watchonly_wallet
Definition: wallet.h:1099
std::string wallet_name
Definition: wallet.h:1095
std::shared_ptr< CWallet > solvables_wallet
Definition: wallet.h:1100
std::shared_ptr< CWallet > wallet
Definition: wallet.h:1098
WalletContext struct containing references to state shared between CWallet instances,...
Definition: context.h:36
Wallet-layer error with both programmatic and user-facing information.
Definition: types.h:87
std::vector< uint16_t > keys
Definition: dbwrapper.cpp:376
static int count
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49
#define LOCKS_EXCLUDED(...)
Definition: threadsafety.h:48
consteval auto _(util::TranslatedLiteral str)
Definition: translation.h:79
ChangeType
General change type (added, updated, removed).
Definition: ui_change_type.h:9
AssertLockHeld(pool.cs)
assert(!tx.IsCoinBase())
is a home for public enum and struct type definitions that are used by internally by wallet code,...
std::function< void(std::unique_ptr< interfaces::Wallet > wallet)> LoadWalletFn
Definition: wallet.h:83