Bitcoin Core  21.99.0
P2P Digital Currency
scriptpubkeyman.h
Go to the documentation of this file.
1 // Copyright (c) 2019-2020 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_WALLET_SCRIPTPUBKEYMAN_H
6 #define BITCOIN_WALLET_SCRIPTPUBKEYMAN_H
7 
8 #include <psbt.h>
9 #include <script/descriptor.h>
10 #include <script/signingprovider.h>
11 #include <script/standard.h>
12 #include <util/error.h>
13 #include <util/message.h>
14 #include <util/time.h>
15 #include <wallet/crypter.h>
16 #include <wallet/ismine.h>
17 #include <wallet/walletdb.h>
18 #include <wallet/walletutil.h>
19 
20 #include <boost/signals2/signal.hpp>
21 
22 #include <unordered_map>
23 
24 enum class OutputType;
25 struct bilingual_str;
26 
27 // Wallet storage things that ScriptPubKeyMans need in order to be able to store things to the wallet database.
28 // It provides access to things that are part of the entire wallet and not specific to a ScriptPubKeyMan such as
29 // wallet flags, wallet version, encryption keys, encryption status, and the database itself. This allows a
30 // ScriptPubKeyMan to have callbacks into CWallet without causing a circular dependency.
31 // WalletStorage should be the same for all ScriptPubKeyMans of a wallet.
33 {
34 public:
35  virtual ~WalletStorage() = default;
36  virtual const std::string GetDisplayName() const = 0;
37  virtual WalletDatabase& GetDatabase() const = 0;
38  virtual bool IsWalletFlagSet(uint64_t) const = 0;
39  virtual void UnsetBlankWalletFlag(WalletBatch&) = 0;
40  virtual bool CanSupportFeature(enum WalletFeature) const = 0;
41  virtual void SetMinVersion(enum WalletFeature, WalletBatch* = nullptr) = 0;
42  virtual const CKeyingMaterial& GetEncryptionKey() const = 0;
43  virtual bool HasEncryptionKeys() const = 0;
44  virtual bool IsLocked() const = 0;
45 };
46 
48 static const unsigned int DEFAULT_KEYPOOL_SIZE = 1000;
49 
50 std::vector<CKeyID> GetAffectedKeys(const CScript& spk, const SigningProvider& provider);
51 
101 class CKeyPool
102 {
103 public:
105  int64_t nTime;
109  bool fInternal;
112 
113  CKeyPool();
114  CKeyPool(const CPubKey& vchPubKeyIn, bool internalIn);
115 
116  template<typename Stream>
117  void Serialize(Stream& s) const
118  {
119  int nVersion = s.GetVersion();
120  if (!(s.GetType() & SER_GETHASH)) {
121  s << nVersion;
122  }
123  s << nTime << vchPubKey << fInternal << m_pre_split;
124  }
125 
126  template<typename Stream>
127  void Unserialize(Stream& s)
128  {
129  int nVersion = s.GetVersion();
130  if (!(s.GetType() & SER_GETHASH)) {
131  s >> nVersion;
132  }
133  s >> nTime >> vchPubKey;
134  try {
135  s >> fInternal;
136  } catch (std::ios_base::failure&) {
137  /* flag as external address if we can't read the internal boolean
138  (this will be the case for any wallet before the HD chain split version) */
139  fInternal = false;
140  }
141  try {
142  s >> m_pre_split;
143  } catch (std::ios_base::failure&) {
144  /* flag as postsplit address if we can't read the m_pre_split boolean
145  (this will be the case for any wallet that upgrades to HD chain split) */
146  m_pre_split = false;
147  }
148  }
149 };
150 
152 {
153 public:
155 
156  size_t operator()(const CKeyID& id) const
157  {
158  return id.GetUint64(0);
159  }
160 };
161 
162 /*
163  * A class implementing ScriptPubKeyMan manages some (or all) scriptPubKeys used in a wallet.
164  * It contains the scripts and keys related to the scriptPubKeys it manages.
165  * A ScriptPubKeyMan will be able to give out scriptPubKeys to be used, as well as marking
166  * when a scriptPubKey has been used. It also handles when and how to store a scriptPubKey
167  * and its related scripts and keys, including encryption.
168  */
170 {
171 protected:
173 
174 public:
175  explicit ScriptPubKeyMan(WalletStorage& storage) : m_storage(storage) {}
176  virtual ~ScriptPubKeyMan() {};
177  virtual bool GetNewDestination(const OutputType type, CTxDestination& dest, std::string& error) { return false; }
178  virtual isminetype IsMine(const CScript& script) const { return ISMINE_NO; }
179 
181  virtual bool CheckDecryptionKey(const CKeyingMaterial& master_key, bool accept_no_keys = false) { return false; }
182  virtual bool Encrypt(const CKeyingMaterial& master_key, WalletBatch* batch) { return false; }
183 
184  virtual bool GetReservedDestination(const OutputType type, bool internal, CTxDestination& address, int64_t& index, CKeyPool& keypool) { return false; }
185  virtual void KeepDestination(int64_t index, const OutputType& type) {}
186  virtual void ReturnDestination(int64_t index, bool internal, const CTxDestination& addr) {}
187 
192  virtual bool TopUp(unsigned int size = 0) { return false; }
193 
195  virtual void MarkUnusedAddresses(const CScript& script) {}
196 
201  virtual bool SetupGeneration(bool force = false) { return false; }
202 
203  /* Returns true if HD is enabled */
204  virtual bool IsHDEnabled() const { return false; }
205 
206  /* Returns true if the wallet can give out new addresses. This means it has keys in the keypool or can generate new keys */
207  virtual bool CanGetAddresses(bool internal = false) const { return false; }
208 
210  virtual bool Upgrade(int prev_version, int new_version, bilingual_str& error) { return false; }
211 
212  virtual bool HavePrivateKeys() const { return false; }
213 
215  virtual void RewriteDB() {}
216 
217  virtual int64_t GetOldestKeyPoolTime() const { return GetTime(); }
218 
219  virtual size_t KeypoolCountExternalKeys() const { return 0; }
220  virtual unsigned int GetKeyPoolSize() const { return 0; }
221 
222  virtual int64_t GetTimeFirstKey() const { return 0; }
223 
224  virtual std::unique_ptr<CKeyMetadata> GetMetadata(const CTxDestination& dest) const { return nullptr; }
225 
226  virtual std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const { return nullptr; }
227 
231  virtual bool CanProvide(const CScript& script, SignatureData& sigdata) { return false; }
232 
234  virtual bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const { return false; }
236  virtual SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const { return SigningResult::SIGNING_FAILED; };
238  virtual TransactionError FillPSBT(PartiallySignedTransaction& psbt, int sighash_type = 1 /* SIGHASH_ALL */, bool sign = true, bool bip32derivs = false, int* n_signed = nullptr) const { return TransactionError::INVALID_PSBT; }
239 
240  virtual uint256 GetID() const { return uint256(); }
241 
242  virtual void SetInternal(bool internal) {}
243 
245  template<typename... Params>
246  void WalletLogPrintf(std::string fmt, Params... parameters) const {
247  LogPrintf(("%s " + fmt).c_str(), m_storage.GetDisplayName(), parameters...);
248  };
249 
251  boost::signals2::signal<void (bool fHaveWatchOnly)> NotifyWatchonlyChanged;
252 
254  boost::signals2::signal<void ()> NotifyCanGetAddressesChanged;
255 };
256 
258 {
259 private:
262 
263  using WatchOnlySet = std::set<CScript>;
264  using WatchKeyMap = std::map<CKeyID, CPubKey>;
265 
266  WalletBatch *encrypted_batch GUARDED_BY(cs_KeyStore) = nullptr;
267 
268  using CryptedKeyMap = std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char>>>;
269 
270  CryptedKeyMap mapCryptedKeys GUARDED_BY(cs_KeyStore);
271  WatchOnlySet setWatchOnly GUARDED_BY(cs_KeyStore);
272  WatchKeyMap mapWatchKeys GUARDED_BY(cs_KeyStore);
273 
274  int64_t nTimeFirstKey GUARDED_BY(cs_KeyStore) = 0;
275 
276  bool AddKeyPubKeyInner(const CKey& key, const CPubKey &pubkey);
277  bool AddCryptedKeyInner(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
278 
290  bool AddWatchOnlyInMem(const CScript &dest);
292  bool AddWatchOnlyWithDB(WalletBatch &batch, const CScript& dest, int64_t create_time) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
293 
295  bool AddKeyPubKeyWithDB(WalletBatch &batch,const CKey& key, const CPubKey &pubkey) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
296 
297  void AddKeypoolPubkeyWithDB(const CPubKey& pubkey, const bool internal, WalletBatch& batch);
298 
300  bool AddCScriptWithDB(WalletBatch& batch, const CScript& script);
301 
303  bool AddKeyOriginWithDB(WalletBatch& batch, const CPubKey& pubkey, const KeyOriginInfo& info);
304 
305  /* the HD chain data model (external chain counters) */
307  std::unordered_map<CKeyID, CHDChain, SaltedSipHasher> m_inactive_hd_chains;
308 
309  /* HD derive new child key (on internal or external chain) */
310  void DeriveNewChildKey(WalletBatch& batch, CKeyMetadata& metadata, CKey& secret, CHDChain& hd_chain, bool internal = false) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
311 
312  std::set<int64_t> setInternalKeyPool GUARDED_BY(cs_KeyStore);
313  std::set<int64_t> setExternalKeyPool GUARDED_BY(cs_KeyStore);
314  std::set<int64_t> set_pre_split_keypool GUARDED_BY(cs_KeyStore);
315  int64_t m_max_keypool_index GUARDED_BY(cs_KeyStore) = 0;
316  std::map<CKeyID, int64_t> m_pool_key_to_index;
317  // Tracks keypool indexes to CKeyIDs of keys that have been taken out of the keypool but may be returned to it
318  std::map<int64_t, CKeyID> m_index_to_reserved_key;
319 
321  bool GetKeyFromPool(CPubKey &key, const OutputType type, bool internal = false);
322 
337  bool ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool fRequestedInternal);
338 
349  bool TopUpInactiveHDChain(const CKeyID seed_id, int64_t index, bool internal);
350 
351 public:
353 
354  bool GetNewDestination(const OutputType type, CTxDestination& dest, std::string& error) override;
355  isminetype IsMine(const CScript& script) const override;
356 
357  bool CheckDecryptionKey(const CKeyingMaterial& master_key, bool accept_no_keys = false) override;
358  bool Encrypt(const CKeyingMaterial& master_key, WalletBatch* batch) override;
359 
360  bool GetReservedDestination(const OutputType type, bool internal, CTxDestination& address, int64_t& index, CKeyPool& keypool) override;
361  void KeepDestination(int64_t index, const OutputType& type) override;
362  void ReturnDestination(int64_t index, bool internal, const CTxDestination&) override;
363 
364  bool TopUp(unsigned int size = 0) override;
365 
366  void MarkUnusedAddresses(const CScript& script) override;
367 
369  void UpgradeKeyMetadata();
370 
371  bool IsHDEnabled() const override;
372 
373  bool SetupGeneration(bool force = false) override;
374 
375  bool Upgrade(int prev_version, int new_version, bilingual_str& error) override;
376 
377  bool HavePrivateKeys() const override;
378 
379  void RewriteDB() override;
380 
381  int64_t GetOldestKeyPoolTime() const override;
382  size_t KeypoolCountExternalKeys() const override;
383  unsigned int GetKeyPoolSize() const override;
384 
385  int64_t GetTimeFirstKey() const override;
386 
387  std::unique_ptr<CKeyMetadata> GetMetadata(const CTxDestination& dest) const override;
388 
389  bool CanGetAddresses(bool internal = false) const override;
390 
391  std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const override;
392 
393  bool CanProvide(const CScript& script, SignatureData& sigdata) override;
394 
395  bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const override;
396  SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const override;
397  TransactionError FillPSBT(PartiallySignedTransaction& psbt, int sighash_type = 1 /* SIGHASH_ALL */, bool sign = true, bool bip32derivs = false, int* n_signed = nullptr) const override;
398 
399  uint256 GetID() const override;
400 
401  void SetInternal(bool internal) override;
402 
403  // Map from Key ID to key metadata.
404  std::map<CKeyID, CKeyMetadata> mapKeyMetadata GUARDED_BY(cs_KeyStore);
405 
406  // Map from Script ID to key metadata (for watch-only keys).
407  std::map<CScriptID, CKeyMetadata> m_script_metadata GUARDED_BY(cs_KeyStore);
408 
410  bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey) override;
412  bool LoadKey(const CKey& key, const CPubKey &pubkey);
414  bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
416  bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret, bool checksum_valid);
417  void UpdateTimeFirstKey(int64_t nCreateTime) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
419  bool LoadCScript(const CScript& redeemScript);
421  void LoadKeyMetadata(const CKeyID& keyID, const CKeyMetadata &metadata);
422  void LoadScriptMetadata(const CScriptID& script_id, const CKeyMetadata &metadata);
424  CPubKey GenerateNewKey(WalletBatch& batch, CHDChain& hd_chain, bool internal = false) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
425 
426  /* Set the HD chain model (chain child index counters) and writes it to the database */
427  void AddHDChain(const CHDChain& chain);
429  void LoadHDChain(const CHDChain& chain);
430  const CHDChain& GetHDChain() const { return m_hd_chain; }
431  void AddInactiveHDChain(const CHDChain& chain);
432 
434  bool LoadWatchOnly(const CScript &dest);
436  bool HaveWatchOnly(const CScript &dest) const;
438  bool HaveWatchOnly() const;
440  bool RemoveWatchOnly(const CScript &dest);
441  bool AddWatchOnly(const CScript& dest, int64_t nCreateTime) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
442 
444  bool GetWatchPubKey(const CKeyID &address, CPubKey &pubkey_out) const;
445 
446  /* SigningProvider overrides */
447  bool HaveKey(const CKeyID &address) const override;
448  bool GetKey(const CKeyID &address, CKey& keyOut) const override;
449  bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const override;
450  bool AddCScript(const CScript& redeemScript) override;
451  bool GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const override;
452 
454  void LoadKeyPool(int64_t nIndex, const CKeyPool &keypool);
455  bool NewKeyPool();
457 
458  bool ImportScripts(const std::set<CScript> scripts, int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
459  bool ImportPrivKeys(const std::map<CKeyID, CKey>& privkey_map, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
460  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_KeyStore);
461  bool ImportScriptPubKeys(const std::set<CScript>& script_pub_keys, const bool have_solving_data, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore);
462 
463  /* Returns true if the wallet can generate new keys */
464  bool CanGenerateKeys() const;
465 
466  /* Generates a new HD seed (will not be activated) */
468 
469  /* Derives a new HD seed (will not be activated) */
470  CPubKey DeriveNewSeed(const CKey& key);
471 
472  /* Set the current HD seed (will reset the chain child index counters)
473  Sets the seed's version based on the current wallet version (so the
474  caller must ensure the current wallet version is correct before calling
475  this function). */
476  void SetHDSeed(const CPubKey& key);
477 
484  void LearnRelatedScripts(const CPubKey& key, OutputType);
485 
490  void LearnAllRelatedScripts(const CPubKey& key);
491 
496  const std::map<CKeyID, int64_t>& GetAllReserveKeys() const { return m_pool_key_to_index; }
497 
498  std::set<CKeyID> GetKeys() const override;
499 };
500 
503 {
504 private:
506 public:
507  explicit LegacySigningProvider(const LegacyScriptPubKeyMan& spk_man) : m_spk_man(spk_man) {}
508 
509  bool GetCScript(const CScriptID &scriptid, CScript& script) const override { return m_spk_man.GetCScript(scriptid, script); }
510  bool HaveCScript(const CScriptID &scriptid) const override { return m_spk_man.HaveCScript(scriptid); }
511  bool GetPubKey(const CKeyID &address, CPubKey& pubkey) const override { return m_spk_man.GetPubKey(address, pubkey); }
512  bool GetKey(const CKeyID &address, CKey& key) const override { return false; }
513  bool HaveKey(const CKeyID &address) const override { return false; }
514  bool GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const override { return m_spk_man.GetKeyOrigin(keyid, info); }
515 };
516 
518 {
519 private:
520  using ScriptPubKeyMap = std::map<CScript, int32_t>; // Map of scripts to descriptor range index
521  using PubKeyMap = std::map<CPubKey, int32_t>; // Map of pubkeys involved in scripts to descriptor range index
522  using CryptedKeyMap = std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char>>>;
523  using KeyMap = std::map<CKeyID, CKey>;
524 
525  ScriptPubKeyMap m_map_script_pub_keys GUARDED_BY(cs_desc_man);
526  PubKeyMap m_map_pubkeys GUARDED_BY(cs_desc_man);
527  int32_t m_max_cached_index = -1;
528 
529  bool m_internal = false;
530 
531  KeyMap m_map_keys GUARDED_BY(cs_desc_man);
532  CryptedKeyMap m_map_crypted_keys GUARDED_BY(cs_desc_man);
533 
536 
537  bool AddDescriptorKeyWithDB(WalletBatch& batch, const CKey& key, const CPubKey &pubkey) EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man);
538 
540 
541  // Fetch the SigningProvider for the given script and optionally include private keys
542  std::unique_ptr<FlatSigningProvider> GetSigningProvider(const CScript& script, bool include_private = false) const;
543  // Fetch the SigningProvider for the given pubkey and always include private keys. This should only be called by signing code.
544  std::unique_ptr<FlatSigningProvider> GetSigningProvider(const CPubKey& pubkey) const;
545  // Fetch the SigningProvider for a given index and optionally include private keys. Called by the above functions.
546  std::unique_ptr<FlatSigningProvider> GetSigningProvider(int32_t index, bool include_private = false) const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man);
547 
548 protected:
549  WalletDescriptor m_wallet_descriptor GUARDED_BY(cs_desc_man);
550 
551 public:
553  : ScriptPubKeyMan(storage),
554  m_wallet_descriptor(descriptor)
555  {}
556  DescriptorScriptPubKeyMan(WalletStorage& storage, bool internal)
557  : ScriptPubKeyMan(storage),
558  m_internal(internal)
559  {}
560 
562 
563  bool GetNewDestination(const OutputType type, CTxDestination& dest, std::string& error) override;
564  isminetype IsMine(const CScript& script) const override;
565 
566  bool CheckDecryptionKey(const CKeyingMaterial& master_key, bool accept_no_keys = false) override;
567  bool Encrypt(const CKeyingMaterial& master_key, WalletBatch* batch) override;
568 
569  bool GetReservedDestination(const OutputType type, bool internal, CTxDestination& address, int64_t& index, CKeyPool& keypool) override;
570  void ReturnDestination(int64_t index, bool internal, const CTxDestination& addr) override;
571 
572  // Tops up the descriptor cache and m_map_script_pub_keys. The cache is stored in the wallet file
573  // and is used to expand the descriptor in GetNewDestination. DescriptorScriptPubKeyMan relies
574  // more on ephemeral data than LegacyScriptPubKeyMan. For wallets using unhardened derivation
575  // (with or without private keys), the "keypool" is a single xpub.
576  bool TopUp(unsigned int size = 0) override;
577 
578  void MarkUnusedAddresses(const CScript& script) override;
579 
580  bool IsHDEnabled() const override;
581 
583  bool SetupDescriptorGeneration(const CExtKey& master_key, OutputType addr_type);
584 
588  bool SetupDescriptor(std::unique_ptr<Descriptor>desc);
589 
590  bool HavePrivateKeys() const override;
591 
592  int64_t GetOldestKeyPoolTime() const override;
593  size_t KeypoolCountExternalKeys() const override;
594  unsigned int GetKeyPoolSize() const override;
595 
596  int64_t GetTimeFirstKey() const override;
597 
598  std::unique_ptr<CKeyMetadata> GetMetadata(const CTxDestination& dest) const override;
599 
600  bool CanGetAddresses(bool internal = false) const override;
601 
602  std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const override;
603 
604  bool CanProvide(const CScript& script, SignatureData& sigdata) override;
605 
606  bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const override;
607  SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const override;
608  TransactionError FillPSBT(PartiallySignedTransaction& psbt, int sighash_type = 1 /* SIGHASH_ALL */, bool sign = true, bool bip32derivs = false, int* n_signed = nullptr) const override;
609 
610  uint256 GetID() const override;
611 
612  void SetInternal(bool internal) override;
613 
614  void SetCache(const DescriptorCache& cache);
615 
616  bool AddKey(const CKeyID& key_id, const CKey& key);
617  bool AddCryptedKey(const CKeyID& key_id, const CPubKey& pubkey, const std::vector<unsigned char>& crypted_key);
618 
619  bool HasWalletDescriptor(const WalletDescriptor& desc) const;
620  void AddDescriptorKey(const CKey& key, const CPubKey &pubkey);
621  void WriteDescriptor();
622 
624  const std::vector<CScript> GetScriptPubKeys() const;
625 
626  bool GetDescriptorString(std::string& out, bool priv) const;
627 };
628 
629 #endif // BITCOIN_WALLET_SCRIPTPUBKEYMAN_H
LegacyScriptPubKeyMan::TopUp
bool TopUp(unsigned int size=0) override
Fills internal address pool.
Definition: scriptpubkeyman.cpp:1234
DescriptorScriptPubKeyMan::CheckDecryptionKey
bool CheckDecryptionKey(const CKeyingMaterial &master_key, bool accept_no_keys=false) override
Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the ke...
Definition: scriptpubkeyman.cpp:1655
LegacyScriptPubKeyMan::SetInternal
void SetInternal(bool internal) override
Definition: scriptpubkeyman.cpp:1600
LegacyScriptPubKeyMan::KeepDestination
void KeepDestination(int64_t index, const OutputType &type) override
Definition: scriptpubkeyman.cpp:1296
DescriptorScriptPubKeyMan::SignMessage
SigningResult SignMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig) const override
Sign a message with the given script.
Definition: scriptpubkeyman.cpp:2068
ScriptPubKeyMan::m_storage
WalletStorage & m_storage
Definition: scriptpubkeyman.h:172
LegacyScriptPubKeyMan::AddKeypoolPubkeyWithDB
void AddKeypoolPubkeyWithDB(const CPubKey &pubkey, const bool internal, WalletBatch &batch)
Definition: scriptpubkeyman.cpp:1280
crypter.h
LegacyScriptPubKeyMan::HavePrivateKeys
bool HavePrivateKeys() const override
Definition: scriptpubkeyman.cpp:487
LegacyScriptPubKeyMan::TopUpInactiveHDChain
bool TopUpInactiveHDChain(const CKeyID seed_id, int64_t index, bool internal)
Like TopUp() but adds keys for inactive HD chains.
Definition: scriptpubkeyman.cpp:307
DescriptorScriptPubKeyMan::GUARDED_BY
ScriptPubKeyMap m_map_script_pub_keys GUARDED_BY(cs_desc_man)
LegacySigningProvider::GetCScript
bool GetCScript(const CScriptID &scriptid, CScript &script) const override
Definition: scriptpubkeyman.h:509
LegacyScriptPubKeyMan::IsHDEnabled
bool IsHDEnabled() const override
Definition: scriptpubkeyman.cpp:424
LegacyScriptPubKeyMan::UpdateTimeFirstKey
void UpdateTimeFirstKey(int64_t nCreateTime) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Update wallet first key creation time.
Definition: scriptpubkeyman.cpp:678
OutputType
OutputType
Definition: outputtype.h:17
LegacySigningProvider::LegacySigningProvider
LegacySigningProvider(const LegacyScriptPubKeyMan &spk_man)
Definition: scriptpubkeyman.h:507
DescriptorScriptPubKeyMan::SetInternal
void SetInternal(bool internal) override
Definition: scriptpubkeyman.cpp:2186
LegacyScriptPubKeyMan::GetWatchPubKey
bool GetWatchPubKey(const CKeyID &address, CPubKey &pubkey_out) const
Fetches a pubkey from mapWatchKeys if it exists there.
Definition: scriptpubkeyman.cpp:994
DEFAULT_KEYPOOL_SIZE
static const unsigned int DEFAULT_KEYPOOL_SIZE
Default for -keypool.
Definition: scriptpubkeyman.h:48
LegacyScriptPubKeyMan::GetReservedDestination
bool GetReservedDestination(const OutputType type, bool internal, CTxDestination &address, int64_t &index, CKeyPool &keypool) override
Definition: scriptpubkeyman.cpp:293
LegacyScriptPubKeyMan::AddKeyPubKey
bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey) override
Adds a key to the store, and saves it to disk.
Definition: scriptpubkeyman.cpp:695
LegacyScriptPubKeyMan::AddWatchOnly
bool AddWatchOnly(const CScript &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Private version of AddWatchOnly method which does not accept a timestamp, and which will reset the wa...
Definition: scriptpubkeyman.cpp:909
CKeyPool::Unserialize
void Unserialize(Stream &s)
Definition: scriptpubkeyman.h:127
ScriptPubKeyMan::RewriteDB
virtual void RewriteDB()
The action to do when the DB needs rewrite.
Definition: scriptpubkeyman.h:215
DescriptorScriptPubKeyMan::MarkUnusedAddresses
void MarkUnusedAddresses(const CScript &script) override
Mark unused addresses as being used.
Definition: scriptpubkeyman.cpp:1834
ScriptPubKeyMan::SignTransaction
virtual bool SignTransaction(CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, std::string > &input_errors) const
Creates new signatures and adds them to the transaction.
Definition: scriptpubkeyman.h:234
LegacyScriptPubKeyMan::MarkUnusedAddresses
void MarkUnusedAddresses(const CScript &script) override
Mark unused addresses as being used.
Definition: scriptpubkeyman.cpp:344
CKeyPool
A key from a CWallet's keypool.
Definition: scriptpubkeyman.h:101
LegacyScriptPubKeyMan::GetHDChain
const CHDChain & GetHDChain() const
Definition: scriptpubkeyman.h:430
LegacyScriptPubKeyMan::GetKeyPoolSize
unsigned int GetKeyPoolSize() const override
Definition: scriptpubkeyman.cpp:542
LegacySigningProvider::GetKeyOrigin
bool GetKeyOrigin(const CKeyID &keyid, KeyOriginInfo &info) const override
Definition: scriptpubkeyman.h:514
DescriptorScriptPubKeyMan::GetSolvingProvider
std::unique_ptr< SigningProvider > GetSolvingProvider(const CScript &script) const override
Definition: scriptpubkeyman.cpp:2044
LegacyScriptPubKeyMan::AddCryptedKeyInner
bool AddCryptedKeyInner(const CPubKey &vchPubKey, const std::vector< unsigned char > &vchCryptedSecret)
Definition: scriptpubkeyman.cpp:804
LegacyScriptPubKeyMan::m_index_to_reserved_key
std::map< int64_t, CKeyID > m_index_to_reserved_key
Definition: scriptpubkeyman.h:318
KeyIDHasher::operator()
size_t operator()(const CKeyID &id) const
Definition: scriptpubkeyman.h:156
LegacyScriptPubKeyMan::CanGetAddresses
bool CanGetAddresses(bool internal=false) const override
Definition: scriptpubkeyman.cpp:429
LegacyScriptPubKeyMan::GUARDED_BY
WalletBatch *encrypted_batch GUARDED_BY(cs_KeyStore)
ScriptPubKeyMan::IsMine
virtual isminetype IsMine(const CScript &script) const
Definition: scriptpubkeyman.h:178
FillableSigningProvider
Fillable signing provider that keeps keys in an address->secret map.
Definition: signingprovider.h:63
LegacyScriptPubKeyMan::LoadKeyPool
void LoadKeyPool(int64_t nIndex, const CKeyPool &keypool)
Load a keypool entry.
Definition: scriptpubkeyman.cpp:1117
DescriptorScriptPubKeyMan::HasWalletDescriptor
bool HasWalletDescriptor(const WalletDescriptor &desc) const
Definition: scriptpubkeyman.cpp:2239
LegacyScriptPubKeyMan::LearnRelatedScripts
void LearnRelatedScripts(const CPubKey &key, OutputType)
Explicitly make the wallet learn the related scripts for outputs to the given key.
Definition: scriptpubkeyman.cpp:1397
DescriptorScriptPubKeyMan::SetupDescriptor
bool SetupDescriptor(std::unique_ptr< Descriptor >desc)
Provide a descriptor at setup time Returns false if already setup or setup fails, true if setup is su...
LegacyScriptPubKeyMan::WatchOnlySet
std::set< CScript > WatchOnlySet
Definition: scriptpubkeyman.h:263
bilingual_str
Bilingual messages:
Definition: translation.h:16
DescriptorScriptPubKeyMan::IsMine
isminetype IsMine(const CScript &script) const override
Definition: scriptpubkeyman.cpp:1646
CKeyingMaterial
std::vector< unsigned char, secure_allocator< unsigned char > > CKeyingMaterial
Definition: crypter.h:61
WalletStorage::GetDisplayName
virtual const std::string GetDisplayName() const =0
LegacyScriptPubKeyMan::KeypoolCountExternalKeys
size_t KeypoolCountExternalKeys() const override
Definition: scriptpubkeyman.cpp:536
LegacyScriptPubKeyMan::UpgradeKeyMetadata
void UpgradeKeyMetadata()
Upgrade stored CKeyMetadata objects to store key origin info as KeyOriginInfo.
Definition: scriptpubkeyman.cpp:376
LegacyScriptPubKeyMan::NewKeyPool
bool NewKeyPool()
Mark old keypool keys as used, and generate all new keys.
Definition: scriptpubkeyman.cpp:1200
LegacyScriptPubKeyMan::LoadKeyMetadata
void LoadKeyMetadata(const CKeyID &keyID, const CKeyMetadata &metadata)
Load metadata (used by LoadWallet)
Definition: scriptpubkeyman.cpp:757
DescriptorScriptPubKeyMan::IsHDEnabled
bool IsHDEnabled() const override
Definition: scriptpubkeyman.cpp:1949
SigningProvider
An interface to be implemented by keystores that support signing.
Definition: signingprovider.h:18
LegacyScriptPubKeyMan::GetTimeFirstKey
int64_t GetTimeFirstKey() const override
Definition: scriptpubkeyman.cpp:548
GetTime
int64_t GetTime()
DEPRECATED Use either GetSystemTimeInSeconds (not mockable) or GetTime<T> (mockable)
Definition: time.cpp:26
LegacyScriptPubKeyMan::Encrypt
bool Encrypt(const CKeyingMaterial &master_key, WalletBatch *batch) override
Definition: scriptpubkeyman.cpp:263
LegacyScriptPubKeyMan::GetKeyFromPool
bool GetKeyFromPool(CPubKey &key, const OutputType type, bool internal=false)
Fetches a key from the keypool.
Definition: scriptpubkeyman.cpp:1329
LegacyScriptPubKeyMan::SetHDSeed
void SetHDSeed(const CPubKey &key)
Definition: scriptpubkeyman.cpp:1181
AnnotatedMixin< std::recursive_mutex >
KeyIDHasher::KeyIDHasher
KeyIDHasher()
Definition: scriptpubkeyman.h:154
LegacySigningProvider::GetKey
bool GetKey(const CKeyID &address, CKey &key) const override
Definition: scriptpubkeyman.h:512
ScriptPubKeyMan::KeepDestination
virtual void KeepDestination(int64_t index, const OutputType &type)
Definition: scriptpubkeyman.h:185
ScriptPubKeyMan::WalletLogPrintf
void WalletLogPrintf(std::string fmt, Params... parameters) const
Prepends the wallet name in logging output to ease debugging in multi-wallet use cases.
Definition: scriptpubkeyman.h:246
DescriptorScriptPubKeyMan::CanProvide
bool CanProvide(const CScript &script, SignatureData &sigdata) override
Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that,...
Definition: scriptpubkeyman.cpp:2049
WalletDatabase
An instance of this class represents one database.
Definition: db.h:103
LegacyScriptPubKeyMan::GetKeys
std::set< CKeyID > GetKeys() const override
Definition: scriptpubkeyman.cpp:1587
LegacyScriptPubKeyMan::m_pool_key_to_index
std::map< CKeyID, int64_t > m_pool_key_to_index
Definition: scriptpubkeyman.h:316
CKeyID
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:21
ScriptPubKeyMan::~ScriptPubKeyMan
virtual ~ScriptPubKeyMan()
Definition: scriptpubkeyman.h:176
DescriptorScriptPubKeyMan::PubKeyMap
std::map< CPubKey, int32_t > PubKeyMap
Definition: scriptpubkeyman.h:521
ScriptPubKeyMan::HavePrivateKeys
virtual bool HavePrivateKeys() const
Definition: scriptpubkeyman.h:212
LegacyScriptPubKeyMan
Definition: scriptpubkeyman.h:257
DescriptorScriptPubKeyMan::GetSigningProvider
std::unique_ptr< FlatSigningProvider > GetSigningProvider(const CScript &script, bool include_private=false) const
Definition: scriptpubkeyman.cpp:1998
CKeyPool::nTime
int64_t nTime
The time at which the key was generated. Set in AddKeypoolPubKeyWithDB.
Definition: scriptpubkeyman.h:105
ScriptPubKeyMan::CanProvide
virtual bool CanProvide(const CScript &script, SignatureData &sigdata)
Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that,...
Definition: scriptpubkeyman.h:231
DescriptorScriptPubKeyMan::KeyMap
std::map< CKeyID, CKey > KeyMap
Definition: scriptpubkeyman.h:523
LegacyScriptPubKeyMan::m_inactive_hd_chains
std::unordered_map< CKeyID, CHDChain, SaltedSipHasher > m_inactive_hd_chains
Definition: scriptpubkeyman.h:307
LegacyScriptPubKeyMan::LoadKey
bool LoadKey(const CKey &key, const CPubKey &pubkey)
Adds a key to the store, without saving it to disk (used by LoadWallet)
Definition: scriptpubkeyman.cpp:690
LegacyScriptPubKeyMan::GetKey
bool GetKey(const CKeyID &address, CKey &keyOut) const override
Definition: scriptpubkeyman.cpp:958
SigningResult
SigningResult
Definition: message.h:42
LegacyScriptPubKeyMan::ReturnDestination
void ReturnDestination(int64_t index, bool internal, const CTxDestination &) override
Definition: scriptpubkeyman.cpp:1309
LegacyScriptPubKeyMan::MarkPreSplitKeys
void MarkPreSplitKeys() EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:1450
DescriptorScriptPubKeyMan::m_decryption_thoroughly_checked
bool m_decryption_thoroughly_checked
keeps track of whether Unlock has run a thorough check before
Definition: scriptpubkeyman.h:535
DescriptorScriptPubKeyMan::HavePrivateKeys
bool HavePrivateKeys() const override
Definition: scriptpubkeyman.cpp:1965
LegacyScriptPubKeyMan::Upgrade
bool Upgrade(int prev_version, int new_version, bilingual_str &error) override
Upgrades the wallet to the specified version.
Definition: scriptpubkeyman.cpp:446
KeyIDHasher
Definition: scriptpubkeyman.h:151
DescriptorScriptPubKeyMan
Definition: scriptpubkeyman.h:517
DescriptorScriptPubKeyMan::CanGetAddresses
bool CanGetAddresses(bool internal=false) const override
Definition: scriptpubkeyman.cpp:1955
signingprovider.h
ismine.h
TransactionError
TransactionError
Definition: error.h:22
DescriptorScriptPubKeyMan::m_internal
bool m_internal
Definition: scriptpubkeyman.h:529
WalletStorage::GetDatabase
virtual WalletDatabase & GetDatabase() const =0
DescriptorScriptPubKeyMan::ReturnDestination
void ReturnDestination(int64_t index, bool internal, const CTxDestination &addr) override
Definition: scriptpubkeyman.cpp:1719
DescriptorScriptPubKeyMan::AddDescriptorKey
void AddDescriptorKey(const CKey &key, const CPubKey &pubkey)
Definition: scriptpubkeyman.cpp:1849
LegacyScriptPubKeyMan::LoadCScript
bool LoadCScript(const CScript &redeemScript)
Adds a CScript to the store.
Definition: scriptpubkeyman.cpp:742
walletutil.h
WalletStorage
Definition: scriptpubkeyman.h:32
isminetype
isminetype
IsMine() return codes, which depend on ScriptPubKeyMan implementation.
Definition: ismine.h:38
CKeyPool::m_pre_split
bool m_pre_split
Whether this key was generated for a keypool before the wallet was upgraded to HD-split.
Definition: scriptpubkeyman.h:111
LegacyScriptPubKeyMan::LoadHDChain
void LoadHDChain(const CHDChain &chain)
Load a HD chain model (used by LoadWallet)
Definition: scriptpubkeyman.cpp:921
ScriptPubKeyMan::GetKeyPoolSize
virtual unsigned int GetKeyPoolSize() const
Definition: scriptpubkeyman.h:220
SignatureData
Definition: sign.h:60
LegacyScriptPubKeyMan::AddKeyPubKeyInner
bool AddKeyPubKeyInner(const CKey &key, const CPubKey &pubkey)
Definition: scriptpubkeyman.cpp:771
LegacyScriptPubKeyMan::DeriveNewSeed
CPubKey DeriveNewSeed(const CKey &key)
Definition: scriptpubkeyman.cpp:1153
CExtKey
Definition: key.h:144
Coin
A UTXO entry.
Definition: coins.h:32
LegacyScriptPubKeyMan::GenerateNewSeed
CPubKey GenerateNewSeed()
Definition: scriptpubkeyman.cpp:1145
ScriptPubKeyMan::NotifyWatchonlyChanged
boost::signals2::signal< void(bool fHaveWatchOnly)> NotifyWatchonlyChanged
Watch-only address added.
Definition: scriptpubkeyman.h:248
LegacySigningProvider::GetPubKey
bool GetPubKey(const CKeyID &address, CPubKey &pubkey) const override
Definition: scriptpubkeyman.h:511
LegacyScriptPubKeyMan::HaveKey
bool HaveKey(const CKeyID &address) const override
Definition: scriptpubkeyman.cpp:949
LegacyScriptPubKeyMan::DeriveNewChildKey
void DeriveNewChildKey(WalletBatch &batch, CKeyMetadata &metadata, CKey &secret, CHDChain &hd_chain, bool internal=false) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:1062
LegacyScriptPubKeyMan::GenerateNewKey
CPubKey GenerateNewKey(WalletBatch &batch, CHDChain &hd_chain, bool internal=false) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Generate a new key.
Definition: scriptpubkeyman.cpp:1025
ScriptPubKeyMan::IsHDEnabled
virtual bool IsHDEnabled() const
Definition: scriptpubkeyman.h:204
message.h
LegacyScriptPubKeyMan::SetupGeneration
bool SetupGeneration(bool force=false) override
Sets up the key generation stuff, i.e.
Definition: scriptpubkeyman.cpp:411
ScriptPubKeyMan::MarkUnusedAddresses
virtual void MarkUnusedAddresses(const CScript &script)
Mark unused addresses as being used.
Definition: scriptpubkeyman.h:195
LegacyScriptPubKeyMan::GetNewDestination
bool GetNewDestination(const OutputType type, CTxDestination &dest, std::string &error) override
Definition: scriptpubkeyman.cpp:24
LegacySigningProvider::HaveKey
bool HaveKey(const CKeyID &address) const override
Definition: scriptpubkeyman.h:513
LegacyScriptPubKeyMan::RewriteDB
void RewriteDB() override
The action to do when the DB needs rewrite.
Definition: scriptpubkeyman.cpp:493
DescriptorScriptPubKeyMan::AddCryptedKey
bool AddCryptedKey(const CKeyID &key_id, const CPubKey &pubkey, const std::vector< unsigned char > &crypted_key)
Definition: scriptpubkeyman.cpp:2228
LegacyScriptPubKeyMan::m_hd_chain
CHDChain m_hd_chain
Definition: scriptpubkeyman.h:306
TransactionError::INVALID_PSBT
@ INVALID_PSBT
time.h
DescriptorScriptPubKeyMan::CryptedKeyMap
std::map< CKeyID, std::pair< CPubKey, std::vector< unsigned char > >> CryptedKeyMap
Definition: scriptpubkeyman.h:522
LegacyScriptPubKeyMan::CheckDecryptionKey
bool CheckDecryptionKey(const CKeyingMaterial &master_key, bool accept_no_keys=false) override
Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the ke...
Definition: scriptpubkeyman.cpp:223
LogPrintf
#define LogPrintf(...)
Definition: logging.h:183
standard.h
LegacyScriptPubKeyMan::SignMessage
SigningResult SignMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig) const override
Sign a message with the given script.
Definition: scriptpubkeyman.cpp:587
ScriptPubKeyMan::KeypoolCountExternalKeys
virtual size_t KeypoolCountExternalKeys() const
Definition: scriptpubkeyman.h:219
FillableSigningProvider::HaveCScript
virtual bool HaveCScript(const CScriptID &hash) const override
Definition: signingprovider.cpp:150
WalletStorage::HasEncryptionKeys
virtual bool HasEncryptionKeys() const =0
CKeyPool::vchPubKey
CPubKey vchPubKey
The public key.
Definition: scriptpubkeyman.h:107
LegacySigningProvider::HaveCScript
bool HaveCScript(const CScriptID &scriptid) const override
Definition: scriptpubkeyman.h:510
error.h
LegacyScriptPubKeyMan::ImportPubKeys
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_KeyStore)
Definition: scriptpubkeyman.cpp:1542
LegacyScriptPubKeyMan::GetOldestKeyPoolTime
int64_t GetOldestKeyPoolTime() const override
Definition: scriptpubkeyman.cpp:518
ScriptPubKeyMan::GetReservedDestination
virtual bool GetReservedDestination(const OutputType type, bool internal, CTxDestination &address, int64_t &index, CKeyPool &keypool)
Definition: scriptpubkeyman.h:184
LegacyScriptPubKeyMan::FillPSBT
TransactionError FillPSBT(PartiallySignedTransaction &psbt, int sighash_type=1, bool sign=true, bool bip32derivs=false, int *n_signed=nullptr) const override
Adds script and derivation path information to a PSBT, and optionally signs it.
Definition: scriptpubkeyman.cpp:600
LegacyScriptPubKeyMan::AddCScript
bool AddCScript(const CScript &redeemScript) override
Definition: scriptpubkeyman.cpp:1468
uint256
256-bit opaque blob.
Definition: uint256.h:124
ISMINE_NO
@ ISMINE_NO
Definition: ismine.h:40
LegacyScriptPubKeyMan::AddCScriptWithDB
bool AddCScriptWithDB(WalletBatch &batch, const CScript &script)
Adds a script to the store and saves it to disk.
Definition: scriptpubkeyman.cpp:1474
LegacyScriptPubKeyMan::WatchKeyMap
std::map< CKeyID, CPubKey > WatchKeyMap
Definition: scriptpubkeyman.h:264
LegacyScriptPubKeyMan::LearnAllRelatedScripts
void LearnAllRelatedScripts(const CPubKey &key)
Same as LearnRelatedScripts, but when the OutputType is not known (and could be anything).
Definition: scriptpubkeyman.cpp:1408
WalletStorage::UnsetBlankWalletFlag
virtual void UnsetBlankWalletFlag(WalletBatch &)=0
LegacyScriptPubKeyMan::CryptedKeyMap
std::map< CKeyID, std::pair< CPubKey, std::vector< unsigned char > >> CryptedKeyMap
Definition: scriptpubkeyman.h:268
ScriptPubKeyMan::GetID
virtual uint256 GetID() const
Definition: scriptpubkeyman.h:240
CScript
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:404
LegacyScriptPubKeyMan::IsMine
isminetype IsMine(const CScript &script) const override
Definition: scriptpubkeyman.cpp:209
DescriptorScriptPubKeyMan::GetOldestKeyPoolTime
int64_t GetOldestKeyPoolTime() const override
Definition: scriptpubkeyman.cpp:1971
LegacyScriptPubKeyMan::ImportPrivKeys
bool ImportPrivKeys(const std::map< CKeyID, CKey > &privkey_map, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:1519
WalletStorage::IsWalletFlagSet
virtual bool IsWalletFlagSet(uint64_t) const =0
ScriptPubKeyMan::ScriptPubKeyMan
ScriptPubKeyMan(WalletStorage &storage)
Definition: scriptpubkeyman.h:175
ScriptPubKeyMan::Upgrade
virtual bool Upgrade(int prev_version, int new_version, bilingual_str &error)
Upgrades the wallet to the specified version.
Definition: scriptpubkeyman.h:210
LegacyScriptPubKeyMan::GetAllReserveKeys
const std::map< CKeyID, int64_t > & GetAllReserveKeys() const
Definition: scriptpubkeyman.h:496
LegacyScriptPubKeyMan::GetID
uint256 GetID() const override
Definition: scriptpubkeyman.cpp:669
DescriptorCache
Cache for single descriptor's derived extended pubkeys.
Definition: descriptor.h:19
DescriptorScriptPubKeyMan::KeypoolCountExternalKeys
size_t KeypoolCountExternalKeys() const override
Definition: scriptpubkeyman.cpp:1978
CKeyPool::CKeyPool
CKeyPool()
Definition: wallet.cpp:4201
LegacyScriptPubKeyMan::LoadCryptedKey
bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector< unsigned char > &vchCryptedSecret, bool checksum_valid)
Adds an encrypted key to the store, without saving it to disk (used by LoadWallet)
Definition: scriptpubkeyman.cpp:794
LegacyScriptPubKeyMan::AddCryptedKey
bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector< unsigned char > &vchCryptedSecret)
Adds an encrypted key to the store, and saves it to disk.
Definition: scriptpubkeyman.cpp:814
DescriptorScriptPubKeyMan::SetupDescriptorGeneration
bool SetupDescriptorGeneration(const CExtKey &master_key, OutputType addr_type)
Setup descriptors based on the given CExtkey.
Definition: scriptpubkeyman.cpp:1882
DescriptorScriptPubKeyMan::GetID
uint256 GetID() const override
Definition: scriptpubkeyman.cpp:2177
PKHash
Definition: standard.h:140
DescriptorScriptPubKeyMan::AddDescriptorKeyWithDB
bool AddDescriptorKeyWithDB(WalletBatch &batch, const CKey &key, const CPubKey &pubkey) EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man)
Definition: scriptpubkeyman.cpp:1858
LegacyScriptPubKeyMan::LoadScriptMetadata
void LoadScriptMetadata(const CScriptID &script_id, const CKeyMetadata &metadata)
Definition: scriptpubkeyman.cpp:764
DescriptorScriptPubKeyMan::cs_desc_man
RecursiveMutex cs_desc_man
Definition: scriptpubkeyman.h:561
CPubKey
An encapsulated public key.
Definition: pubkey.h:31
LegacyScriptPubKeyMan::CanProvide
bool CanProvide(const CScript &script, SignatureData &sigdata) override
Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that,...
Definition: scriptpubkeyman.cpp:559
DescriptorScriptPubKeyMan::ScriptPubKeyMap
std::map< CScript, int32_t > ScriptPubKeyMap
Definition: scriptpubkeyman.h:520
LegacyScriptPubKeyMan::ImportScriptPubKeys
bool ImportScriptPubKeys(const std::set< CScript > &script_pub_keys, const bool have_solving_data, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:1574
ScriptPubKeyMan
Definition: scriptpubkeyman.h:169
LegacyScriptPubKeyMan::AddKeyOriginWithDB
bool AddKeyOriginWithDB(WalletBatch &batch, const CPubKey &pubkey, const KeyOriginInfo &info)
Add a KeyOriginInfo to the wallet.
Definition: scriptpubkeyman.cpp:1485
DescriptorScriptPubKeyMan::DescriptorScriptPubKeyMan
DescriptorScriptPubKeyMan(WalletStorage &storage, bool internal)
Definition: scriptpubkeyman.h:556
CKey
An encapsulated private key.
Definition: key.h:27
DescriptorScriptPubKeyMan::GetKeyPoolSize
unsigned int GetKeyPoolSize() const override
Definition: scriptpubkeyman.cpp:1986
DescriptorScriptPubKeyMan::GetMetadata
std::unique_ptr< CKeyMetadata > GetMetadata(const CTxDestination &dest) const override
Definition: scriptpubkeyman.cpp:2159
CHDChain
Definition: walletdb.h:85
ScriptPubKeyMan::Encrypt
virtual bool Encrypt(const CKeyingMaterial &master_key, WalletBatch *batch)
Definition: scriptpubkeyman.h:182
EXCLUSIVE_LOCKS_REQUIRED
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49
DescriptorScriptPubKeyMan::GetWalletDescriptor
const WalletDescriptor GetWalletDescriptor() const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man)
Definition: scriptpubkeyman.cpp:2254
ScriptPubKeyMan::SetInternal
virtual void SetInternal(bool internal)
Definition: scriptpubkeyman.h:242
DescriptorScriptPubKeyMan::TopUp
bool TopUp(unsigned int size=0) override
Fills internal address pool.
Definition: scriptpubkeyman.cpp:1747
LegacyScriptPubKeyMan::GetSolvingProvider
std::unique_ptr< SigningProvider > GetSolvingProvider(const CScript &script) const override
Definition: scriptpubkeyman.cpp:554
PartiallySignedTransaction
A version of CTransaction with the PSBT format.
Definition: psbt.h:391
WalletStorage::~WalletStorage
virtual ~WalletStorage()=default
LegacyScriptPubKeyMan::LoadWatchOnly
bool LoadWatchOnly(const CScript &dest)
Adds a watch-only address to the store, without saving it to disk (used by LoadWallet)
Definition: scriptpubkeyman.cpp:872
WalletStorage::GetEncryptionKey
virtual const CKeyingMaterial & GetEncryptionKey() const =0
GetAffectedKeys
std::vector< CKeyID > GetAffectedKeys(const CScript &spk, const SigningProvider &provider)
Definition: scriptpubkeyman.cpp:1438
SigningResult::SIGNING_FAILED
@ SIGNING_FAILED
DescriptorScriptPubKeyMan::m_max_cached_index
int32_t m_max_cached_index
Definition: scriptpubkeyman.h:527
LegacyScriptPubKeyMan::GetPubKey
bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const override
Definition: scriptpubkeyman.cpp:1005
LegacyScriptPubKeyMan::RemoveWatchOnly
bool RemoveWatchOnly(const CScript &dest)
Remove a watch only script from the keystore.
Definition: scriptpubkeyman.cpp:851
ScriptPubKeyMan::TopUp
virtual bool TopUp(unsigned int size=0)
Fills internal address pool.
Definition: scriptpubkeyman.h:192
ScriptPubKeyMan::SetupGeneration
virtual bool SetupGeneration(bool force=false)
Sets up the key generation stuff, i.e.
Definition: scriptpubkeyman.h:201
Params
const CChainParams & Params()
Return the currently selected parameters.
Definition: chainparams.cpp:538
LegacySigningProvider::m_spk_man
const LegacyScriptPubKeyMan & m_spk_man
Definition: scriptpubkeyman.h:505
LegacyScriptPubKeyMan::HaveWatchOnly
bool HaveWatchOnly() const
Returns whether there are any watch-only things in the wallet.
Definition: scriptpubkeyman.cpp:838
ScriptPubKeyMan::GetOldestKeyPoolTime
virtual int64_t GetOldestKeyPoolTime() const
Definition: scriptpubkeyman.h:217
LegacyScriptPubKeyMan::ImportScripts
bool ImportScripts(const std::set< CScript > scripts, int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:1495
DescriptorScriptPubKeyMan::AddKey
bool AddKey(const CKeyID &key_id, const CKey &key)
Definition: scriptpubkeyman.cpp:2221
DescriptorScriptPubKeyMan::GetKeys
KeyMap GetKeys() const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man)
Definition: scriptpubkeyman.cpp:1730
CKeyPool::fInternal
bool fInternal
Whether this keypool entry is in the internal keypool (for change outputs)
Definition: scriptpubkeyman.h:109
ScriptPubKeyMan::GetSolvingProvider
virtual std::unique_ptr< SigningProvider > GetSolvingProvider(const CScript &script) const
Definition: scriptpubkeyman.h:226
CTxDestination
std::variant< CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown > CTxDestination
A txout script template with a specific destination.
Definition: standard.h:212
LegacyScriptPubKeyMan::MarkReserveKeysAsUsed
void MarkReserveKeysAsUsed(int64_t keypool_id) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Marks all keys in the keypool up to and including reserve_key as used.
Definition: scriptpubkeyman.cpp:1414
LegacyScriptPubKeyMan::AddHDChain
void AddHDChain(const CHDChain &chain)
Definition: scriptpubkeyman.cpp:927
ScriptPubKeyMan::FillPSBT
virtual TransactionError FillPSBT(PartiallySignedTransaction &psbt, int sighash_type=1, bool sign=true, bool bip32derivs=false, int *n_signed=nullptr) const
Adds script and derivation path information to a PSBT, and optionally signs it.
Definition: scriptpubkeyman.h:238
FillableSigningProvider::GetCScript
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const override
Definition: signingprovider.cpp:166
ScriptPubKeyMan::ReturnDestination
virtual void ReturnDestination(int64_t index, bool internal, const CTxDestination &addr)
Definition: scriptpubkeyman.h:186
WalletDescriptor
Descriptor with some wallet metadata.
Definition: walletutil.h:72
ScriptPubKeyMan::GetNewDestination
virtual bool GetNewDestination(const OutputType type, CTxDestination &dest, std::string &error)
Definition: scriptpubkeyman.h:177
walletdb.h
WalletFeature
WalletFeature
(client) version numbers for particular wallet features
Definition: walletutil.h:14
DescriptorScriptPubKeyMan::WriteDescriptor
void WriteDescriptor()
Definition: scriptpubkeyman.cpp:2245
LegacyScriptPubKeyMan::GetKeyOrigin
bool GetKeyOrigin(const CKeyID &keyid, KeyOriginInfo &info) const override
Definition: scriptpubkeyman.cpp:975
COutPoint
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:26
LegacyScriptPubKeyMan::fDecryptionThoroughlyChecked
bool fDecryptionThoroughlyChecked
keeps track of whether Unlock has run a thorough check before
Definition: scriptpubkeyman.h:261
DescriptorScriptPubKeyMan::FillPSBT
TransactionError FillPSBT(PartiallySignedTransaction &psbt, int sighash_type=1, bool sign=true, bool bip32derivs=false, int *n_signed=nullptr) const override
Adds script and derivation path information to a PSBT, and optionally signs it.
Definition: scriptpubkeyman.cpp:2086
ScriptPubKeyMan::GetMetadata
virtual std::unique_ptr< CKeyMetadata > GetMetadata(const CTxDestination &dest) const
Definition: scriptpubkeyman.h:224
DescriptorScriptPubKeyMan::GetTimeFirstKey
int64_t GetTimeFirstKey() const override
Definition: scriptpubkeyman.cpp:1992
DescriptorScriptPubKeyMan::GetReservedDestination
bool GetReservedDestination(const OutputType type, bool internal, CTxDestination &address, int64_t &index, CKeyPool &keypool) override
Definition: scriptpubkeyman.cpp:1710
DescriptorScriptPubKeyMan::GetScriptPubKeys
const std::vector< CScript > GetScriptPubKeys() const
Definition: scriptpubkeyman.cpp:2259
FillableSigningProvider::cs_KeyStore
RecursiveMutex cs_KeyStore
Definition: signingprovider.h:121
error
bool error(const char *fmt, const Args &... args)
Definition: system.h:50
LegacyScriptPubKeyMan::AddWatchOnlyInMem
bool AddWatchOnlyInMem(const CScript &dest)
Definition: scriptpubkeyman.cpp:877
ScriptPubKeyMan::CheckDecryptionKey
virtual bool CheckDecryptionKey(const CKeyingMaterial &master_key, bool accept_no_keys=false)
Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the ke...
Definition: scriptpubkeyman.h:181
WalletStorage::IsLocked
virtual bool IsLocked() const =0
CMutableTransaction
A mutable version of CTransaction.
Definition: transaction.h:344
LegacyScriptPubKeyMan::AddInactiveHDChain
void AddInactiveHDChain(const CHDChain &chain)
Definition: scriptpubkeyman.cpp:942
LegacyScriptPubKeyMan::CanGenerateKeys
bool CanGenerateKeys() const
Definition: scriptpubkeyman.cpp:1138
DescriptorScriptPubKeyMan::SignTransaction
bool SignTransaction(CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, std::string > &input_errors) const override
Creates new signatures and adds them to the transaction.
Definition: scriptpubkeyman.cpp:2054
DescriptorScriptPubKeyMan::GetNewDestination
bool GetNewDestination(const OutputType type, CTxDestination &dest, std::string &error) override
Definition: scriptpubkeyman.cpp:1602
ScriptPubKeyMan::SignMessage
virtual SigningResult SignMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig) const
Sign a message with the given script.
Definition: scriptpubkeyman.h:236
DescriptorScriptPubKeyMan::SetCache
void SetCache(const DescriptorCache &cache)
Definition: scriptpubkeyman.cpp:2191
CScriptID
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:86
DescriptorScriptPubKeyMan::Encrypt
bool Encrypt(const CKeyingMaterial &master_key, WalletBatch *batch) override
Definition: scriptpubkeyman.cpp:1687
ScriptPubKeyMan::NotifyCanGetAddressesChanged
boost::signals2::signal< void()> NotifyCanGetAddressesChanged
Keypool has new keys.
Definition: scriptpubkeyman.h:254
CKeyPool::Serialize
void Serialize(Stream &s) const
Definition: scriptpubkeyman.h:117
WalletBatch
Access to the wallet database.
Definition: walletdb.h:176
LegacyScriptPubKeyMan::GetMetadata
std::unique_ptr< CKeyMetadata > GetMetadata(const CTxDestination &dest) const override
Definition: scriptpubkeyman.cpp:648
LegacyScriptPubKeyMan::ReserveKeyFromKeyPool
bool ReserveKeyFromKeyPool(int64_t &nIndex, CKeyPool &keypool, bool fRequestedInternal)
Reserves a key from the keypool and sets nIndex to its index.
Definition: scriptpubkeyman.cpp:1351
ScriptPubKeyMan::CanGetAddresses
virtual bool CanGetAddresses(bool internal=false) const
Definition: scriptpubkeyman.h:207
WalletStorage::SetMinVersion
virtual void SetMinVersion(enum WalletFeature, WalletBatch *=nullptr)=0
LegacySigningProvider
Wraps a LegacyScriptPubKeyMan so that it can be returned in a new unique_ptr.
Definition: scriptpubkeyman.h:502
SER_GETHASH
@ SER_GETHASH
Definition: serialize.h:168
CKeyMetadata
Definition: walletdb.h:121
LegacyScriptPubKeyMan::AddKeyPubKeyWithDB
bool AddKeyPubKeyWithDB(WalletBatch &batch, const CKey &key, const CPubKey &pubkey) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Adds a key to the store, and saves it to disk.
Definition: scriptpubkeyman.cpp:702
WalletStorage::CanSupportFeature
virtual bool CanSupportFeature(enum WalletFeature) const =0
KeyOriginInfo
Definition: keyorigin.h:11
FlatSigningProvider
Definition: signingprovider.h:47
descriptor.h
DescriptorScriptPubKeyMan::GetDescriptorString
bool GetDescriptorString(std::string &out, bool priv) const
Definition: scriptpubkeyman.cpp:2271
ScriptPubKeyMan::GetTimeFirstKey
virtual int64_t GetTimeFirstKey() const
Definition: scriptpubkeyman.h:222
LegacyScriptPubKeyMan::AddWatchOnlyWithDB
bool AddWatchOnlyWithDB(WalletBatch &batch, const CScript &dest) EXCLUSIVE_LOCKS_REQUIRED(cs_KeyStore)
Definition: scriptpubkeyman.cpp:889
LegacyScriptPubKeyMan::SignTransaction
bool SignTransaction(CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, std::string > &input_errors) const override
Creates new signatures and adds them to the transaction.
Definition: scriptpubkeyman.cpp:582