From 4641d9eb7bd5fd2f8b8ed053601ff296965ea552 Mon Sep 17 00:00:00 2001 From: jp1ac4 <121959000+jp1ac4@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:01:34 +0000 Subject: [PATCH] gui(daemon): filter coins using spend txs prev outpoints --- gui/src/daemon/mod.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/gui/src/daemon/mod.rs b/gui/src/daemon/mod.rs index b5fb00f9..477e68b3 100644 --- a/gui/src/daemon/mod.rs +++ b/gui/src/daemon/mod.rs @@ -107,15 +107,26 @@ pub trait Daemon: Debug { txids: Option<&[Txid]>, ) -> Result, DaemonError> { let info = self.get_info()?; - let coins = self.list_coins(&[], &[])?.coins; let mut spend_txs = Vec::new(); let curve = secp256k1::Secp256k1::verification_only(); - for tx in self.list_spend_txs()?.spend_txs { - if let Some(txids) = txids { - if !txids.contains(&tx.psbt.unsigned_tx.txid()) { - continue; - } - } + // TODO: Use filters in `list_spend_txs` command. + let mut txs = self.list_spend_txs()?.spend_txs; + if let Some(txids) = txids { + txs.retain(|tx| txids.contains(&tx.psbt.unsigned_tx.txid())); + } + let outpoints: Vec<_> = txs + .iter() + .flat_map(|tx| { + tx.psbt + .unsigned_tx + .input + .iter() + .map(|txin| txin.previous_output) + .collect::>() + }) + .collect(); + let coins = self.list_coins(&[], &outpoints)?.coins; + for tx in txs { let coins = coins .iter() .filter(|coin| {