| 359 | } |
| 360 | |
| 361 | void PSBTInput::FromSignatureData(const SignatureData& sigdata) |
| 362 | { |
| 363 | if (sigdata.complete) { |
| 364 | partial_sigs.clear(); |
| 365 | hd_keypaths.clear(); |
| 366 | redeem_script.clear(); |
| 367 | witness_script.clear(); |
| 368 | |
| 369 | if (!sigdata.scriptSig.empty()) { |
| 370 | final_script_sig = sigdata.scriptSig; |
| 371 | } |
| 372 | if (!sigdata.scriptWitness.IsNull()) { |
| 373 | final_script_witness = sigdata.scriptWitness; |
| 374 | } |
| 375 | return; |
| 376 | } |
| 377 | |
| 378 | partial_sigs.insert(sigdata.signatures.begin(), sigdata.signatures.end()); |
| 379 | if (redeem_script.empty() && !sigdata.redeem_script.empty()) { |
| 380 | redeem_script = sigdata.redeem_script; |
| 381 | } |
| 382 | if (witness_script.empty() && !sigdata.witness_script.empty()) { |
| 383 | witness_script = sigdata.witness_script; |
| 384 | } |
| 385 | for (const auto& entry : sigdata.misc_pubkeys) { |
| 386 | hd_keypaths.emplace(entry.second); |
| 387 | } |
| 388 | if (!sigdata.taproot_key_path_sig.empty()) { |
| 389 | m_tap_key_sig = sigdata.taproot_key_path_sig; |
| 390 | } |
| 391 | for (const auto& [pubkey_leaf, sig] : sigdata.taproot_script_sigs) { |
| 392 | m_tap_script_sigs.emplace(pubkey_leaf, sig); |
| 393 | } |
| 394 | if (!sigdata.tr_spenddata.internal_key.IsNull()) { |
| 395 | m_tap_internal_key = sigdata.tr_spenddata.internal_key; |
| 396 | } |
| 397 | if (!sigdata.tr_spenddata.merkle_root.IsNull()) { |
| 398 | m_tap_merkle_root = sigdata.tr_spenddata.merkle_root; |
| 399 | } |
| 400 | for (const auto& [leaf_script, control_block] : sigdata.tr_spenddata.scripts) { |
| 401 | m_tap_scripts.emplace(leaf_script, control_block); |
| 402 | } |
| 403 | for (const auto& [pubkey, leaf_origin] : sigdata.taproot_misc_pubkeys) { |
| 404 | m_tap_bip32_paths.emplace(pubkey, leaf_origin); |
| 405 | } |
| 406 | m_musig2_participants.insert(sigdata.musig2_pubkeys.begin(), sigdata.musig2_pubkeys.end()); |
| 407 | for (const auto& [agg_key_lh, pubnonces] : sigdata.musig2_pubnonces) { |
| 408 | m_musig2_pubnonces[agg_key_lh].insert(pubnonces.begin(), pubnonces.end()); |
| 409 | } |
| 410 | for (const auto& [agg_key_lh, psigs] : sigdata.musig2_partial_sigs) { |
| 411 | m_musig2_partial_sigs[agg_key_lh].insert(psigs.begin(), psigs.end()); |
| 412 | } |
| 413 | for (const auto& [hash, preimage] : sigdata.ripemd160_preimages) { |
| 414 | ripemd160_preimages.emplace(std::vector<unsigned char>(hash.begin(), hash.end()), preimage); |
| 415 | } |
| 416 | for (const auto& [hash, preimage] : sigdata.sha256_preimages) { |
| 417 | sha256_preimages.emplace(std::vector<unsigned char>(hash.begin(), hash.end()), preimage); |
| 418 | } |