@@ -78,7 +78,7 @@ mod error;
78
78
mod event;
79
79
mod gossip;
80
80
mod hex_utils;
81
- mod io;
81
+ pub mod io;
82
82
mod logger;
83
83
mod payment_store;
84
84
mod peer_store;
@@ -317,8 +317,18 @@ impl Builder {
317
317
self
318
318
}
319
319
320
+ /// Builds a [`Node`] instance with a [`FilesystemStore`] backend and according to the options
321
+ /// previously configured.
322
+ pub fn build ( & self ) -> Arc < Node < FilesystemStore > > {
323
+ let ldk_data_dir = format ! ( "{}/ldk" , self . config. storage_dir_path) ;
324
+ let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
325
+ self . build_with_store ( kv_store)
326
+ }
327
+
320
328
/// Builds a [`Node`] instance according to the options previously configured.
321
- pub fn build ( & self ) -> Arc < Node > {
329
+ pub fn build_with_store < K : KVStore + Sync + Send + ' static > (
330
+ & self , kv_store : Arc < K > ,
331
+ ) -> Arc < Node < K > > {
322
332
let config = Arc :: new ( self . config . clone ( ) ) ;
323
333
324
334
let ldk_data_dir = format ! ( "{}/ldk" , config. storage_dir_path) ;
@@ -389,10 +399,8 @@ impl Builder {
389
399
Arc :: clone ( & logger) ,
390
400
) ) ;
391
401
392
- let kv_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
393
-
394
402
// Initialize the ChainMonitor
395
- let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
403
+ let chain_monitor: Arc < ChainMonitor < K > > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
396
404
Some ( Arc :: clone ( & tx_sync) ) ,
397
405
Arc :: clone ( & wallet) ,
398
406
Arc :: clone ( & logger) ,
@@ -489,7 +497,7 @@ impl Builder {
489
497
channel_monitor_references,
490
498
) ;
491
499
let ( _hash, channel_manager) =
492
- <( BlockHash , ChannelManager ) >:: read ( & mut reader, read_args)
500
+ <( BlockHash , ChannelManager < K > ) >:: read ( & mut reader, read_args)
493
501
. expect ( "Failed to read channel manager from store" ) ;
494
502
channel_manager
495
503
} else {
@@ -659,31 +667,35 @@ impl Builder {
659
667
}
660
668
}
661
669
670
+ /// This type alias is required as Uniffi doesn't support generics, i.e., we can only expose the
671
+ /// concretized types via this aliasing hack.
672
+ type LDKNode = Node < FilesystemStore > ;
673
+
662
674
/// The main interface object of LDK Node, wrapping the necessary LDK and BDK functionalities.
663
675
///
664
676
/// Needs to be initialized and instantiated through [`Builder::build`].
665
- pub struct Node {
677
+ pub struct Node < K : KVStore + Sync + Send + ' static > {
666
678
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
667
679
stop_sender : tokio:: sync:: watch:: Sender < ( ) > ,
668
680
stop_receiver : tokio:: sync:: watch:: Receiver < ( ) > ,
669
681
config : Arc < Config > ,
670
682
wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > ,
671
683
tx_sync : Arc < EsploraSyncClient < Arc < FilesystemLogger > > > ,
672
- event_queue : Arc < EventQueue < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
673
- channel_manager : Arc < ChannelManager > ,
674
- chain_monitor : Arc < ChainMonitor > ,
675
- peer_manager : Arc < PeerManager > ,
684
+ event_queue : Arc < EventQueue < K , Arc < FilesystemLogger > > > ,
685
+ channel_manager : Arc < ChannelManager < K > > ,
686
+ chain_monitor : Arc < ChainMonitor < K > > ,
687
+ peer_manager : Arc < PeerManager < K > > ,
676
688
keys_manager : Arc < KeysManager > ,
677
689
network_graph : Arc < NetworkGraph > ,
678
690
gossip_source : Arc < GossipSource > ,
679
- kv_store : Arc < FilesystemStore > ,
691
+ kv_store : Arc < K > ,
680
692
logger : Arc < FilesystemLogger > ,
681
693
scorer : Arc < Mutex < Scorer > > ,
682
- peer_store : Arc < PeerStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
683
- payment_store : Arc < PaymentStore < Arc < FilesystemStore > , Arc < FilesystemLogger > > > ,
694
+ peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
695
+ payment_store : Arc < PaymentStore < K , Arc < FilesystemLogger > > > ,
684
696
}
685
697
686
- impl Node {
698
+ impl < K : KVStore + Sync + Send + ' static > Node < K > {
687
699
/// Starts the necessary background tasks, such as handling events coming from user input,
688
700
/// LDK/BDK, and the peer-to-peer network.
689
701
///
@@ -1624,14 +1636,14 @@ impl Node {
1624
1636
}
1625
1637
}
1626
1638
1627
- impl Drop for Node {
1639
+ impl < K : KVStore + Sync + Send + ' static > Drop for Node < K > {
1628
1640
fn drop ( & mut self ) {
1629
1641
let _ = self . stop ( ) ;
1630
1642
}
1631
1643
}
1632
1644
1633
- async fn connect_peer_if_necessary (
1634
- node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
1645
+ async fn connect_peer_if_necessary < K : KVStore + Sync + Send + ' static + ' static > (
1646
+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager < K > > ,
1635
1647
logger : Arc < FilesystemLogger > ,
1636
1648
) -> Result < ( ) , Error > {
1637
1649
for ( pman_node_id, _pman_addr) in peer_manager. get_peer_node_ids ( ) {
@@ -1643,8 +1655,8 @@ async fn connect_peer_if_necessary(
1643
1655
do_connect_peer ( node_id, addr, peer_manager, logger) . await
1644
1656
}
1645
1657
1646
- async fn do_connect_peer (
1647
- node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager > ,
1658
+ async fn do_connect_peer < K : KVStore + Sync + Send + ' static + ' static > (
1659
+ node_id : PublicKey , addr : NetAddress , peer_manager : Arc < PeerManager < K > > ,
1648
1660
logger : Arc < FilesystemLogger > ,
1649
1661
) -> Result < ( ) , Error > {
1650
1662
log_info ! ( logger, "Connecting to peer: {}@{}" , node_id, addr) ;
0 commit comments