X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fbitcoind_client.rs;h=ca4a18134423a17f21636fab53cc8d534e749af0;hb=198a8397557b7a0df16504c46f685f0e1a0d69d6;hp=6d29ca06c924e188c6c8b0067abd6c1ff4ccb847;hpb=a7a3f78356c28b252744f2a2743b0266686b4d4d;p=ldk-sample diff --git a/src/bitcoind_client.rs b/src/bitcoind_client.rs index 6d29ca0..ca4a181 100644 --- a/src/bitcoind_client.rs +++ b/src/bitcoind_client.rs @@ -68,9 +68,13 @@ impl BitcoindClient { let rpc_credentials = base64::encode(format!("{}:{}", rpc_user.clone(), rpc_password.clone())); let mut bitcoind_rpc_client = RpcClient::new(&rpc_credentials, http_endpoint)?; - let _dummy = bitcoind_rpc_client.call_method::("getblockchaininfo", &vec![]).await - .map_err(|_| std::io::Error::new(std::io::ErrorKind::PermissionDenied, - "Failed to make initial call to bitcoind - please check your RPC user/password and access settings"))?; + let _dummy = bitcoind_rpc_client + .call_method::("getblockchaininfo", &vec![]) + .await + .map_err(|_| { + std::io::Error::new(std::io::ErrorKind::PermissionDenied, + "Failed to make initial call to bitcoind - please check your RPC user/password and access settings") + })?; let mut fees: HashMap = HashMap::new(); fees.insert(Target::Background, AtomicU32::new(253)); fees.insert(Target::Normal, AtomicU32::new(2000)); @@ -234,7 +238,20 @@ impl BroadcasterInterface for BitcoindClient { let tx_serialized = serde_json::json!(encode::serialize_hex(tx)); tokio::spawn(async move { let mut rpc = bitcoind_rpc_client.lock().await; - rpc.call_method::("sendrawtransaction", &vec![tx_serialized]).await.unwrap(); + // This may error due to RL calling `broadcast_transaction` with the same transaction + // multiple times, but the error is safe to ignore. + match rpc.call_method::("sendrawtransaction", &vec![tx_serialized]).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("non-BIP68-final") + { + panic!("{}", e); + } + } + } }); } }