impl BroadcasterInterface for BitcoindClient {
fn broadcast_transaction(&self, tx: &Transaction) {
let bitcoind_rpc_client = self.bitcoind_rpc_client.clone();
- let tx_serialized = serde_json::json!(encode::serialize_hex(tx));
+ 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_serialized])
+ .call_method::<Txid>("sendrawtransaction", &vec![tx_json])
.await
{
Ok(_) => {}
Err(e) => {
let err_str = e.get_ref().unwrap().to_string();
- if !err_str.contains("Transaction already in block chain")
- && !err_str.contains("Inputs missing or spent")
- && !err_str.contains("bad-txns-inputs-missingorspent")
- && !err_str.contains("txn-mempool-conflict")
- && !err_str.contains("non-BIP68-final")
- && !err_str.contains("insufficient fee, rejecting replacement ")
- {
- panic!("{}", e);
- }
+ 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);
}
}
});