Bitcoin ABC 0.30.5
P2P Digital Currency
Public Member Functions | Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
DescriptorScriptPubKeyMan Class Reference

#include <scriptpubkeyman.h>

Inheritance diagram for DescriptorScriptPubKeyMan:
[legend]
Collaboration diagram for DescriptorScriptPubKeyMan:
[legend]

Public Member Functions

 DescriptorScriptPubKeyMan (WalletStorage &storage, WalletDescriptor &descriptor)
 
 DescriptorScriptPubKeyMan (WalletStorage &storage, bool internal)
 
bool GetNewDestination (const OutputType type, CTxDestination &dest, std::string &error) override
 
isminetype IsMine (const CScript &script) const override
 
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. More...
 
bool Encrypt (const CKeyingMaterial &master_key, WalletBatch *batch) override
 
bool GetReservedDestination (const OutputType type, bool internal, CTxDestination &address, int64_t &index, CKeyPool &keypool) override
 
void ReturnDestination (int64_t index, bool internal, const CTxDestination &addr) override
 
bool TopUp (unsigned int size=0) override
 Fills internal address pool. More...
 
void MarkUnusedAddresses (const CScript &script) override
 Mark unused addresses as being used. More...
 
bool IsHDEnabled () const override
 
bool SetupDescriptorGeneration (const CExtKey &master_key, OutputType addr_type)
 Setup descriptors based on the given CExtkey. More...
 
bool HavePrivateKeys () const override
 
int64_t GetOldestKeyPoolTime () const override
 
size_t KeypoolCountExternalKeys () const override
 
unsigned int GetKeyPoolSize () const override
 
int64_t GetTimeFirstKey () const override
 
std::unique_ptr< CKeyMetadataGetMetadata (const CTxDestination &dest) const override
 
bool CanGetAddresses (bool internal=false) const override
 Returns true if the wallet can give out new addresses. More...
 
std::unique_ptr< SigningProviderGetSolvingProvider (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...
 
bool SignTransaction (CMutableTransaction &tx, const std::map< COutPoint, Coin > &coins, SigHashType sighash, std::map< int, std::string > &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...
 
TransactionError FillPSBT (PartiallySignedTransaction &psbt, SigHashType sighash_type=SigHashType().withForkId(), bool sign=true, bool bip32derivs=false) const override
 Adds script and derivation path information to a PSBT, and optionally signs it. More...
 
uint256 GetID () const override
 
void SetInternal (bool internal) override
 
void SetCache (const DescriptorCache &cache)
 
bool AddKey (const CKeyID &key_id, const CKey &key)
 
bool AddCryptedKey (const CKeyID &key_id, const CPubKey &pubkey, const std::vector< uint8_t > &crypted_key)
 
bool HasWalletDescriptor (const WalletDescriptor &desc) const
 
void UpdateWalletDescriptor (WalletDescriptor &descriptor)
 
bool CanUpdateToWalletDescriptor (const WalletDescriptor &descriptor, std::string &error)
 
void AddDescriptorKey (const CKey &key, const CPubKey &pubkey)
 
void WriteDescriptor ()
 
const WalletDescriptor GetWalletDescriptor () const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man)
 
const std::vector< CScriptGetScriptPubKeys () const
 
- Public Member Functions inherited from ScriptPubKeyMan
 ScriptPubKeyMan (WalletStorage &storage)
 
virtual ~ScriptPubKeyMan ()
 
virtual bool GetNewDestination (const OutputType type, CTxDestination &dest, std::string &error)
 
virtual isminetype IsMine (const CScript &script) const
 
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. More...
 
virtual bool Encrypt (const CKeyingMaterial &master_key, WalletBatch *batch)
 
virtual bool GetReservedDestination (const OutputType type, bool internal, CTxDestination &address, int64_t &index, CKeyPool &keypool)
 
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 void MarkUnusedAddresses (const CScript &script)
 Mark unused addresses as being used. More...
 
virtual bool SetupGeneration (bool force=false)
 Sets up the key generation stuff, i.e. More...
 
virtual bool IsHDEnabled () const
 
virtual bool CanGetAddresses (bool internal=false) const
 Returns true if the wallet can give out new addresses. More...
 
virtual bool Upgrade (int prev_version, bilingual_str &error)
 Upgrades the wallet to the specified version. More...
 
virtual bool HavePrivateKeys () const
 
virtual void RewriteDB ()
 The action to do when the DB needs rewrite. More...
 
virtual int64_t GetOldestKeyPoolTime () const
 
virtual size_t KeypoolCountExternalKeys () const
 
virtual unsigned int GetKeyPoolSize () const
 
virtual int64_t GetTimeFirstKey () const
 
virtual std::unique_ptr< CKeyMetadataGetMetadata (const CTxDestination &dest) const
 
virtual std::unique_ptr< SigningProviderGetSolvingProvider (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, SigHashType sighash, std::map< int, std::string > &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 TransactionError FillPSBT (PartiallySignedTransaction &psbt, SigHashType sighash_type=SigHashType().withForkId(), bool sign=true, bool bip32derivs=false) const
 Adds script and derivation path information to a PSBT, and optionally signs it. More...
 
virtual uint256 GetID () const
 
virtual void SetInternal (bool internal)
 
template<typename... Params>
void WalletLogPrintf (std::string fmt, Params... parameters) const
 Prepends the wallet name in logging output to ease debugging in multi-wallet use cases. More...
 

Public Attributes

RecursiveMutex cs_desc_man
 
- Public Attributes inherited from ScriptPubKeyMan
boost::signals2::signal< void(bool fHaveWatchOnly)> NotifyWatchonlyChanged
 Watch-only address added. More...
 
boost::signals2::signal< void()> NotifyCanGetAddressesChanged
 Keypool has new keys. More...
 

Private Types

using ScriptPubKeyMap = std::map< CScript, int32_t >
 
using PubKeyMap = std::map< CPubKey, int32_t >
 
using CryptedKeyMap = std::map< CKeyID, std::pair< CPubKey, std::vector< uint8_t > > >
 
using KeyMap = std::map< CKeyID, CKey >
 

Private Member Functions

WalletDescriptor m_wallet_descriptor GUARDED_BY (cs_desc_man)
 
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)
 
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< FlatSigningProviderGetSigningProvider (const CScript &script, bool include_private=false) const
 
std::unique_ptr< FlatSigningProviderGetSigningProvider (const CPubKey &pubkey) const
 
std::unique_ptr< FlatSigningProviderGetSigningProvider (int32_t index, bool include_private=false) const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man)
 

