@@ -22,9 +22,11 @@ use bitcoin::Network;
2222use lightning:: io:: Cursor ;
2323use lightning:: ln:: msgs:: DecodeError ;
2424use lightning:: routing:: gossip:: NetworkGraph ;
25- use lightning:: routing:: scoring:: { ProbabilisticScorer , ProbabilisticScoringDecayParameters } ;
25+ use lightning:: routing:: scoring:: {
26+ ChannelLiquidities , ProbabilisticScorer , ProbabilisticScoringDecayParameters ,
27+ } ;
2628use lightning:: util:: persist:: {
27- KVStoreSync , KVSTORE_NAMESPACE_KEY_ALPHABET , KVSTORE_NAMESPACE_KEY_MAX_LEN ,
29+ KVStore , KVStoreSync , KVSTORE_NAMESPACE_KEY_ALPHABET , KVSTORE_NAMESPACE_KEY_MAX_LEN ,
2830 NETWORK_GRAPH_PERSISTENCE_KEY , NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE ,
2931 NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE , OUTPUT_SWEEPER_PERSISTENCE_KEY ,
3032 OUTPUT_SWEEPER_PERSISTENCE_PRIMARY_NAMESPACE , OUTPUT_SWEEPER_PERSISTENCE_SECONDARY_NAMESPACE ,
@@ -48,6 +50,8 @@ use crate::types::{Broadcaster, DynStore, KeysManager, Sweeper};
4850use crate :: wallet:: ser:: { ChangeSetDeserWrapper , ChangeSetSerWrapper } ;
4951use crate :: { Error , EventQueue , NodeMetrics , PaymentDetails } ;
5052
53+ pub const EXTERNAL_PATHFINDING_SCORES_CACHE_KEY : & str = "external_pathfinding_scores_cache" ;
54+
5155/// Generates a random [BIP 39] mnemonic.
5256///
5357/// The result may be used to initialize the [`Node`] entropy, i.e., can be given to
@@ -164,6 +168,53 @@ where
164168 } )
165169}
166170
171+ /// Read previously persisted external pathfinding scores from the cache.
172+ pub ( crate ) fn read_external_pathfinding_scores_from_cache < L : Deref > (
173+ kv_store : Arc < DynStore > , logger : L ,
174+ ) -> Result < ChannelLiquidities , std:: io:: Error >
175+ where
176+ L :: Target : LdkLogger ,
177+ {
178+ let mut reader = Cursor :: new ( KVStoreSync :: read (
179+ & * kv_store,
180+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
181+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
182+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
183+ ) ?) ;
184+ ChannelLiquidities :: read ( & mut reader) . map_err ( |e| {
185+ log_error ! ( logger, "Failed to deserialize scorer: {}" , e) ;
186+ std:: io:: Error :: new ( std:: io:: ErrorKind :: InvalidData , "Failed to deserialize Scorer" )
187+ } )
188+ }
189+
190+ /// Persist external pathfinding scores to the cache.
191+ pub ( crate ) async fn write_external_pathfinding_scores_to_cache < L : Deref > (
192+ kv_store : Arc < DynStore > , data : & ChannelLiquidities , logger : L ,
193+ ) -> Result < ( ) , Error >
194+ where
195+ L :: Target : LdkLogger ,
196+ {
197+ KVStore :: write (
198+ & * kv_store,
199+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
200+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
201+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
202+ data. encode ( ) ,
203+ )
204+ . await
205+ . map_err ( |e| {
206+ log_error ! (
207+ logger,
208+ "Writing data to key {}/{}/{} failed due to: {}" ,
209+ NODE_METRICS_PRIMARY_NAMESPACE ,
210+ NODE_METRICS_SECONDARY_NAMESPACE ,
211+ EXTERNAL_PATHFINDING_SCORES_CACHE_KEY ,
212+ e
213+ ) ;
214+ Error :: PersistenceFailed
215+ } )
216+ }
217+
167218/// Read previously persisted events from the store.
168219pub ( crate ) fn read_event_queue < L : Deref + Clone > (
169220 kv_store : Arc < DynStore > , logger : L ,
0 commit comments