mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 06:58:57 +01:00
Pass HD path data through SignatureData
This commit is contained in:
@@ -50,10 +50,6 @@ static bool GetCScript(const SigningProvider& provider, const SignatureData& sig
|
||||
|
||||
static bool GetPubKey(const SigningProvider& provider, SignatureData& sigdata, const CKeyID& address, CPubKey& pubkey)
|
||||
{
|
||||
if (provider.GetPubKey(address, pubkey)) {
|
||||
sigdata.misc_pubkeys.emplace(pubkey.GetID(), pubkey);
|
||||
return true;
|
||||
}
|
||||
// Look for pubkey in all partial sigs
|
||||
const auto it = sigdata.signatures.find(address);
|
||||
if (it != sigdata.signatures.end()) {
|
||||
@@ -63,7 +59,15 @@ static bool GetPubKey(const SigningProvider& provider, SignatureData& sigdata, c
|
||||
// Look for pubkey in pubkey list
|
||||
const auto& pk_it = sigdata.misc_pubkeys.find(address);
|
||||
if (pk_it != sigdata.misc_pubkeys.end()) {
|
||||
pubkey = pk_it->second;
|
||||
pubkey = pk_it->second.first;
|
||||
return true;
|
||||
}
|
||||
// Query the underlying provider
|
||||
if (provider.GetPubKey(address, pubkey)) {
|
||||
KeyOriginInfo info;
|
||||
if (provider.GetKeyOrigin(address, info)) {
|
||||
sigdata.misc_pubkeys.emplace(address, std::make_pair(pubkey, std::move(info)));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -543,7 +547,7 @@ void PSBTInput::FillSignatureData(SignatureData& sigdata) const
|
||||
sigdata.witness_script = witness_script;
|
||||
}
|
||||
for (const auto& key_pair : hd_keypaths) {
|
||||
sigdata.misc_pubkeys.emplace(key_pair.first.GetID(), key_pair.first);
|
||||
sigdata.misc_pubkeys.emplace(key_pair.first.GetID(), key_pair);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -571,6 +575,9 @@ void PSBTInput::FromSignatureData(const SignatureData& sigdata)
|
||||
if (witness_script.empty() && !sigdata.witness_script.empty()) {
|
||||
witness_script = sigdata.witness_script;
|
||||
}
|
||||
for (const auto& entry : sigdata.misc_pubkeys) {
|
||||
hd_keypaths.emplace(entry.second);
|
||||
}
|
||||
}
|
||||
|
||||
void PSBTInput::Merge(const PSBTInput& input)
|
||||
@@ -612,7 +619,7 @@ void PSBTOutput::FillSignatureData(SignatureData& sigdata) const
|
||||
sigdata.witness_script = witness_script;
|
||||
}
|
||||
for (const auto& key_pair : hd_keypaths) {
|
||||
sigdata.misc_pubkeys.emplace(key_pair.first.GetID(), key_pair.first);
|
||||
sigdata.misc_pubkeys.emplace(key_pair.first.GetID(), key_pair);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -624,6 +631,9 @@ void PSBTOutput::FromSignatureData(const SignatureData& sigdata)
|
||||
if (witness_script.empty() && !sigdata.witness_script.empty()) {
|
||||
witness_script = sigdata.witness_script;
|
||||
}
|
||||
for (const auto& entry : sigdata.misc_pubkeys) {
|
||||
hd_keypaths.emplace(entry.second);
|
||||
}
|
||||
}
|
||||
|
||||
bool PSBTOutput::IsNull() const
|
||||
|
||||
@@ -109,7 +109,7 @@ struct SignatureData {
|
||||
CScript witness_script; ///< The witnessScript (if any) for the input. witnessScripts are used in P2WSH outputs.
|
||||
CScriptWitness scriptWitness; ///< The scriptWitness of an input. Contains complete signatures or the traditional partial signatures format. scriptWitness is part of a transaction input per BIP 144.
|
||||
std::map<CKeyID, SigPair> signatures; ///< BIP 174 style partial signatures for the input. May contain all signatures necessary for producing a final scriptSig or scriptWitness.
|
||||
std::map<CKeyID, CPubKey> misc_pubkeys;
|
||||
std::map<CKeyID, std::pair<CPubKey, KeyOriginInfo>> misc_pubkeys;
|
||||
|
||||
SignatureData() {}
|
||||
explicit SignatureData(const CScript& script) : scriptSig(script) {}
|
||||
|
||||
Reference in New Issue
Block a user