Private Attributes

int32_t m_max_cached_index = -1
 
bool m_internal = false
 
bool m_decryption_thoroughly_checked = false
 keeps track of whether Unlock has run a thorough check before More...
 

Additional Inherited Members

- Protected Attributes inherited from ScriptPubKeyMan
WalletStoragem_storage
 

Detailed Description

Definition at line 654 of file scriptpubkeyman.h.

Member Typedef Documentation

◆ CryptedKeyMap

using DescriptorScriptPubKeyMan::CryptedKeyMap = std::map<CKeyID, std::pair<CPubKey, std::vector<uint8_t> >>
private

Definition at line 662 of file scriptpubkeyman.h.

◆ KeyMap

using DescriptorScriptPubKeyMan::KeyMap = std::map<CKeyID, CKey>
private

Definition at line 664 of file scriptpubkeyman.h.

◆ PubKeyMap

using DescriptorScriptPubKeyMan::PubKeyMap = std::map<CPubKey, int32_t>
private

Definition at line 661 of file scriptpubkeyman.h.

◆ ScriptPubKeyMap

using DescriptorScriptPubKeyMan::ScriptPubKeyMap = std::map<CScript, int32_t>
private

Definition at line 659 of file scriptpubkeyman.h.

Constructor & Destructor Documentation

◆ DescriptorScriptPubKeyMan() [1/2]

DescriptorScriptPubKeyMan::DescriptorScriptPubKeyMan ( WalletStorage storage,
WalletDescriptor descriptor 
)
inline

Definition at line 700 of file scriptpubkeyman.h.

◆ DescriptorScriptPubKeyMan() [2/2]

DescriptorScriptPubKeyMan::DescriptorScriptPubKeyMan ( WalletStorage storage,
bool  internal 
)
inline

Definition at line 703 of file scriptpubkeyman.h.

Member Function Documentation

◆ AddCryptedKey()

bool DescriptorScriptPubKeyMan::AddCryptedKey ( const CKeyID key_id,
const CPubKey pubkey,
const std::vector< uint8_t > &  crypted_key 
)

Definition at line 2330 of file scriptpubkeyman.cpp.

◆ AddDescriptorKey()

void DescriptorScriptPubKeyMan::AddDescriptorKey ( const CKey key,
const CPubKey pubkey 
)

Definition at line 1933 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ AddDescriptorKeyWithDB()

bool DescriptorScriptPubKeyMan::AddDescriptorKeyWithDB ( WalletBatch batch,
const CKey key,
const CPubKey pubkey 
)
private

Definition at line 1943 of file scriptpubkeyman.cpp.

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

◆ AddKey()

bool DescriptorScriptPubKeyMan::AddKey ( const CKeyID key_id,
const CKey key 
)

Definition at line 2324 of file scriptpubkeyman.cpp.

◆ CanGetAddresses()

bool DescriptorScriptPubKeyMan::CanGetAddresses ( bool  internal = false) const
overridevirtual

