@@ -740,8 +740,15 @@ impl NodeBuilder {
740740 pub fn build_with_vss_store_and_header_provider (
741741 & self , vss_url : String , store_id : String , header_provider : Arc < dyn VssHeaderProvider > ,
742742 ) -> Result < Node , BuildError > {
743+ use std:: time:: Instant ;
744+ let build_start = Instant :: now ( ) ;
745+ eprintln ! ( "TIMING: [ldk-node] build_with_vss_store_and_header_provider START" ) ;
746+
747+ let step_start = Instant :: now ( ) ;
743748 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
749+ eprintln ! ( "TIMING: [ldk-node] setup_logger() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
744750
751+ let step_start = Instant :: now ( ) ;
745752 let runtime = if let Some ( handle) = self . runtime_handle . as_ref ( ) {
746753 Arc :: new ( Runtime :: with_handle ( handle. clone ( ) , Arc :: clone ( & logger) ) )
747754 } else {
@@ -750,30 +757,38 @@ impl NodeBuilder {
750757 BuildError :: RuntimeSetupFailed
751758 } ) ?)
752759 } ;
760+ eprintln ! ( "TIMING: [ldk-node] runtime setup took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
753761
762+ let step_start = Instant :: now ( ) ;
754763 let seed_bytes = seed_bytes_from_config (
755764 & self . config ,
756765 self . entropy_source_config . as_ref ( ) ,
757766 Arc :: clone ( & logger) ,
758767 ) ?;
768+ eprintln ! ( "TIMING: [ldk-node] seed_bytes_from_config() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
759769
760770 let config = Arc :: new ( self . config . clone ( ) ) ;
761771
772+ let step_start = Instant :: now ( ) ;
762773 let vss_xprv = derive_xprv (
763774 config. clone ( ) ,
764775 & seed_bytes,
765776 VSS_HARDENED_CHILD_INDEX ,
766777 Arc :: clone ( & logger) ,
767778 ) ?;
779+ eprintln ! ( "TIMING: [ldk-node] derive_xprv() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
768780
769781 let vss_seed_bytes: [ u8 ; 32 ] = vss_xprv. private_key . secret_bytes ( ) ;
770782
783+ let step_start = Instant :: now ( ) ;
771784 let vss_store =
772785 VssStore :: new ( vss_url, store_id, vss_seed_bytes, header_provider) . map_err ( |e| {
773786 log_error ! ( logger, "Failed to setup VSS store: {}" , e) ;
774787 BuildError :: KVStoreSetupFailed
775788 } ) ?;
789+ eprintln ! ( "TIMING: [ldk-node] VssStore::new() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
776790
791+ eprintln ! ( "TIMING: [ldk-node] build_with_vss_store_and_header_provider pre-internal took {}ms" , build_start. elapsed( ) . as_millis( ) ) ;
777792 build_with_store_internal (
778793 config,
779794 self . chain_data_source_config . as_ref ( ) ,
@@ -1215,7 +1230,13 @@ fn build_with_store_internal(
12151230 async_payments_role : Option < AsyncPaymentsRole > , seed_bytes : [ u8 ; 64 ] , runtime : Arc < Runtime > ,
12161231 logger : Arc < Logger > , kv_store : Arc < DynStore > ,
12171232) -> Result < Node , BuildError > {
1233+ use std:: time:: Instant ;
1234+ let build_start = Instant :: now ( ) ;
1235+ eprintln ! ( "TIMING: [ldk-node] build_with_store_internal START" ) ;
1236+
1237+ let step_start = Instant :: now ( ) ;
12181238 optionally_install_rustls_cryptoprovider ( ) ;
1239+ eprintln ! ( "TIMING: [ldk-node] optionally_install_rustls_cryptoprovider() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
12191240
12201241 if let Err ( err) = may_announce_channel ( & config) {
12211242 if config. announcement_addresses . is_some ( ) {
@@ -1235,6 +1256,7 @@ fn build_with_store_internal(
12351256 }
12361257
12371258 // Initialize the status fields.
1259+ let step_start = Instant :: now ( ) ;
12381260 let node_metrics = match runtime
12391261 . block_on ( async { read_node_metrics ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) . await } )
12401262 {
@@ -1248,9 +1270,12 @@ fn build_with_store_internal(
12481270 }
12491271 } ,
12501272 } ;
1273+ eprintln ! ( "TIMING: [ldk-node] read_node_metrics() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
1274+
12511275 let tx_broadcaster = Arc :: new ( TransactionBroadcaster :: new ( Arc :: clone ( & logger) ) ) ;
12521276 let fee_estimator = Arc :: new ( OnchainFeeEstimator :: new ( ) ) ;
12531277
1278+ let step_start = Instant :: now ( ) ;
12541279 let payment_store = match runtime
12551280 . block_on ( async { read_payments ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) . await } )
12561281 {
@@ -1266,7 +1291,9 @@ fn build_with_store_internal(
12661291 return Err ( BuildError :: ReadFailed ) ;
12671292 } ,
12681293 } ;
1294+ eprintln ! ( "TIMING: [ldk-node] read_payments() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
12691295
1296+ let step_start = Instant :: now ( ) ;
12701297 let ( chain_source, chain_tip_opt) = match chain_data_source_config {
12711298 Some ( ChainDataSourceConfig :: Esplora { server_url, headers, sync_config } ) => {
12721299 let sync_config = sync_config. unwrap_or ( EsploraSyncConfig :: default ( ) ) ;
@@ -1352,9 +1379,11 @@ fn build_with_store_internal(
13521379 )
13531380 } ,
13541381 } ;
1382+ eprintln ! ( "TIMING: [ldk-node] chain_source setup took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
13551383 let chain_source = Arc :: new ( chain_source) ;
13561384
13571385 // Initialize the on-chain wallet and chain access
1386+ let step_start = Instant :: now ( ) ;
13581387 let xprv = bitcoin:: bip32:: Xpriv :: new_master ( config. network , & seed_bytes) . map_err ( |e| {
13591388 log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
13601389 BuildError :: InvalidSeedBytes
@@ -1428,6 +1457,7 @@ fn build_with_store_internal(
14281457 Arc :: clone ( & config) ,
14291458 Arc :: clone ( & logger) ,
14301459 ) ) ;
1460+ eprintln ! ( "TIMING: [ldk-node] wallet setup (BDK) took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
14311461
14321462 // Initialize the KeysManager
14331463 let cur_time = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) . map_err ( |e| {
@@ -1456,6 +1486,7 @@ fn build_with_store_internal(
14561486 ) ) ;
14571487
14581488 // Read ChannelMonitor state from store
1489+ let step_start = Instant :: now ( ) ;
14591490 let channel_monitors = match persister. read_all_channel_monitors_with_updates ( ) {
14601491 Ok ( monitors) => monitors,
14611492 Err ( e) => {
@@ -1467,6 +1498,7 @@ fn build_with_store_internal(
14671498 }
14681499 } ,
14691500 } ;
1501+ eprintln ! ( "TIMING: [ldk-node] read_all_channel_monitors_with_updates() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
14701502
14711503 // Initialize the ChainMonitor
14721504 let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
@@ -1480,6 +1512,7 @@ fn build_with_store_internal(
14801512 ) ) ;
14811513
14821514 // Initialize the network graph, scorer, and router
1515+ let step_start = Instant :: now ( ) ;
14831516 let network_graph = match runtime
14841517 . block_on ( async { read_network_graph ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) . await } )
14851518 {
@@ -1493,7 +1526,9 @@ fn build_with_store_internal(
14931526 }
14941527 } ,
14951528 } ;
1529+ eprintln ! ( "TIMING: [ldk-node] read_network_graph() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
14961530
1531+ let step_start = Instant :: now ( ) ;
14971532 let local_scorer = match runtime. block_on ( async {
14981533 read_scorer ( Arc :: clone ( & kv_store) , Arc :: clone ( & network_graph) , Arc :: clone ( & logger) ) . await
14991534 } ) {
@@ -1510,6 +1545,7 @@ fn build_with_store_internal(
15101545 } ;
15111546
15121547 let scorer = Arc :: new ( Mutex :: new ( CombinedScorer :: new ( local_scorer) ) ) ;
1548+ eprintln ! ( "TIMING: [ldk-node] read_scorer() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
15131549
15141550 // Restore external pathfinding scores from cache if possible.
15151551 match runtime. block_on ( async {
@@ -1588,6 +1624,7 @@ fn build_with_store_internal(
15881624 Arc :: new ( MessageRouter :: new ( Arc :: clone ( & network_graph) , Arc :: clone ( & keys_manager) ) ) ;
15891625
15901626 // Initialize the ChannelManager
1627+ let step_start = Instant :: now ( ) ;
15911628 let channel_manager = {
15921629 if let Ok ( res) = KVStoreSync :: read (
15931630 & * kv_store,
@@ -1639,6 +1676,7 @@ fn build_with_store_internal(
16391676 )
16401677 }
16411678 } ;
1679+ eprintln ! ( "TIMING: [ldk-node] channel_manager init took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
16421680
16431681 let channel_manager = Arc :: new ( channel_manager) ;
16441682
@@ -1682,6 +1720,7 @@ fn build_with_store_internal(
16821720
16831721 // Initialize the GossipSource
16841722 // Use the configured gossip source, if the user set one, otherwise default to P2PNetwork.
1723+ let step_start = Instant :: now ( ) ;
16851724 let gossip_source_config = gossip_source_config. unwrap_or ( & GossipSourceConfig :: P2PNetwork ) ;
16861725
16871726 let gossip_source = match gossip_source_config {
@@ -1716,7 +1755,9 @@ fn build_with_store_internal(
17161755 ) )
17171756 } ,
17181757 } ;
1758+ eprintln ! ( "TIMING: [ldk-node] gossip_source setup took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
17191759
1760+ let step_start = Instant :: now ( ) ;
17201761 let event_queue = match runtime
17211762 . block_on ( async { read_event_queue ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) . await } )
17221763 {
@@ -1730,7 +1771,9 @@ fn build_with_store_internal(
17301771 }
17311772 } ,
17321773 } ;
1774+ eprintln ! ( "TIMING: [ldk-node] read_event_queue() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
17331775
1776+ let step_start = Instant :: now ( ) ;
17341777 let ( liquidity_source, custom_message_handler) =
17351778 if let Some ( lsc) = liquidity_source_config. as_ref ( ) {
17361779 let mut liquidity_source_builder = LiquiditySourceBuilder :: new (
@@ -1790,6 +1833,7 @@ fn build_with_store_internal(
17901833 } else {
17911834 ( None , Arc :: new ( NodeCustomMessageHandler :: new_ignoring ( ) ) )
17921835 } ;
1836+ eprintln ! ( "TIMING: [ldk-node] liquidity_source setup took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
17931837
17941838 let msg_handler = match gossip_source. as_gossip_sync ( ) {
17951839 GossipSync :: P2P ( p2p_gossip_sync) => MessageHandler {
@@ -1830,6 +1874,7 @@ fn build_with_store_internal(
18301874 ) ) ;
18311875
18321876 liquidity_source. as_ref ( ) . map ( |l| l. set_peer_manager ( Arc :: clone ( & peer_manager) ) ) ;
1877+ eprintln ! ( "TIMING: [ldk-node] peer_manager setup took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
18331878
18341879 gossip_source. set_gossip_verifier (
18351880 Arc :: clone ( & chain_source) ,
@@ -1840,6 +1885,7 @@ fn build_with_store_internal(
18401885 let connection_manager =
18411886 Arc :: new ( ConnectionManager :: new ( Arc :: clone ( & peer_manager) , Arc :: clone ( & logger) ) ) ;
18421887
1888+ let step_start = Instant :: now ( ) ;
18431889 let output_sweeper = match runtime. block_on ( async {
18441890 read_output_sweeper (
18451891 Arc :: clone ( & tx_broadcaster) ,
@@ -1870,7 +1916,9 @@ fn build_with_store_internal(
18701916 }
18711917 } ,
18721918 } ;
1919+ eprintln ! ( "TIMING: [ldk-node] read_output_sweeper() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
18731920
1921+ let step_start = Instant :: now ( ) ;
18741922 let peer_store = match runtime
18751923 . block_on ( async { read_peer_info ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) . await } )
18761924 {
@@ -1884,6 +1932,7 @@ fn build_with_store_internal(
18841932 }
18851933 } ,
18861934 } ;
1935+ eprintln ! ( "TIMING: [ldk-node] read_peer_info() took {}ms" , step_start. elapsed( ) . as_millis( ) ) ;
18871936
18881937 let om_mailbox = if let Some ( AsyncPaymentsRole :: Server ) = async_payments_role {
18891938 Some ( Arc :: new ( OnionMessageMailbox :: new ( ) ) )
@@ -1897,6 +1946,7 @@ fn build_with_store_internal(
18971946
18981947 let pathfinding_scores_sync_url = pathfinding_scores_sync_config. map ( |c| c. url . clone ( ) ) ;
18991948
1949+ eprintln ! ( "TIMING: [ldk-node] build_with_store_internal TOTAL took {}ms" , build_start. elapsed( ) . as_millis( ) ) ;
19001950 Ok ( Node {
19011951 runtime,
19021952 stop_sender,
0 commit comments