tx3_resolver/inputs/
mod.rs1use tx3_tir::encoding::AnyTir;
9
10use crate::job::ResolveJob;
11use crate::{Error, UtxoStore};
12
13mod approximate;
14pub(crate) mod assign;
15mod canonical;
16mod narrow;
17
18#[cfg(test)]
19mod tests;
20
21pub use canonical::CanonicalQuery;
22
23impl ResolveJob {
24 pub async fn resolve_queries<T: UtxoStore>(&mut self, utxos: &T) -> Result<(), Error> {
26 self.build_utxo_pool(utxos).await?;
27 self.approximate_queries();
28 self.assign_all()?;
29
30 Ok(())
31 }
32
33 pub async fn resolve_inputs<T: UtxoStore>(
35 &mut self,
36 tx: AnyTir,
37 utxos: &T,
38 ) -> Result<AnyTir, Error> {
39 let mut queries: Vec<(String, CanonicalQuery)> = Vec::new();
40
41 for (name, query) in tx3_tir::reduce::find_queries(&tx) {
42 queries.push((name, CanonicalQuery::try_from(query)?));
43 }
44
45 self.set_input_queries(queries);
46 self.resolve_queries(utxos).await?;
47
48 let all_inputs = self.to_input_map();
49 let out = tx3_tir::reduce::apply_inputs(tx, &all_inputs)?;
50
51 Ok(out)
52 }
53}