Returns true if the wallet can give out new addresses.

This means it has keys in the keypool or can generate new keys.

Reimplemented from ScriptPubKeyMan.

Definition at line 2045 of file scriptpubkeyman.cpp.

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

◆ CanProvide()

bool DescriptorScriptPubKeyMan::CanProvide ( const CScript script,
SignatureData sigdata 
)
overridevirtual

Whether this ScriptPubKeyMan can provide a SigningProvider (via GetSolvingProvider) that, combined with sigdata, can produce solving data.

Reimplemented from ScriptPubKeyMan.

Definition at line 2144 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ CanUpdateToWalletDescriptor()

bool DescriptorScriptPubKeyMan::CanUpdateToWalletDescriptor ( const WalletDescriptor descriptor,
std::string &  error 
)

Definition at line 2389 of file scriptpubkeyman.cpp.

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

◆ CheckDecryptionKey()

bool DescriptorScriptPubKeyMan::CheckDecryptionKey ( const CKeyingMaterial master_key,
bool  accept_no_keys = false 
)
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 ScriptPubKeyMan.

Definition at line 1697 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ Encrypt()

bool DescriptorScriptPubKeyMan::Encrypt ( const CKeyingMaterial master_key,
WalletBatch batch 
)
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 1734 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ FillPSBT()

TransactionError DescriptorScriptPubKeyMan::FillPSBT ( PartiallySignedTransaction psbt,
SigHashType  sighash_type = SigHashType().withForkId(),
bool  sign = true,
bool  bip32derivs = false 
) const
overridevirtual

Adds script and derivation path information to a PSBT, and optionally signs it.

Reimplemented from ScriptPubKeyMan.

Definition at line 2188 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ GetID()

uint256 DescriptorScriptPubKeyMan::GetID ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2273 of file scriptpubkeyman.cpp.

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

◆ GetKeyPoolSize()

unsigned int DescriptorScriptPubKeyMan::GetKeyPoolSize ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2075 of file scriptpubkeyman.cpp.

Here is the caller graph for this function:

◆ GetKeys()

std::map< CKeyID, CKey > DescriptorScriptPubKeyMan::GetKeys ( ) const
private

Definition at line 1781 of file scriptpubkeyman.cpp.

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

◆ GetMetadata()

std::unique_ptr< CKeyMetadata > DescriptorScriptPubKeyMan::GetMetadata ( const CTxDestination dest) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2254 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ GetNewDestination()

bool DescriptorScriptPubKeyMan::GetNewDestination ( const OutputType  type,
CTxDestination dest,
std::string &  error 
)
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 1632 of file scriptpubkeyman.cpp.

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

◆ GetOldestKeyPoolTime()

int64_t DescriptorScriptPubKeyMan::GetOldestKeyPoolTime ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2061 of file scriptpubkeyman.cpp.

◆ GetReservedDestination()

bool DescriptorScriptPubKeyMan::GetReservedDestination ( const OutputType  type,
bool  internal,
CTxDestination address,
int64_t &  index,
CKeyPool keypool 
)
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 1757 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ GetScriptPubKeys()

const std::vector< CScript > DescriptorScriptPubKeyMan::GetScriptPubKeys ( ) const

Definition at line 2364 of file scriptpubkeyman.cpp.

◆ GetSigningProvider() [1/3]

std::unique_ptr< FlatSigningProvider > DescriptorScriptPubKeyMan::GetSigningProvider ( const CPubKey pubkey) const
private

Definition at line 2101 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ GetSigningProvider() [2/3]

std::unique_ptr< FlatSigningProvider > DescriptorScriptPubKeyMan::GetSigningProvider ( const CScript script,
bool  include_private = false 
) const
private

Definition at line 2086 of file scriptpubkeyman.cpp.

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

◆ GetSigningProvider() [3/3]

std::unique_ptr< FlatSigningProvider > DescriptorScriptPubKeyMan::GetSigningProvider ( int32_t  index,
bool  include_private = false 
) const
private

Definition at line 2117 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ GetSolvingProvider()

std::unique_ptr< SigningProvider > DescriptorScriptPubKeyMan::GetSolvingProvider ( const CScript script) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2140 of file scriptpubkeyman.cpp.

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

◆ GetTimeFirstKey()

int64_t DescriptorScriptPubKeyMan::GetTimeFirstKey ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2080 of file scriptpubkeyman.cpp.

◆ GetWalletDescriptor()

const WalletDescriptor DescriptorScriptPubKeyMan::GetWalletDescriptor ( ) const

Definition at line 2360 of file scriptpubkeyman.cpp.

◆ GUARDED_BY() [1/5]

WalletDescriptor m_wallet_descriptor DescriptorScriptPubKeyMan::GUARDED_BY ( cs_desc_man  )
private

