From e5fb42ed7bae41ebfffec3d5f8e44532dbf55c1d Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 23 Mar 2023 19:14:08 +0000 Subject: [PATCH] Don't panic on tx broadcast failures In general LDK will often broadcast transactions which aren't actually able to get into the mempool. That's generally fine, though could indicate a significant issue. Thus, we previously had a panic in place for it to ensure developers are notified and we can investigate. However, now that people are trying to actually *use* ldk-sample, we should just remove the panic and print something with more details. --- src/bitcoind_client.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/bitcoind_client.rs b/src/bitcoind_client.rs index d8315ac..e7a3cec 100644 --- a/src/bitcoind_client.rs +++ b/src/bitcoind_client.rs @@ -254,27 +254,24 @@ impl FeeEstimator for BitcoindClient { 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::("sendrawtransaction", &vec![tx_serialized]) + .call_method::("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); } } }); -- 2.39.5