From 0efd7905974c97b7b69b4c3e6adb4051f8788ad8 Mon Sep 17 00:00:00 2001 From: edouardparis Date: Wed, 10 Jan 2024 16:23:33 +0100 Subject: [PATCH] gui: merge psbt signatures instead of override full psbt While signing in parallele, only new signatures should be appended without race condition. --- gui/src/app/state/psbt.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gui/src/app/state/psbt.rs b/gui/src/app/state/psbt.rs index 154b31cb5..0f5b2b410 100644 --- a/gui/src/app/state/psbt.rs +++ b/gui/src/app/state/psbt.rs @@ -455,7 +455,7 @@ impl Action for SignAction { self.error = None; self.signed.insert(fingerprint); let daemon = daemon.clone(); - tx.psbt = psbt.clone(); + merge_signatures(&mut tx.psbt, &psbt); if self.is_saved { return Command::perform( async move { daemon.update_spend_tx(&psbt).map_err(|e| e.into()) }, @@ -530,6 +530,22 @@ impl Action for SignAction { } } +fn merge_signatures(psbt: &mut Psbt, signed_psbt: &Psbt) { + for i in 0..signed_psbt.inputs.len() { + let psbtin = match psbt.inputs.get_mut(i) { + Some(psbtin) => psbtin, + None => continue, + }; + let signed_psbtin = match signed_psbt.inputs.get(i) { + Some(signed_psbtin) => signed_psbtin, + None => continue, + }; + psbtin + .partial_sigs + .extend(&mut signed_psbtin.partial_sigs.iter()); + } +} + async fn sign_psbt_with_hot_signer( wallet: Arc, psbt: Psbt,