◆ GUARDED_BY() [2/5]

ScriptPubKeyMap m_map_script_pub_keys DescriptorScriptPubKeyMan::GUARDED_BY ( cs_desc_man  )
private

◆ GUARDED_BY() [3/5]

PubKeyMap m_map_pubkeys DescriptorScriptPubKeyMan::GUARDED_BY ( cs_desc_man  )
private

◆ GUARDED_BY() [4/5]

KeyMap m_map_keys DescriptorScriptPubKeyMan::GUARDED_BY ( cs_desc_man  )
private

◆ GUARDED_BY() [5/5]

CryptedKeyMap m_map_crypted_keys DescriptorScriptPubKeyMan::GUARDED_BY ( cs_desc_man  )
private

◆ HasWalletDescriptor()

bool DescriptorScriptPubKeyMan::HasWalletDescriptor ( const WalletDescriptor desc) const

Definition at line 2342 of file scriptpubkeyman.cpp.

Here is the caller graph for this function:

◆ HavePrivateKeys()

bool DescriptorScriptPubKeyMan::HavePrivateKeys ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2056 of file scriptpubkeyman.cpp.

Here is the caller graph for this function:

◆ IsHDEnabled()

bool DescriptorScriptPubKeyMan::IsHDEnabled ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2040 of file scriptpubkeyman.cpp.

◆ IsMine()

isminetype DescriptorScriptPubKeyMan::IsMine ( const CScript script) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 1689 of file scriptpubkeyman.cpp.

Here is the caller graph for this function:

◆ KeypoolCountExternalKeys()

size_t DescriptorScriptPubKeyMan::KeypoolCountExternalKeys ( ) const
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2068 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ MarkUnusedAddresses()

void DescriptorScriptPubKeyMan::MarkUnusedAddresses ( const CScript script)
overridevirtual

Mark unused addresses as being used.

Reimplemented from ScriptPubKeyMan.

Definition at line 1916 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ ReturnDestination()

void DescriptorScriptPubKeyMan::ReturnDestination ( int64_t  index,
bool  internal,
const CTxDestination addr 
)
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 1769 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ SetCache()

void DescriptorScriptPubKeyMan::SetCache ( const DescriptorCache cache)

Definition at line 2287 of file scriptpubkeyman.cpp.

◆ SetInternal()

void DescriptorScriptPubKeyMan::SetInternal ( bool  internal)
overridevirtual

Reimplemented from ScriptPubKeyMan.

Definition at line 2283 of file scriptpubkeyman.cpp.

◆ SetupDescriptorGeneration()

bool DescriptorScriptPubKeyMan::SetupDescriptorGeneration ( const CExtKey master_key,
OutputType  addr_type 
)

Setup descriptors based on the given CExtkey.

Definition at line 1978 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ SignMessage()

SigningResult DescriptorScriptPubKeyMan::SignMessage ( const std::string &  message,
const PKHash pkhash,
std::string &  str_sig 
) const
overridevirtual

Sign a message with the given script.

Reimplemented from ScriptPubKeyMan.

Definition at line 2167 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ SignTransaction()

bool DescriptorScriptPubKeyMan::SignTransaction ( CMutableTransaction tx,
const std::map< COutPoint, Coin > &  coins,
SigHashType  sighash,
std::map< int, std::string > &  input_errors 
) const
overridevirtual

Creates new signatures and adds them to the transaction.

Returns whether all inputs were signed

Reimplemented from ScriptPubKeyMan.

Definition at line 2149 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ TopUp()

bool DescriptorScriptPubKeyMan::TopUp ( unsigned int  size = 0)
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 ScriptPubKeyMan.

Definition at line 1801 of file scriptpubkeyman.cpp.

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

◆ UpdateWalletDescriptor()

void DescriptorScriptPubKeyMan::UpdateWalletDescriptor ( WalletDescriptor descriptor)

Definition at line 2375 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

◆ WriteDescriptor()

void DescriptorScriptPubKeyMan::WriteDescriptor ( )

Definition at line 2351 of file scriptpubkeyman.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ cs_desc_man

RecursiveMutex DescriptorScriptPubKeyMan::cs_desc_man
mutable

Definition at line 706 of file scriptpubkeyman.h.

◆ m_decryption_thoroughly_checked

bool DescriptorScriptPubKeyMan::m_decryption_thoroughly_checked = false
private

keeps track of whether Unlock has run a thorough check before

Definition at line 676 of file scriptpubkeyman.h.

◆ m_internal

bool DescriptorScriptPubKeyMan::m_internal = false
private

Definition at line 670 of file scriptpubkeyman.h.

◆ m_max_cached_index

int32_t DescriptorScriptPubKeyMan::m_max_cached_index = -1
private

Definition at line 668 of file scriptpubkeyman.h.


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