diff --git a/gui/src/daemon/mod.rs b/gui/src/daemon/mod.rs index ea846baa..4fdd2340 100644 --- a/gui/src/daemon/mod.rs +++ b/gui/src/daemon/mod.rs @@ -3,6 +3,7 @@ pub mod embedded; pub mod model; use std::collections::{HashMap, HashSet}; +use std::convert::TryInto; use std::fmt::Debug; use std::io::ErrorKind; use std::iter::FromIterator; @@ -154,7 +155,25 @@ pub trait Daemon: Debug { txs: Vec, ) -> Result, DaemonError> { let info = self.get_info()?; - let coins = self.list_coins(&[], &[])?.coins; + let outpoints: Vec<_> = txs + .iter() + .flat_map(|tx| { + (0..tx.tx.output.len()) + .map(|vout| { + OutPoint::new( + tx.tx.txid(), + vout.try_into() + .expect("number of transaction outputs must fit in u32"), + ) + }) + .chain(tx.tx.input.iter().map(|txin| txin.previous_output)) + .collect::>() + }) + .collect::>() // remove duplicates + .iter() + .cloned() + .collect(); + let coins = self.list_coins(&[], &outpoints)?.coins; let mut txs = txs .into_iter() .map(|tx| {