| 258 | } |
| 259 | |
| 260 | static bool CreateSig(const BaseSignatureCreator& creator, SignatureData& sigdata, const SigningProvider& provider, std::vector<unsigned char>& sig_out, const CPubKey& pubkey, const CScript& scriptcode, SigVersion sigversion) |
| 261 | { |
| 262 | CKeyID keyid = pubkey.GetID(); |
| 263 | const auto it = sigdata.signatures.find(keyid); |
| 264 | if (it != sigdata.signatures.end()) { |
| 265 | sig_out = it->second.second; |
| 266 | return true; |
| 267 | } |
| 268 | KeyOriginInfo info; |
| 269 | if (provider.GetKeyOrigin(keyid, info)) { |
| 270 | sigdata.misc_pubkeys.emplace(keyid, std::make_pair(pubkey, std::move(info))); |
| 271 | } |
| 272 | if (creator.CreateSig(provider, sig_out, keyid, scriptcode, sigversion)) { |
| 273 | auto i = sigdata.signatures.emplace(keyid, SigPair(pubkey, sig_out)); |
| 274 | assert(i.second); |
| 275 | return true; |
| 276 | } |
| 277 | // Could not make signature or signature not found, add keyid to missing |
| 278 | sigdata.missing_sigs.push_back(keyid); |
| 279 | return false; |
| 280 | } |
| 281 | |
| 282 | static bool SignMuSig2(const BaseSignatureCreator& creator, SignatureData& sigdata, const SigningProvider& provider, std::vector<unsigned char>& sig_out, const XOnlyPubKey& script_pubkey, const uint256* merkle_root, const uint256* leaf_hash, SigVersion sigversion) |
| 283 | { |