Skip to content

Commit 5f12fe3

Browse files
committed
psbt: Implement merge for Taproot fields
1 parent 1ece9a3 commit 5f12fe3

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/psbt.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,17 @@ void PSBTInput::Merge(const PSBTInput& input)
194194
hash256_preimages.insert(input.hash256_preimages.begin(), input.hash256_preimages.end());
195195
hd_keypaths.insert(input.hd_keypaths.begin(), input.hd_keypaths.end());
196196
unknown.insert(input.unknown.begin(), input.unknown.end());
197+
m_tap_script_sigs.insert(input.m_tap_script_sigs.begin(), input.m_tap_script_sigs.end());
198+
m_tap_scripts.insert(input.m_tap_scripts.begin(), input.m_tap_scripts.end());
199+
m_tap_bip32_paths.insert(input.m_tap_bip32_paths.begin(), input.m_tap_bip32_paths.end());
197200

198201
if (redeem_script.empty() && !input.redeem_script.empty()) redeem_script = input.redeem_script;
199202
if (witness_script.empty() && !input.witness_script.empty()) witness_script = input.witness_script;
200203
if (final_script_sig.empty() && !input.final_script_sig.empty()) final_script_sig = input.final_script_sig;
201204
if (final_script_witness.IsNull() && !input.final_script_witness.IsNull()) final_script_witness = input.final_script_witness;
205+
if (m_tap_key_sig.empty() && !input.m_tap_key_sig.empty()) m_tap_key_sig = input.m_tap_key_sig;
206+
if (m_tap_internal_key.IsNull() && !input.m_tap_internal_key.IsNull()) m_tap_internal_key = input.m_tap_internal_key;
207+
if (m_tap_merkle_root.IsNull() && !input.m_tap_merkle_root.IsNull()) m_tap_merkle_root = input.m_tap_merkle_root;
202208
}
203209

204210
void PSBTOutput::FillSignatureData(SignatureData& sigdata) const
@@ -254,9 +260,12 @@ void PSBTOutput::Merge(const PSBTOutput& output)
254260
{
255261
hd_keypaths.insert(output.hd_keypaths.begin(), output.hd_keypaths.end());
256262
unknown.insert(output.unknown.begin(), output.unknown.end());
263+
m_tap_bip32_paths.insert(output.m_tap_bip32_paths.begin(), output.m_tap_bip32_paths.end());
257264

258265
if (redeem_script.empty() && !output.redeem_script.empty()) redeem_script = output.redeem_script;
259266
if (witness_script.empty() && !output.witness_script.empty()) witness_script = output.witness_script;
267+
if (m_tap_internal_key.IsNull() && !output.m_tap_internal_key.IsNull()) m_tap_internal_key = output.m_tap_internal_key;
268+
if (m_tap_tree.has_value() && !output.m_tap_tree.has_value()) m_tap_tree = output.m_tap_tree;
260269
}
261270
bool PSBTInputSigned(const PSBTInput& input)
262271
{

0 commit comments

Comments
 (0)