use crate::error::Error;
use crate::types::ScriptType;
-use crate::Wallet;
+use crate::{TxBuilder, Wallet};
fn parse_addressee(s: &str) -> Result<(Address, u64), String> {
let parts: Vec<_> = s.split(":").collect();
.map(|s| parse_addressee(s))
.collect::<Result<Vec<_>, _>>()
.map_err(|s| Error::Generic(s))?;
- let send_all = sub_matches.is_present("send_all");
- let fee_rate = sub_matches
- .value_of("fee_rate")
- .map(|s| f32::from_str(s).unwrap())
- .unwrap_or(1.0);
- let utxos = sub_matches
- .values_of("utxos")
- .map(|s| s.map(|i| parse_outpoint(i).unwrap()).collect());
- let unspendable = sub_matches
- .values_of("unspendable")
- .map(|s| s.map(|i| parse_outpoint(i).unwrap()).collect());
- let policy: Option<_> = sub_matches
- .value_of("policy")
- .map(|s| serde_json::from_str::<BTreeMap<String, Vec<usize>>>(&s).unwrap());
-
- let result = wallet.create_tx(
- addressees,
- send_all,
- fee_rate * 1e-5,
- policy,
- utxos,
- unspendable,
- )?;
+ let mut tx_builder = TxBuilder::from_addressees(addressees);
+
+ if sub_matches.is_present("send_all") {
+ tx_builder.send_all();
+ }
+ if let Some(fee_rate) = sub_matches.value_of("fee_rate") {
+ let fee_rate = f32::from_str(fee_rate).map_err(|s| Error::Generic(s.to_string()))?;
+ tx_builder.fee_rate(fee_rate);
+ }
+ if let Some(utxos) = sub_matches.values_of("utxos") {
+ let utxos = utxos
+ .map(|i| parse_outpoint(i))
+ .collect::<Result<Vec<_>, _>>()
+ .map_err(|s| Error::Generic(s.to_string()))?;
+ tx_builder.utxos(utxos);
+ }
+
+ if let Some(unspendable) = sub_matches.values_of("unspendable") {
+ let unspendable = unspendable
+ .map(|i| parse_outpoint(i))
+ .collect::<Result<Vec<_>, _>>()
+ .map_err(|s| Error::Generic(s.to_string()))?;
+ tx_builder.unspendable(unspendable);
+ }
+ if let Some(policy) = sub_matches.value_of("policy") {
+ let policy = serde_json::from_str::<BTreeMap<String, Vec<usize>>>(&policy)
+ .map_err(|s| Error::Generic(s.to_string()))?;
+ tx_builder.policy_path(policy);
+ }
+
+ let result = wallet.create_tx(&tx_builder)?;
Ok(Some(format!(
"{:#?}\nPSBT: {}",
result.1,