@@ -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;
@@ -320,8 +320,18 @@ impl Builder {
320320 self
321321 }
322322
323+ /// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
324+ /// previously configured.
325+ pub fn build ( & self ) -> Arc < Node < FilesystemStore > > {
326+ let ldk_data_dir = format ! ( "{}/ldk" , self . config. storage_dir_path) ;
327+ let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
328+ self . build_with_store ( kv_store)
329+ }
330+
323331 /// Builds a [`Node`] instance according to the options previously configured.
324- pub fn build ( & self ) -> Arc < Node > {
332+ pub fn build_with_store < K : KVStore + Sync + Send + ' static > (
333+ & self , kv_store : Arc < K > ,
334+ ) -> Arc < Node < K > > {
325335 let config = Arc :: new ( self . config . clone ( ) ) ;
326336
327337 let ldk_data_dir = format ! ( "{}/ldk" , config. storage_dir_path) ;
@@ -392,10 +402,8 @@ impl Builder {
392402 Arc :: clone ( & logger) ,
393403 ) ) ;
394404
395- let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
396-
397405 // Initialize the ChainMonitor
398- let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
406+ let chain_monitor: Arc < ChainMonitor < K > > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
399407 Some ( Arc :: clone ( & tx_sync) ) ,
400408 Arc :: clone ( & wallet) ,
401409 Arc :: clone ( & logger) ,
@@ -492,7 +500,7 @@ impl Builder {
492500 channel_monitor_references,
493501 ) ;
494502 let ( _hash, channel_manager) =
495- <( BlockHash , ChannelManager ) >:: read ( & mut reader, read_args)
503+ <( BlockHash , ChannelManager < K > ) >:: read ( & mut reader, read_args)
496504 . expect ( "Failed to read channel manager from store" ) ;
497505 channel_manager
498506 } else {
@@ -662,31 +670,35 @@ impl Builder {
662670 }
663671}
664672
673+ /// This type alias is required as Uniffi doesn't support generics, i.e., we can only expose the
674+ /// concretized types via this aliasing hack.
675+ type LDKNode = Node < FilesystemStore > ;
676+
665677/// The main interface object of LDK Node, wrapping the necessary LDK and BDK functionalities.
666678///
667679/// Needs to be initialized and instantiated through [`Builder::build`].
668- pub struct Node {
680+ pub struct Node < K : KVStore + Sync + Send + ' static > {
669681 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
670682 stop_sender : tokio:: sync:: watch:: Sender < ( ) > ,
671683 stop_receiver : tokio:: sync:: watch:: Receiver < ( ) > ,
672684 config : Arc < Config > ,
673685 wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > ,
674686 tx_sync : Arc < EsploraSyncClient < Arc < FilesystemLogger > > > ,
675- event_queue : Arc < EventQueue < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
676- channel_manager : Arc < ChannelManager > ,
677- chain_monitor : Arc < ChainMonitor > ,
678- peer_manager : Arc < PeerManager > ,
687+ event_queue : Arc < EventQueue < K , Arc < FilesystemLogger > > > ,
688+ channel_manager : Arc < ChannelManager < K > > ,
689+ chain_monitor : Arc < ChainMonitor < K > > ,
690+ peer_manager : Arc < PeerManager < K > > ,
679691 keys_manager : Arc < KeysManager > ,
680692 network_graph : Arc < NetworkGraph > ,
681693 gossip_source : Arc < GossipSource > ,
682- kv_store : Arc < FilesystemStore > ,
694+ kv_store : Arc < K > ,
683695 logger : Arc < FilesystemLogger > ,
684696 scorer : Arc < Mutex < Scorer > > ,
685- peer_store : Arc < PeerStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
686- payment_store : Arc < PaymentStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
697+ peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
698+ payment_store : Arc < PaymentStore < K , Arc < FilesystemLogger > > > ,
687699}
688700
689- impl Node {
701+ impl < K : KVStore + Sync + Send + ' static > Node < K > {
690702 /// Starts the necessary background tasks, such as handling events coming from user input,
691703 /// LDK/BDK, and the peer-to-peer network.
692704 ///
@@ -1682,14 +1694,14 @@ impl Node {
16821694 }
16831695}
16841696
1685- impl Drop for Node {
1697+ impl < K : KVStore + Sync + Send + ' static > Drop for Node < K > {
16861698 fn drop ( & mut self ) {
16871699 let _ = self . stop ( ) ;
16881700 }
16891701}
16901702
1691- async fn connect_peer_if_necessary (
1692- node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
1703+ async fn connect_peer_if_necessary < K : KVStore + Sync + Send + ' static + ' static > (
1704+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager < K > > ,
16931705 logger : Arc < FilesystemLogger > ,
16941706) -> Result < ( ) , Error > {
16951707 for ( pman_node_id, _pman_addr) in peer_manager. get_peer_node_ids ( ) {
@@ -1701,8 +1713,8 @@ async fn connect_peer_if_necessary(
17011713 do_connect_peer ( node_id, addr, peer_manager, logger) . await
17021714}
17031715
1704- async fn do_connect_peer (
1705- node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
1716+ async fn do_connect_peer < K : KVStore + Sync + Send + ' static + ' static > (
1717+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager < K > > ,
17061718 logger : Arc < FilesystemLogger > ,
17071719) -> Result < ( ) , Error > {
17081720 log_info ! ( logger, "Connecting to peer: {}@{}" , node_id, addr) ;
0 commit comments