aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2022-11-09 10:24:17 +0000
committerfanquake <fanquake@gmail.com>2022-11-09 10:28:17 +0000
commit2a5d9818ed17b51657cd6fdc1b42884f0a6e4579 (patch)
tree32b4d02da375f65891c72c460097f54b87aea67e /src/script
parentca5f8f0de2c6fcf2ac122bd7fbb5a685d5935f71 (diff)
parent42c74a0a4c05c9b44593bacfb444949a8c152236 (diff)
downloadbitcoin-2a5d9818ed17b51657cd6fdc1b42884f0a6e4579.tar.xz
Merge bitcoin/bitcoin#26452: [24.x] rc4 backports
42c74a0a4c05c9b44593bacfb444949a8c152236 rpc: doc: add missing option "bech32m" for `change_type` parameters (Sebastian Falbesoner) 6e4d87e69622be8cd9ea199ac62ae36b4ab4f49f tests: Test Taproot PSBT signing with keys in other descriptor (Andrew Chow) 0a5ea2aa84cb8ad8387482c6b1b09322830171bd tests: Use new wallets for each test in wallet_taproot.py (Andrew Chow) 2159676b6e5ce2753db294068a699c0bfc0809fa psbt: Include output pubkey in additional pubkeys to sign (Andrew Chow) 754eefd21cf7bd253d0000e998115406ed7433c6 sign: Fill in taproot pubkey info for all script path sigs (Andrew Chow) bb1fabda307b58a5a48d063e1b72491c17666f97 doc: mention BIP86 in doc/bips.md (Sebastian Falbesoner) Pull request description: Currently backports: * https://github.com/bitcoin/bitcoin/pull/26418 * https://github.com/bitcoin/bitcoin/pull/26443 * https://github.com/bitcoin/bitcoin/pull/26449 ACKs for top commit: dergoegge: ACK 42c74a0a4c05c9b44593bacfb444949a8c152236 Tree-SHA512: e40f57b28cc4c06fc9dedebad6c9ab647fa0b98af1aef2d36874c6a05d39164c99fd763a2eb9ca162b7e276aa2e7d0f5934465ab4d7c1f5ba4a3162087e7089f
Diffstat (limited to 'src/script')
-rw-r--r--src/script/sign.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/script/sign.cpp b/src/script/sign.cpp
index 5da0d076d8..0d74a661a5 100644
--- a/src/script/sign.cpp
+++ b/src/script/sign.cpp
@@ -146,6 +146,16 @@ static bool CreateSig(const BaseSignatureCreator& creator, SignatureData& sigdat
static bool CreateTaprootScriptSig(const BaseSignatureCreator& creator, SignatureData& sigdata, const SigningProvider& provider, std::vector<unsigned char>& sig_out, const XOnlyPubKey& pubkey, const uint256& leaf_hash, SigVersion sigversion)
{
+ KeyOriginInfo info;
+ if (provider.GetKeyOriginByXOnly(pubkey, info)) {
+ auto it = sigdata.taproot_misc_pubkeys.find(pubkey);
+ if (it == sigdata.taproot_misc_pubkeys.end()) {
+ sigdata.taproot_misc_pubkeys.emplace(pubkey, std::make_pair(std::set<uint256>({leaf_hash}), info));
+ } else {
+ it->second.first.insert(leaf_hash);
+ }
+ }
+
auto lookup_key = std::make_pair(pubkey, leaf_hash);
auto it = sigdata.taproot_script_sigs.find(lookup_key);
if (it != sigdata.taproot_script_sigs.end()) {
@@ -170,17 +180,6 @@ static bool SignTaprootScript(const SigningProvider& provider, const BaseSignatu
// <xonly pubkey> OP_CHECKSIG
if (script.size() == 34 && script[33] == OP_CHECKSIG && script[0] == 0x20) {
XOnlyPubKey pubkey{Span{script}.subspan(1, 32)};
-
- KeyOriginInfo info;
- if (provider.GetKeyOriginByXOnly(pubkey, info)) {
- auto it = sigdata.taproot_misc_pubkeys.find(pubkey);
- if (it == sigdata.taproot_misc_pubkeys.end()) {
- sigdata.taproot_misc_pubkeys.emplace(pubkey, std::make_pair(std::set<uint256>({leaf_hash}), info));
- } else {
- it->second.first.insert(leaf_hash);
- }
- }
-
std::vector<unsigned char> sig;
if (CreateTaprootScriptSig(creator, sigdata, provider, sig, pubkey, leaf_hash, sigversion)) {
result = Vector(std::move(sig));