Expose method to find key for a single-key destination
This commit is contained in:
parent
985c79552c
commit
30a27dc5b1
2 changed files with 25 additions and 0 deletions
|
@ -136,3 +136,25 @@ bool CBasicKeyStore::HaveWatchOnly() const
|
|||
LOCK(cs_KeyStore);
|
||||
return (!setWatchOnly.empty());
|
||||
}
|
||||
|
||||
CKeyID GetKeyForDestination(const CKeyStore& store, const CTxDestination& dest)
|
||||
{
|
||||
// Only supports destinations which map to single public keys, i.e. P2PKH,
|
||||
// P2WPKH, and P2SH-P2WPKH.
|
||||
if (auto id = boost::get<CKeyID>(&dest)) {
|
||||
return *id;
|
||||
}
|
||||
if (auto witness_id = boost::get<WitnessV0KeyHash>(&dest)) {
|
||||
return CKeyID(*witness_id);
|
||||
}
|
||||
if (auto script_id = boost::get<CScriptID>(&dest)) {
|
||||
CScript script;
|
||||
CTxDestination inner_dest;
|
||||
if (store.GetCScript(*script_id, script) && ExtractDestination(script, inner_dest)) {
|
||||
if (auto inner_witness_id = boost::get<WitnessV0KeyHash>(&inner_dest)) {
|
||||
return CKeyID(*inner_witness_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return CKeyID();
|
||||
}
|
||||
|
|
|
@ -78,4 +78,7 @@ public:
|
|||
typedef std::vector<unsigned char, secure_allocator<unsigned char> > CKeyingMaterial;
|
||||
typedef std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char> > > CryptedKeyMap;
|
||||
|
||||
/** Return the CKeyID of the key involved in a script (if there is a unique one). */
|
||||
CKeyID GetKeyForDestination(const CKeyStore& store, const CTxDestination& dest);
|
||||
|
||||
#endif // BITCOIN_KEYSTORE_H
|
||||
|
|
Loading…
Reference in a new issue