@@ -5,6 +5,7 @@ use crate::io::sqlite_store::SqliteStore;
55use crate :: logger:: { log_error, FilesystemLogger , Logger } ;
66use crate :: payment_store:: PaymentStore ;
77use crate :: peer_store:: PeerStore ;
8+ use crate :: tx_broadcaster:: TransactionBroadcaster ;
89use crate :: types:: {
910 ChainMonitor , ChannelManager , FakeMessageRouter , GossipSync , KeysManager , NetworkGraph ,
1011 OnionMessenger , PeerManager ,
@@ -464,13 +465,17 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
464465 BuildError :: WalletSetupFailed
465466 } ) ?;
466467
467- let ( blockchain, tx_sync) = match chain_data_source_config {
468+ let ( blockchain, tx_sync, tx_broadcaster ) = match chain_data_source_config {
468469 Some ( ChainDataSourceConfig :: Esplora ( server_url) ) => {
469470 let tx_sync = Arc :: new ( EsploraSyncClient :: new ( server_url. clone ( ) , Arc :: clone ( & logger) ) ) ;
470471 let blockchain =
471472 EsploraBlockchain :: from_client ( tx_sync. client ( ) . clone ( ) , BDK_CLIENT_STOP_GAP )
472473 . with_concurrency ( BDK_CLIENT_CONCURRENCY ) ;
473- ( blockchain, tx_sync)
474+ let tx_broadcaster = Arc :: new ( TransactionBroadcaster :: new (
475+ tx_sync. client ( ) . clone ( ) ,
476+ Arc :: clone ( & logger) ,
477+ ) ) ;
478+ ( blockchain, tx_sync, tx_broadcaster)
474479 }
475480 None => {
476481 // Default to Esplora client.
@@ -479,18 +484,26 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
479484 let blockchain =
480485 EsploraBlockchain :: from_client ( tx_sync. client ( ) . clone ( ) , BDK_CLIENT_STOP_GAP )
481486 . with_concurrency ( BDK_CLIENT_CONCURRENCY ) ;
482- ( blockchain, tx_sync)
487+ let tx_broadcaster = Arc :: new ( TransactionBroadcaster :: new (
488+ tx_sync. client ( ) . clone ( ) ,
489+ Arc :: clone ( & logger) ,
490+ ) ) ;
491+ ( blockchain, tx_sync, tx_broadcaster)
483492 }
484493 } ;
485494
486495 let runtime = Arc :: new ( RwLock :: new ( None ) ) ;
487- let wallet =
488- Arc :: new ( Wallet :: new ( blockchain, bdk_wallet, Arc :: clone ( & runtime) , Arc :: clone ( & logger) ) ) ;
496+ let wallet = Arc :: new ( Wallet :: new (
497+ blockchain,
498+ bdk_wallet,
499+ Arc :: clone ( & tx_broadcaster) ,
500+ Arc :: clone ( & logger) ,
501+ ) ) ;
489502
490503 // Initialize the ChainMonitor
491504 let chain_monitor: Arc < ChainMonitor < K > > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
492505 Some ( Arc :: clone ( & tx_sync) ) ,
493- Arc :: clone ( & wallet ) ,
506+ Arc :: clone ( & tx_broadcaster ) ,
494507 Arc :: clone ( & logger) ,
495508 Arc :: clone ( & wallet) ,
496509 Arc :: clone ( & kv_store) ,
@@ -594,7 +607,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
594607 Arc :: clone ( & keys_manager) ,
595608 Arc :: clone ( & wallet) ,
596609 Arc :: clone ( & chain_monitor) ,
597- Arc :: clone ( & wallet ) ,
610+ Arc :: clone ( & tx_broadcaster ) ,
598611 Arc :: clone ( & router) ,
599612 Arc :: clone ( & logger) ,
600613 user_config,
@@ -618,7 +631,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
618631 channelmanager:: ChannelManager :: new (
619632 Arc :: clone ( & wallet) ,
620633 Arc :: clone ( & chain_monitor) ,
621- Arc :: clone ( & wallet ) ,
634+ Arc :: clone ( & tx_broadcaster ) ,
622635 Arc :: clone ( & router) ,
623636 Arc :: clone ( & logger) ,
624637 Arc :: clone ( & keys_manager) ,
@@ -767,6 +780,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
767780 config,
768781 wallet,
769782 tx_sync,
783+ tx_broadcaster,
770784 event_queue,
771785 channel_manager,
772786 chain_monitor,
0 commit comments