@@ -78,7 +78,7 @@ mod error;
7878mod event;
7979mod gossip;
8080mod hex_utils;
81- mod io;
81+ pub mod io;
8282mod logger;
8383mod payment_store;
8484mod peer_store;
@@ -312,8 +312,18 @@ impl Builder {
312312 self
313313 }
314314
315+ /// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
316+ /// previously configured.
317+ pub fn build ( & self ) -> Arc < Node < FilesystemStore > > {
318+ let ldk_data_dir = format ! ( "{}/ldk" , self . config. storage_dir_path) ;
319+ let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
320+ self . build_with_store ( kv_store)
321+ }
322+
315323 /// Builds a [`Node`] instance according to the options previously configured.
316- pub fn build ( & self ) -> Arc < Node > {
324+ pub fn build_with_store < K : KVStore + Sync + Send + ' static > (
325+ & self , kv_store : Arc < K > ,
326+ ) -> Arc < Node < K > > {
317327 let config = Arc :: new ( self . config . clone ( ) ) ;
318328
319329 let ldk_data_dir = format ! ( "{}/ldk" , config. storage_dir_path) ;
@@ -384,10 +394,8 @@ impl Builder {
384394 Arc :: clone ( & logger) ,
385395 ) ) ;
386396
387- let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
388-
389397 // Initialize the ChainMonitor
390- let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
398+ let chain_monitor: Arc < ChainMonitor < K > > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
391399 Some ( Arc :: clone ( & tx_sync) ) ,
392400 Arc :: clone ( & wallet) ,
393401 Arc :: clone ( & logger) ,
@@ -484,7 +492,7 @@ impl Builder {
484492 channel_monitor_references,
485493 ) ;
486494 let ( _hash, channel_manager) =
487- <( BlockHash , ChannelManager ) >:: read ( & mut reader, read_args)
495+ <( BlockHash , ChannelManager < K > ) >:: read ( & mut reader, read_args)
488496 . expect ( "Failed to read channel manager from store" ) ;
489497 channel_manager
490498 } else {
@@ -653,30 +661,34 @@ impl Builder {
653661 }
654662}
655663
664+ /// This type alias is required as Uniffi doesn't support generics, i.e., we can only expose only
665+ /// concretized types via this aliasing hack.
666+ type LDKNode = Node < FilesystemStore > ;
667+
656668/// The main interface object of LDK Node, wrapping the necessary LDK and BDK functionalities.
657669///
658670/// Needs to be initialized and instantiated through [`Builder::build`].
659- pub struct Node {
671+ pub struct Node < K : KVStore + Sync + Send + ' static > {
660672 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
661673 stop_running : Arc < AtomicBool > ,
662674 config : Arc < Config > ,
663675 wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > ,
664676 tx_sync : Arc < EsploraSyncClient < Arc < FilesystemLogger > > > ,
665- event_queue : Arc < EventQueue < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
666- channel_manager : Arc < ChannelManager > ,
667- chain_monitor : Arc < ChainMonitor > ,
668- peer_manager : Arc < PeerManager > ,
677+ event_queue : Arc < EventQueue < K , Arc < FilesystemLogger > > > ,
678+ channel_manager : Arc < ChannelManager < K > > ,
679+ chain_monitor : Arc < ChainMonitor < K > > ,
680+ peer_manager : Arc < PeerManager < K > > ,
669681 keys_manager : Arc < KeysManager > ,
670682 network_graph : Arc < NetworkGraph > ,
671683 gossip_source : Arc < GossipSource > ,
672- kv_store : Arc < FilesystemStore > ,
684+ kv_store : Arc < K > ,
673685 logger : Arc < FilesystemLogger > ,
674686 scorer : Arc < Mutex < Scorer > > ,
675- peer_store : Arc < PeerStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
676- payment_store : Arc < PaymentStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
687+ peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
688+ payment_store : Arc < PaymentStore < K , Arc < FilesystemLogger > > > ,
677689}
678690
679- impl Node {
691+ impl < K : KVStore + Sync + Send + ' static > Node < K > {
680692 /// Starts the necessary background tasks, such as handling events coming from user input,
681693 /// LDK/BDK, and the peer-to-peer network.
682694 ///
@@ -1558,14 +1570,14 @@ impl Node {
15581570 }
15591571}
15601572
1561- impl Drop for Node {
1573+ impl < K : KVStore + Sync + Send + ' static > Drop for Node < K > {
15621574 fn drop ( & mut self ) {
15631575 let _ = self . stop ( ) ;
15641576 }
15651577}
15661578
1567- async fn connect_peer_if_necessary (
1568- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1579+ async fn connect_peer_if_necessary < K : KVStore + Sync + Send + ' static + ' static > (
1580+ pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager < K > > ,
15691581 logger : Arc < FilesystemLogger > ,
15701582) -> Result < ( ) , Error > {
15711583 for ( node_pubkey, _addr) in peer_manager. get_peer_node_ids ( ) {
@@ -1577,8 +1589,8 @@ async fn connect_peer_if_necessary(
15771589 do_connect_peer ( pubkey, peer_addr, peer_manager, logger) . await
15781590}
15791591
1580- async fn do_connect_peer (
1581- pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager > ,
1592+ async fn do_connect_peer < K : KVStore + Sync + Send + ' static + ' static > (
1593+ pubkey : PublicKey , peer_addr : SocketAddr , peer_manager : Arc < PeerManager < K > > ,
15821594 logger : Arc < FilesystemLogger > ,
15831595) -> Result < ( ) , Error > {
15841596 log_info ! ( logger, "Connecting to peer: {}@{}" , pubkey, peer_addr) ;
0 commit comments