From 3895b3008385668b6aeeb8bb428f865ae0361d11 Mon Sep 17 00:00:00 2001 From: Alekos Filini Date: Tue, 21 Apr 2020 16:39:00 +0200 Subject: [PATCH] [repl] Add broadcast command --- examples/repl.rs | 18 ++++++++++++++++++ src/wallet/mod.rs | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/repl.rs b/examples/repl.rs index b67b6e38..82c41f30 100644 --- a/examples/repl.rs +++ b/examples/repl.rs @@ -160,6 +160,18 @@ fn main() { .takes_value(true) .number_of_values(1) .required(true), + )) + .subcommand( + SubCommand::with_name("broadcast") + .about("Extracts the finalized transaction from a PSBT and broadcasts it to the network") + .arg( + Arg::with_name("psbt") + .long("psbt") + .value_name("BASE64_PSBT") + .help("Sets the PSBT to broadcast") + .takes_value(true) + .number_of_values(1) + .required(true), )); let mut repl_app = app.clone().setting(AppSettings::NoBinaryName); @@ -309,6 +321,12 @@ fn main() { if finalized { println!("Extracted: {}", serialize_hex(&psbt.extract_tx())); } + } else if let Some(sub_matches) = matches.subcommand_matches("broadcast") { + let psbt = base64::decode(sub_matches.value_of("psbt").unwrap()).unwrap(); + let psbt: PartiallySignedTransaction = deserialize(&psbt).unwrap(); + let (txid, _) = wallet.broadcast(psbt).unwrap(); + + println!("TXID: {}", txid); } }; diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index daba3289..57daa491 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -1062,7 +1062,7 @@ where Ok(()) } - pub fn broadcast(&mut self, psbt: PSBT) -> Result { + pub fn broadcast(&self, psbt: PSBT) -> Result<(Txid, Transaction), Error> { let extracted = psbt.extract_tx(); self.client .as_ref() @@ -1070,6 +1070,6 @@ where .borrow_mut() .transaction_broadcast(&extracted)?; - Ok(extracted) + Ok((extracted.txid(), extracted)) } }