0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00

Extract Taproot internal keyid with GetKeyFromDestination

This commit is contained in:
Andrew Chow 2021-06-23 21:17:48 -04:00
parent d8abbe119c
commit 4868c9f1b3

View file

@ -190,8 +190,8 @@ bool FillableSigningProvider::GetCScript(const CScriptID &hash, CScript& redeemS
CKeyID GetKeyForDestination(const SigningProvider& store, const CTxDestination& dest)
{
// Only supports destinations which map to single public keys, i.e. P2PKH,
// P2WPKH, and P2SH-P2WPKH.
// Only supports destinations which map to single public keys:
// P2PKH, P2WPKH, P2SH-P2WPKH, P2TR
if (auto id = std::get_if<PKHash>(&dest)) {
return ToKeyID(*id);
}
@ -208,5 +208,15 @@ CKeyID GetKeyForDestination(const SigningProvider& store, const CTxDestination&
}
}
}
if (auto output_key = std::get_if<WitnessV1Taproot>(&dest)) {
TaprootSpendData spenddata;
CPubKey pub;
if (store.GetTaprootSpendData(*output_key, spenddata)
&& !spenddata.internal_key.IsNull()
&& spenddata.merkle_root.IsNull()
&& store.GetPubKeyByXOnly(spenddata.internal_key, pub)) {
return pub.GetID();
}
}
return CKeyID();
}