@@ -55,13 +55,20 @@ use crate::fee_estimator::OnchainFeeEstimator;
5555use crate :: gossip:: GossipSource ;
5656use crate :: io:: sqlite_store:: SqliteStore ;
5757use crate :: io:: utils:: {
58- read_event_queue, read_external_pathfinding_scores_from_cache, read_network_graph,
58+ read_channel_forwarding_stats, read_channel_pair_forwarding_stats, read_event_queue,
59+ read_external_pathfinding_scores_from_cache, read_forwarded_payments, read_network_graph,
5960 read_node_metrics, read_output_sweeper, read_payments, read_peer_info, read_pending_payments,
6061 read_scorer, write_node_metrics,
6162} ;
6263use crate :: io:: vss_store:: VssStoreBuilder ;
6364use crate :: io:: {
64- self , PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE , PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE ,
65+ self , CHANNEL_FORWARDING_STATS_PERSISTENCE_PRIMARY_NAMESPACE ,
66+ CHANNEL_FORWARDING_STATS_PERSISTENCE_SECONDARY_NAMESPACE ,
67+ CHANNEL_PAIR_FORWARDING_STATS_PERSISTENCE_PRIMARY_NAMESPACE ,
68+ CHANNEL_PAIR_FORWARDING_STATS_PERSISTENCE_SECONDARY_NAMESPACE ,
69+ FORWARDED_PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE ,
70+ FORWARDED_PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE ,
71+ PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE , PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE ,
6572 PENDING_PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE ,
6673 PENDING_PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE ,
6774} ;
@@ -75,9 +82,10 @@ use crate::peer_store::PeerStore;
7582use crate :: runtime:: { Runtime , RuntimeSpawner } ;
7683use crate :: tx_broadcaster:: TransactionBroadcaster ;
7784use crate :: types:: {
78- AsyncPersister , ChainMonitor , ChannelManager , DynStore , DynStoreWrapper , GossipSync , Graph ,
79- KeysManager , MessageRouter , OnionMessenger , PaymentStore , PeerManager , PendingPaymentStore ,
80- Persister , SyncAndAsyncKVStore ,
85+ AsyncPersister , ChainMonitor , ChannelForwardingStatsStore , ChannelManager ,
86+ ChannelPairForwardingStatsStore , DynStore , DynStoreWrapper , ForwardedPaymentStore , GossipSync ,
87+ Graph , KeysManager , MessageRouter , OnionMessenger , PaymentStore , PeerManager ,
88+ PendingPaymentStore , Persister , SyncAndAsyncKVStore ,
8189} ;
8290use crate :: wallet:: persist:: KVStoreWalletPersister ;
8391use crate :: wallet:: Wallet ;
@@ -1060,14 +1068,23 @@ fn build_with_store_internal(
10601068
10611069 let kv_store_ref = Arc :: clone ( & kv_store) ;
10621070 let logger_ref = Arc :: clone ( & logger) ;
1063- let ( payment_store_res, node_metris_res, pending_payment_store_res) =
1064- runtime. block_on ( async move {
1065- tokio:: join!(
1066- read_payments( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1067- read_node_metrics( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1068- read_pending_payments( & * kv_store_ref, Arc :: clone( & logger_ref) )
1069- )
1070- } ) ;
1071+ let (
1072+ payment_store_res,
1073+ forwarded_payment_store_res,
1074+ channel_forwarding_stats_res,
1075+ channel_pair_forwarding_stats_res,
1076+ node_metris_res,
1077+ pending_payment_store_res,
1078+ ) = runtime. block_on ( async move {
1079+ tokio:: join!(
1080+ read_payments( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1081+ read_forwarded_payments( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1082+ read_channel_forwarding_stats( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1083+ read_channel_pair_forwarding_stats( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1084+ read_node_metrics( & * kv_store_ref, Arc :: clone( & logger_ref) ) ,
1085+ read_pending_payments( & * kv_store_ref, Arc :: clone( & logger_ref) )
1086+ )
1087+ } ) ;
10711088
10721089 // Initialize the status fields.
10731090 let node_metrics = match node_metris_res {
@@ -1096,6 +1113,48 @@ fn build_with_store_internal(
10961113 } ,
10971114 } ;
10981115
1116+ let forwarded_payment_store = match forwarded_payment_store_res {
1117+ Ok ( forwarded_payments) => Arc :: new ( ForwardedPaymentStore :: new (
1118+ forwarded_payments,
1119+ FORWARDED_PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE . to_string ( ) ,
1120+ FORWARDED_PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE . to_string ( ) ,
1121+ Arc :: clone ( & kv_store) ,
1122+ Arc :: clone ( & logger) ,
1123+ ) ) ,
1124+ Err ( e) => {
1125+ log_error ! ( logger, "Failed to read forwarded payment data from store: {}" , e) ;
1126+ return Err ( BuildError :: ReadFailed ) ;
1127+ } ,
1128+ } ;
1129+
1130+ let channel_forwarding_stats_store = match channel_forwarding_stats_res {
1131+ Ok ( stats) => Arc :: new ( ChannelForwardingStatsStore :: new (
1132+ stats,
1133+ CHANNEL_FORWARDING_STATS_PERSISTENCE_PRIMARY_NAMESPACE . to_string ( ) ,
1134+ CHANNEL_FORWARDING_STATS_PERSISTENCE_SECONDARY_NAMESPACE . to_string ( ) ,
1135+ Arc :: clone ( & kv_store) ,
1136+ Arc :: clone ( & logger) ,
1137+ ) ) ,
1138+ Err ( e) => {
1139+ log_error ! ( logger, "Failed to read channel forwarding stats from store: {}" , e) ;
1140+ return Err ( BuildError :: ReadFailed ) ;
1141+ } ,
1142+ } ;
1143+
1144+ let channel_pair_forwarding_stats_store = match channel_pair_forwarding_stats_res {
1145+ Ok ( stats) => Arc :: new ( ChannelPairForwardingStatsStore :: new (
1146+ stats,
1147+ CHANNEL_PAIR_FORWARDING_STATS_PERSISTENCE_PRIMARY_NAMESPACE . to_string ( ) ,
1148+ CHANNEL_PAIR_FORWARDING_STATS_PERSISTENCE_SECONDARY_NAMESPACE . to_string ( ) ,
1149+ Arc :: clone ( & kv_store) ,
1150+ Arc :: clone ( & logger) ,
1151+ ) ) ,
1152+ Err ( e) => {
1153+ log_error ! ( logger, "Failed to read channel pair forwarding stats from store: {}" , e) ;
1154+ return Err ( BuildError :: ReadFailed ) ;
1155+ } ,
1156+ } ;
1157+
10991158 let ( chain_source, chain_tip_opt) = match chain_data_source_config {
11001159 Some ( ChainDataSourceConfig :: Esplora { server_url, headers, sync_config } ) => {
11011160 let sync_config = sync_config. unwrap_or ( EsploraSyncConfig :: default ( ) ) ;
@@ -1782,6 +1841,9 @@ fn build_with_store_internal(
17821841 scorer,
17831842 peer_store,
17841843 payment_store,
1844+ forwarded_payment_store,
1845+ channel_forwarding_stats_store,
1846+ channel_pair_forwarding_stats_store,
17851847 is_running,
17861848 node_metrics,
17871849 om_mailbox,
0 commit comments