@@ -8,14 +8,13 @@ use crate::gossip::GossipSource;
88use crate :: io;
99use crate :: io:: sqlite_store:: SqliteStore ;
1010use crate :: liquidity:: LiquiditySource ;
11- use crate :: logger:: { log_error, FilesystemLogger , Logger } ;
11+ use crate :: logger:: { log_error, log_info , FilesystemLogger , Logger } ;
1212use crate :: message_handler:: NodeCustomMessageHandler ;
1313use crate :: payment_store:: PaymentStore ;
1414use crate :: peer_store:: PeerStore ;
15- use crate :: sweep:: OutputSweeper ;
1615use crate :: tx_broadcaster:: TransactionBroadcaster ;
1716use crate :: types:: {
18- ChainMonitor , ChannelManager , FakeMessageRouter , GossipSync , KeysManager , NetworkGraph ,
17+ ChainMonitor , ChannelManager , GossipSync , KeysManager , MessageRouter , NetworkGraph ,
1918 OnionMessenger , PeerManager ,
2019} ;
2120use crate :: wallet:: Wallet ;
@@ -37,6 +36,7 @@ use lightning::util::persist::{
3736 CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE , CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
3837} ;
3938use lightning:: util:: ser:: ReadableArgs ;
39+ use lightning:: util:: sweep:: OutputSweeper ;
4040
4141use lightning_persister:: fs_store:: FilesystemStore ;
4242
@@ -664,7 +664,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
664664 let router = Arc :: new ( DefaultRouter :: new (
665665 Arc :: clone ( & network_graph) ,
666666 Arc :: clone ( & logger) ,
667- keys_manager . get_secure_random_bytes ( ) ,
667+ Arc :: clone ( & keys_manager ) ,
668668 Arc :: clone ( & scorer) ,
669669 scoring_fee_params,
670670 ) ) ;
@@ -776,12 +776,15 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
776776 } ) ?;
777777 }
778778
779+ let message_router = MessageRouter :: new ( Arc :: clone ( & network_graph) , Arc :: clone ( & keys_manager) ) ;
780+
779781 // Initialize the PeerManager
780- let onion_messenger: Arc < OnionMessenger > = Arc :: new ( OnionMessenger :: new (
782+ let onion_messenger: Arc < OnionMessenger < K > > = Arc :: new ( OnionMessenger :: new (
781783 Arc :: clone ( & keys_manager) ,
782784 Arc :: clone ( & keys_manager) ,
783785 Arc :: clone ( & logger) ,
784- Arc :: new ( FakeMessageRouter { } ) ,
786+ Arc :: clone ( & channel_manager) ,
787+ Arc :: new ( message_router) ,
785788 IgnoringMessageHandler { } ,
786789 IgnoringMessageHandler { } ,
787790 ) ) ;
@@ -892,6 +895,47 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
892895
893896 liquidity_source. as_ref ( ) . map ( |l| l. set_peer_manager ( Arc :: clone ( & peer_manager) ) ) ;
894897
898+ let output_sweeper = match io:: utils:: read_output_sweeper (
899+ Arc :: clone ( & tx_broadcaster) ,
900+ Arc :: clone ( & fee_estimator) ,
901+ Arc :: clone ( & tx_sync) ,
902+ Arc :: clone ( & keys_manager) ,
903+ Arc :: clone ( & kv_store) ,
904+ Arc :: clone ( & logger) ,
905+ ) {
906+ Ok ( output_sweeper) => Arc :: new ( output_sweeper) ,
907+ Err ( e) => {
908+ if e. kind ( ) == std:: io:: ErrorKind :: NotFound {
909+ Arc :: new ( OutputSweeper :: new (
910+ channel_manager. current_best_block ( ) ,
911+ Arc :: clone ( & tx_broadcaster) ,
912+ Arc :: clone ( & fee_estimator) ,
913+ Some ( Arc :: clone ( & tx_sync) ) ,
914+ Arc :: clone ( & keys_manager) ,
915+ Arc :: clone ( & keys_manager) ,
916+ Arc :: clone ( & kv_store) ,
917+ Arc :: clone ( & logger) ,
918+ ) )
919+ } else {
920+ return Err ( BuildError :: ReadFailed ) ;
921+ }
922+ } ,
923+ } ;
924+
925+ match io:: utils:: migrate_deprecated_spendable_outputs (
926+ Arc :: clone ( & output_sweeper) ,
927+ Arc :: clone ( & kv_store) ,
928+ Arc :: clone ( & logger) ,
929+ ) {
930+ Ok ( ( ) ) => {
931+ log_info ! ( logger, "Successfully migrated OutputSweeper data." ) ;
932+ } ,
933+ Err ( e) => {
934+ log_error ! ( logger, "Failed to migrate OutputSweeper data: {}" , e) ;
935+ return Err ( BuildError :: ReadFailed ) ;
936+ } ,
937+ }
938+
895939 // Init payment info storage
896940 let payment_store = match io:: utils:: read_payments ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) {
897941 Ok ( payments) => {
@@ -925,25 +969,6 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
925969 } ,
926970 } ;
927971
928- let best_block = channel_manager. current_best_block ( ) ;
929- let output_sweeper =
930- match io:: utils:: read_spendable_outputs ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) {
931- Ok ( outputs) => Arc :: new ( OutputSweeper :: new (
932- outputs,
933- Arc :: clone ( & wallet) ,
934- Arc :: clone ( & tx_broadcaster) ,
935- Arc :: clone ( & fee_estimator) ,
936- Arc :: clone ( & keys_manager) ,
937- Arc :: clone ( & kv_store) ,
938- best_block,
939- Some ( Arc :: clone ( & tx_sync) ) ,
940- Arc :: clone ( & logger) ,
941- ) ) ,
942- Err ( _) => {
943- return Err ( BuildError :: ReadFailed ) ;
944- } ,
945- } ;
946-
947972 let ( stop_sender, _) = tokio:: sync:: watch:: channel ( ( ) ) ;
948973
949974 let is_listening = Arc :: new ( AtomicBool :: new ( false ) ) ;
0 commit comments