![]() |
Bitcoin Core 31.99.0
P2P Digital Currency
|
#include <scriptpubkeyman.h>
Public Member Functions | |
| util::Result< CTxDestination > | GetNewDestination (OutputType type) override |
| bool | IsMine (const CScript &script) const override |
| bool | CheckDecryptionKey (const CKeyingMaterial &master_key) override |
| Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the keys handled by it. More... | |
| bool | Encrypt (const CKeyingMaterial &master_key, WalletBatch *batch) override |
| util::Result< CTxDestination > | GetReservedDestination (OutputType type, bool internal, int64_t &index) override |
| void | ReturnDestination (int64_t index, bool internal, const CTxDestination &addr) override |
| bool | TopUp (unsigned int size=0) override |
| Fills internal address pool. More... | |
| std::vector< WalletDestination > | MarkUnusedAddresses (const CScript &script) override |
| Mark unused addresses as being used Affects all keys up to and including the one determined by provided script. More... | |
| bool | IsHDEnabled () const override |
| bool | HavePrivateKeys () const override |
| bool | HasPrivKey (const CKeyID &keyid) const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| std::optional< CKey > | GetKey (const CKeyID &keyid) const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| Retrieve the particular key if it is available. Returns nullopt if the key is not in the wallet, or if the wallet is locked. More... | |
| bool | HaveCryptedKeys () const override |
| unsigned int | GetKeyPoolSize () const override |
| int64_t | GetTimeFirstKey () const override |
| std::unique_ptr< CKeyMetadata > | GetMetadata (const CTxDestination &dest) const override |
| bool | CanGetAddresses (bool internal=false) const override |
| std::unique_ptr< SigningProvider > | GetSolvingProvider (const CScript &script) const override |
| bool | CanProvide (const CScript &script, SignatureData &sigdata) override |
| Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that, combined with sigdata, can produce solving data. More... | |
| std::unique_ptr< FlatSigningProvider > | GetSigningProvider (const CPubKey &pubkey) const |
| bool | SignTransaction (CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, bilingual_str > &input_errors) const override |
| Creates new signatures and adds them to the transaction. More... | |
| SigningResult | SignMessage (const std::string &message, const PKHash &pkhash, std::string &str_sig) const override |
| Sign a message with the given script. More... | |
| std::optional< common::PSBTError > | FillPSBT (PartiallySignedTransaction &psbt, const PrecomputedTransactionData &txdata, const common::PSBTFillOptions &options, int *n_signed=nullptr) const override |
| Adds script and derivation path information to a PSBT, and optionally signs it. More... | |
| uint256 | GetID () const override |
| bool | HasWalletDescriptor (const WalletDescriptor &desc) const |
| util::Result< void > | UpdateWalletDescriptor (WalletDescriptor &descriptor, const FlatSigningProvider &provider) |
| bool | CanUpdateToWalletDescriptor (const WalletDescriptor &descriptor, std::string &error) |
| void | WriteDescriptor () |
| WalletDescriptor | GetWalletDescriptor () const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| std::unordered_set< CScript, SaltedSipHasher > | GetScriptPubKeys () const override |
| Returns a set of all the scriptPubKeys that this ScriptPubKeyMan watches. More... | |
| std::unordered_set< CScript, SaltedSipHasher > | GetScriptPubKeys (int32_t minimum_index) const |
| int32_t | GetEndRange () const |
| bool | GetDescriptorString (std::string &out, bool priv) const |
| void | UpgradeDescriptorCache () |
Public Member Functions inherited from wallet::ScriptPubKeyMan | |
| ScriptPubKeyMan (WalletStorage &storage) | |
| virtual | ~ScriptPubKeyMan ()=default |
| virtual util::Result< CTxDestination > | GetNewDestination (const OutputType type) |
| virtual bool | IsMine (const CScript &script) const |
| virtual bool | CheckDecryptionKey (const CKeyingMaterial &master_key) |
| Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the keys handled by it. More... | |
| virtual bool | Encrypt (const CKeyingMaterial &master_key, WalletBatch *batch) |
| virtual util::Result< CTxDestination > | GetReservedDestination (const OutputType type, bool internal, int64_t &index) |
| virtual void | KeepDestination (int64_t index, const OutputType &type) |
| virtual void | ReturnDestination (int64_t index, bool internal, const CTxDestination &addr) |
| virtual bool | TopUp (unsigned int size=0) |
| Fills internal address pool. More... | |
| virtual std::vector< WalletDestination > | MarkUnusedAddresses (const CScript &script) |
| Mark unused addresses as being used Affects all keys up to and including the one determined by provided script. More... | |
| virtual bool | IsHDEnabled () const |
| virtual bool | CanGetAddresses (bool internal=false) const |
| virtual bool | HavePrivateKeys () const |
| virtual bool | HaveCryptedKeys () const |
| virtual unsigned int | GetKeyPoolSize () const |
| virtual int64_t | GetTimeFirstKey () const |
| virtual std::unique_ptr< CKeyMetadata > | GetMetadata (const CTxDestination &dest) const |
| virtual std::unique_ptr< SigningProvider > | GetSolvingProvider (const CScript &script) const |
| virtual bool | CanProvide (const CScript &script, SignatureData &sigdata) |
| Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that, combined with sigdata, can produce solving data. More... | |
| virtual bool | SignTransaction (CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, int sighash, std::map< int, bilingual_str > &input_errors) const |
| Creates new signatures and adds them to the transaction. More... | |
| virtual SigningResult | SignMessage (const std::string &message, const PKHash &pkhash, std::string &str_sig) const |
| Sign a message with the given script. More... | |
| virtual std::optional< common::PSBTError > | FillPSBT (PartiallySignedTransaction &psbt, const PrecomputedTransactionData &txdata, const common::PSBTFillOptions &options, int *n_signed=nullptr) const |
| Adds script and derivation path information to a PSBT, and optionally signs it. More... | |
| virtual uint256 | GetID () const |
| virtual std::unordered_set< CScript, SaltedSipHasher > | GetScriptPubKeys () const |
| Returns a set of all the scriptPubKeys that this ScriptPubKeyMan watches. More... | |
| template<typename... Params> | |
| 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. More... | |
Static Public Member Functions | |
| static std::unique_ptr< DescriptorScriptPubKeyMan > | LoadFromStorage (WalletStorage &storage, WalletDescriptor &descriptor, int64_t keypool_size, const KeyMap &keys, const CryptedKeyMap &ckeys) |
| static std::unique_ptr< DescriptorScriptPubKeyMan > | CreateFromImport (WalletStorage &storage, WalletDescriptor &descriptor, int64_t keypool_size, const FlatSigningProvider &provider) |
| static std::unique_ptr< DescriptorScriptPubKeyMan > | CreateFromMigration (WalletStorage &storage, WalletBatch &batch, WalletDescriptor &descriptor, int64_t keypool_size, const FlatSigningProvider &provider) |
| static std::unique_ptr< DescriptorScriptPubKeyMan > | GenerateNewSingleSig (WalletStorage &storage, WalletBatch &batch, int64_t keypool_size, const CExtKey &master_key, OutputType addr_type, bool internal) |
Public Attributes | |
| RecursiveMutex | cs_desc_man |
Public Attributes inherited from wallet::ScriptPubKeyMan | |
| btcsignals::signal< void()> | NotifyCanGetAddressesChanged |
| Keypool has new keys. More... | |
| btcsignals::signal< void(const ScriptPubKeyMan *spkm, int64_t new_birth_time)> | NotifyFirstKeyTimeChanged |
| Birth time changed. More... | |
Protected Member Functions | |
| DescriptorScriptPubKeyMan (WalletStorage &storage, WalletDescriptor &descriptor, int64_t keypool_size, const KeyMap &keys, const CryptedKeyMap &ckeys) | |
| Create a DescriptorScriptPubKeyMan from existing data (i.e. during loading) More... | |
| DescriptorScriptPubKeyMan (WalletStorage &storage, int64_t keypool_size) | |
| WalletDescriptor m_wallet_descriptor | GUARDED_BY (cs_desc_man) |
| void | IncIndex () EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| void | DecIndex () EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| void | SetRangeEnd (int32_t end) EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| bool | TopUpWithDB (WalletBatch &batch, unsigned int size=0) |
| Same as 'TopUp' but designed for use within a batch transaction context. More... | |
Private Types | |
| using | ScriptPubKeyMap = std::map< CScript, int32_t > |
| using | PubKeyMap = std::map< CPubKey, int32_t > |
Private Member Functions | |
| ScriptPubKeyMap m_map_script_pub_keys | GUARDED_BY (cs_desc_man) |
| PubKeyMap m_map_pubkeys | GUARDED_BY (cs_desc_man) |
| KeyMap m_map_keys | GUARDED_BY (cs_desc_man) |
| CryptedKeyMap m_map_crypted_keys | GUARDED_BY (cs_desc_man) |
| int64_t m_keypool_size | GUARDED_BY (cs_desc_man) |
| Number of pre-generated keys/scripts (part of the look-ahead process, used to detect payments) More... | |
| DescriptorScriptPubKeyMan (WalletStorage &storage, WalletDescriptor &descriptor, int64_t keypool_size) | |
| Create a new DescriptorScriptPubKeyMan from an existing descriptor (i.e. from an import) More... | |
| bool | AddDescriptorKeyWithDB (WalletBatch &batch, const CKey &key, const CPubKey &pubkey) EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| KeyMap | GetKeys () const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| std::unique_ptr< FlatSigningProvider > | GetSigningProvider (const CScript &script, bool include_private=false) const |
| std::unique_ptr< FlatSigningProvider > | GetSigningProvider (int32_t index, bool include_private=false) const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| void | Load () |
| void | AddDescriptorKey (const CKey &key, const CPubKey &pubkey) |
| void | UpdateWithSigningProvider (WalletBatch &batch, const FlatSigningProvider &signing_provider) EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man) |
| void | SetupDescriptorGeneration (WalletBatch &batch, const CExtKey &master_key, OutputType addr_type, bool internal) |
| Setup descriptors based on the given CExtKey. More... | |
Private Attributes | |
| int32_t | m_max_cached_index = -1 |
| bool | m_decryption_thoroughly_checked = false |
| keeps track of whether Unlock has run a thorough check before More... | |
| std::map< uint256, MuSig2SecNonce > | m_musig2_secnonces |
| Map of a session id to MuSig2 secnonce. More... | |
| std::map< int32_t, FlatSigningProvider > | m_map_signing_providers |
Additional Inherited Members | |
Protected Attributes inherited from wallet::ScriptPubKeyMan | |
| WalletStorage & | m_storage |
Definition at line 272 of file scriptpubkeyman.h.
|
private |
Definition at line 276 of file scriptpubkeyman.h.
|
private |
Definition at line 275 of file scriptpubkeyman.h.
|
inlineprivate |
Create a new DescriptorScriptPubKeyMan from an existing descriptor (i.e. from an import)
Definition at line 305 of file scriptpubkeyman.h.
|
protected |
Create a DescriptorScriptPubKeyMan from existing data (i.e. during loading)
Definition at line 849 of file scriptpubkeyman.cpp.
|
inlineprotected |
Definition at line 334 of file scriptpubkeyman.h.
|
private |
Definition at line 1185 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1250 of file scriptpubkeyman.cpp.
|
overridevirtual |
Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that, combined with sigdata, can produce solving data.
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1354 of file scriptpubkeyman.cpp.
| bool wallet::DescriptorScriptPubKeyMan::CanUpdateToWalletDescriptor | ( | const WalletDescriptor & | descriptor, |
| std::string & | error | ||
| ) |
Definition at line 1667 of file scriptpubkeyman.cpp.
|
overridevirtual |
Check that the given decryption key is valid for this ScriptPubKeyMan, i.e. it decrypts all of the keys handled by it.
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 955 of file scriptpubkeyman.cpp.
|
static |
Definition at line 832 of file scriptpubkeyman.cpp.
|
static |
Definition at line 841 of file scriptpubkeyman.cpp.
|
protected |
Definition at line 886 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 987 of file scriptpubkeyman.cpp.
|
overridevirtual |
Adds script and derivation path information to a PSBT, and optionally signs it.
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1391 of file scriptpubkeyman.cpp.
|
static |
Definition at line 867 of file scriptpubkeyman.cpp.
| bool wallet::DescriptorScriptPubKeyMan::GetDescriptorString | ( | std::string & | out, |
| bool | priv | ||
| ) | const |
Definition at line 1585 of file scriptpubkeyman.cpp.
| int32_t wallet::DescriptorScriptPubKeyMan::GetEndRange | ( | ) | const |
Definition at line 1580 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1504 of file scriptpubkeyman.cpp.
Retrieve the particular key if it is available. Returns nullopt if the key is not in the wallet, or if the wallet is locked.
Definition at line 1053 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1272 of file scriptpubkeyman.cpp.
Definition at line 1028 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1486 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 910 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1010 of file scriptpubkeyman.cpp.
|
overridevirtual |
Returns a set of all the scriptPubKeys that this ScriptPubKeyMan watches.
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1563 of file scriptpubkeyman.cpp.
| std::unordered_set< CScript, SaltedSipHasher > wallet::DescriptorScriptPubKeyMan::GetScriptPubKeys | ( | int32_t | minimum_index | ) | const |
Definition at line 1568 of file scriptpubkeyman.cpp.
| std::unique_ptr< FlatSigningProvider > wallet::DescriptorScriptPubKeyMan::GetSigningProvider | ( | const CPubKey & | pubkey | ) | const |
|
private |
Definition at line 1284 of file scriptpubkeyman.cpp.
|
private |
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1349 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1278 of file scriptpubkeyman.cpp.
| WalletDescriptor wallet::DescriptorScriptPubKeyMan::GetWalletDescriptor | ( | ) | const |
|
private |
|
private |
|
private |
|
private |
|
inlineprivate |
Number of pre-generated keys/scripts (part of the look-ahead process, used to detect payments)
Definition at line 289 of file scriptpubkeyman.h.
|
protected |
| bool wallet::DescriptorScriptPubKeyMan::HasPrivKey | ( | const CKeyID & | keyid | ) | const |
| bool wallet::DescriptorScriptPubKeyMan::HasWalletDescriptor | ( | const WalletDescriptor & | desc | ) | const |
Definition at line 1543 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1266 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1260 of file scriptpubkeyman.cpp.
|
protected |
Definition at line 874 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1244 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 949 of file scriptpubkeyman.cpp.
|
private |
Definition at line 1510 of file scriptpubkeyman.cpp.
|
static |
Definition at line 862 of file scriptpubkeyman.cpp.
|
overridevirtual |
Mark unused addresses as being used Affects all keys up to and including the one determined by provided script.
| script | determines the last key to mark as used |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1148 of file scriptpubkeyman.cpp.
|
overridevirtual |
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1018 of file scriptpubkeyman.cpp.
|
protected |
Definition at line 898 of file scriptpubkeyman.cpp.
|
private |
Setup descriptors based on the given CExtKey.
Definition at line 1217 of file scriptpubkeyman.cpp.
|
overridevirtual |
Sign a message with the given script.
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1373 of file scriptpubkeyman.cpp.
|
overridevirtual |
Creates new signatures and adds them to the transaction.
Returns whether all inputs were signed
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1359 of file scriptpubkeyman.cpp.
|
overridevirtual |
Fills internal address pool.
Use within ScriptPubKeyMan implementations should be used sparingly and only when something from the address pool is removed, excluding GetNewDestination and GetReservedDestination. External wallet code is primarily responsible for topping up prior to fetching new addresses
Reimplemented from wallet::ScriptPubKeyMan.
Definition at line 1077 of file scriptpubkeyman.cpp.
|
protected |
Same as 'TopUp' but designed for use within a batch transaction context.
Definition at line 1086 of file scriptpubkeyman.cpp.
| util::Result< void > wallet::DescriptorScriptPubKeyMan::UpdateWalletDescriptor | ( | WalletDescriptor & | descriptor, |
| const FlatSigningProvider & | provider | ||
| ) |
|
private |
Definition at line 1650 of file scriptpubkeyman.cpp.
| void wallet::DescriptorScriptPubKeyMan::UpgradeDescriptorCache | ( | ) |
Definition at line 1602 of file scriptpubkeyman.cpp.
| void wallet::DescriptorScriptPubKeyMan::WriteDescriptor | ( | ) |
|
mutable |
Definition at line 353 of file scriptpubkeyman.h.
|
private |
keeps track of whether Unlock has run a thorough check before
Definition at line 286 of file scriptpubkeyman.h.
|
mutableprivate |
Definition at line 316 of file scriptpubkeyman.h.
|
private |
Definition at line 280 of file scriptpubkeyman.h.
|
mutableprivate |
Map of a session id to MuSig2 secnonce.
Stores MuSig2 secnonces while the MuSig2 signing session is still ongoing. Note that these secnonces must not be reused. In order to avoid being tricked into reusing a nonce, this map is held only in memory and must not be written to disk. The side effect is that signing sessions cannot persist across restarts, but this must be done in order to prevent nonce reuse.
The session id is an arbitrary value set by the signer in order for the signing logic to find ongoing signing sessions, see MuSig2SessionID.
Definition at line 302 of file scriptpubkeyman.h.