@@ -411,6 +411,55 @@ impl EsploraChainSource {
411411 Ok ( ( ) )
412412 }
413413
414+ fn log_http_error ( & self , e : esplora_client:: Error , txids : & [ Txid ] , txs : & SortedTransactions ) {
415+ match e {
416+ esplora_client:: Error :: HttpResponse { status, message } => {
417+ if status == 400 && txs. len ( ) == 1 {
418+ // Log 400 at lesser level, as this often just means bitcoind already knows the
419+ // transaction.
420+ // FIXME: We can further differentiate here based on the error
421+ // message which will be available with rust-esplora-client 0.7 and
422+ // later.
423+ log_trace ! (
424+ self . logger,
425+ "Failed to broadcast due to HTTP connection error: {}" ,
426+ message
427+ ) ;
428+ log_trace ! ( self . logger, "Failed to broadcast transaction(s) {:?}" , txids) ;
429+ } else {
430+ log_error ! (
431+ self . logger,
432+ "Failed to broadcast due to HTTP connection error: {} - {}" ,
433+ status,
434+ message
435+ ) ;
436+ log_error ! ( self . logger, "Failed to broadcast transaction(s) {:?}" , txids) ;
437+ }
438+ log_trace ! ( self . logger, "Failed broadcast transaction(s) bytes:" ) ;
439+ for tx in txs. iter ( ) {
440+ log_trace ! ( self . logger, "{}" , log_bytes!( tx. encode( ) ) ) ;
441+ }
442+ } ,
443+ _ => {
444+ log_error ! ( self . logger, "Failed to broadcast transaction(s) {:?}: {}" , txids, e) ;
445+ log_trace ! ( self . logger, "Failed broadcast transaction(s) bytes:" ) ;
446+ for tx in txs. iter ( ) {
447+ log_trace ! ( self . logger, "{}" , log_bytes!( tx. encode( ) ) ) ;
448+ }
449+ } ,
450+ }
451+ }
452+
453+ fn log_broadcast_error (
454+ & self , e : impl core:: fmt:: Display , txids : & [ Txid ] , txs : & SortedTransactions ,
455+ ) {
456+ log_error ! ( self . logger, "Failed to broadcast transaction(s) {:?}: {}" , txids, e) ;
457+ log_trace ! ( self . logger, "Failed broadcast transaction bytes:" ) ;
458+ for tx in txs. iter ( ) {
459+ log_trace ! ( self . logger, "{}" , log_bytes!( tx. encode( ) ) ) ;
460+ }
461+ }
462+
414463 pub ( crate ) async fn process_transaction_broadcast ( & self , txs : SortedTransactions ) {
415464 for tx in txs. iter ( ) {
416465 let txid = tx. compute_txid ( ) ;
@@ -423,61 +472,9 @@ impl EsploraChainSource {
423472 Ok ( ( ) ) => {
424473 log_trace ! ( self . logger, "Successfully broadcast transaction {}" , txid) ;
425474 } ,
426- Err ( e) => match e {
427- esplora_client:: Error :: HttpResponse { status, message } => {
428- if status == 400 {
429- // Log 400 at lesser level, as this often just means bitcoind already knows the
430- // transaction.
431- // FIXME: We can further differentiate here based on the error
432- // message which will be available with rust-esplora-client 0.7 and
433- // later.
434- log_trace ! (
435- self . logger,
436- "Failed to broadcast due to HTTP connection error: {}" ,
437- message
438- ) ;
439- } else {
440- log_error ! (
441- self . logger,
442- "Failed to broadcast due to HTTP connection error: {} - {}" ,
443- status,
444- message
445- ) ;
446- }
447- log_trace ! (
448- self . logger,
449- "Failed broadcast transaction bytes: {}" ,
450- log_bytes!( tx. encode( ) )
451- ) ;
452- } ,
453- _ => {
454- log_error ! (
455- self . logger,
456- "Failed to broadcast transaction {}: {}" ,
457- txid,
458- e
459- ) ;
460- log_trace ! (
461- self . logger,
462- "Failed broadcast transaction bytes: {}" ,
463- log_bytes!( tx. encode( ) )
464- ) ;
465- } ,
466- } ,
467- } ,
468- Err ( e) => {
469- log_error ! (
470- self . logger,
471- "Failed to broadcast transaction due to timeout {}: {}" ,
472- txid,
473- e
474- ) ;
475- log_trace ! (
476- self . logger,
477- "Failed broadcast transaction bytes: {}" ,
478- log_bytes!( tx. encode( ) )
479- ) ;
475+ Err ( e) => self . log_http_error ( e, & [ txid] , & txs) ,
480476 } ,
477+ Err ( e) => self . log_broadcast_error ( e, & [ txid] , & txs) ,
481478 }
482479 }
483480 }
0 commit comments