- fn broadcast_transaction(&self, tx: &Transaction) {
- let bitcoind_rpc_client = self.bitcoind_rpc_client.clone();
- let tx_serialized = encode::serialize_hex(tx);
- let tx_json = serde_json::json!(tx_serialized);
- let logger = Arc::clone(&self.logger);
- self.handle.spawn(async move {
- // This may error due to RL calling `broadcast_transaction` with the same transaction
- // multiple times, but the error is safe to ignore.
- match bitcoind_rpc_client
- .call_method::<Txid>("sendrawtransaction", &vec![tx_json])
- .await
- {
- Ok(_) => {}
- Err(e) => {
- let err_str = e.get_ref().unwrap().to_string();
- log_error!(logger,
- "Warning, failed to broadcast a transaction, this is likely okay but may indicate an error: {}\nTransaction: {}",
- err_str,
- tx_serialized);
- print!("Warning, failed to broadcast a transaction, this is likely okay but may indicate an error: {}\n> ", err_str);
- }
- }
- });
+ fn broadcast_transactions(&self, txs: &[&Transaction]) {
+ // TODO: Rather than calling `sendrawtransaction` in a a loop, we should probably use
+ // `submitpackage` once it becomes available.
+ for tx in txs {
+ let bitcoind_rpc_client = Arc::clone(&self.bitcoind_rpc_client);
+ let tx_serialized = encode::serialize_hex(tx);
+ let tx_json = serde_json::json!(tx_serialized);
+ let logger = Arc::clone(&self.logger);
+ self.handle.spawn(async move {
+ // This may error due to RL calling `broadcast_transactions` with the same transaction
+ // multiple times, but the error is safe to ignore.
+ match bitcoind_rpc_client
+ .call_method::<Txid>("sendrawtransaction", &vec![tx_json])
+ .await
+ {
+ Ok(_) => {}
+ Err(e) => {
+ let err_str = e.get_ref().unwrap().to_string();
+ log_error!(logger,
+ "Warning, failed to broadcast a transaction, this is likely okay but may indicate an error: {}\nTransaction: {}",
+ err_str,
+ tx_serialized);
+ print!("Warning, failed to broadcast a transaction, this is likely okay but may indicate an error: {}\n> ", err_str);
+ }
+ }
+ });
+ }