@@ -81,11 +81,11 @@ use crate::tx_broadcaster::TransactionBroadcaster;
8181use crate :: types:: {
8282 AsyncPersister , ChainMonitor , ChannelManager , DynStore , DynStoreRef , DynStoreWrapper ,
8383 GossipSync , Graph , HRNResolver , KeysManager , MessageRouter , OnionMessenger , PaymentStore ,
84- PeerManager , PendingPaymentStore , SyncAndAsyncKVStore ,
84+ PeerManager , PendingPaymentStore ,
8585} ;
8686use crate :: wallet:: persist:: KVStoreWalletPersister ;
8787use crate :: wallet:: Wallet ;
88- use crate :: { Node , NodeMetrics } ;
88+ use crate :: { Node , NodeMetrics , PersistedNodeMetrics } ;
8989
9090const LSPS_HARDENED_CHILD_INDEX : u32 = 577 ;
9191const PERSISTER_MAX_PENDING_UPDATES : u64 = 100 ;
@@ -176,17 +176,17 @@ pub enum BuildError {
176176 RuntimeSetupFailed ,
177177 /// We failed to read data from the [`KVStore`].
178178 ///
179- /// [`KVStore`]: lightning::util::persist::KVStoreSync
179+ /// [`KVStore`]: lightning::util::persist::KVStore
180180 ReadFailed ,
181181 /// We failed to write data to the [`KVStore`].
182182 ///
183- /// [`KVStore`]: lightning::util::persist::KVStoreSync
183+ /// [`KVStore`]: lightning::util::persist::KVStore
184184 WriteFailed ,
185185 /// We failed to access the given `storage_dir_path`.
186186 StoragePathAccessFailed ,
187187 /// We failed to setup our [`KVStore`].
188188 ///
189- /// [`KVStore`]: lightning::util::persist::KVStoreSync
189+ /// [`KVStore`]: lightning::util::persist::KVStore
190190 KVStoreSetupFailed ,
191191 /// We failed to setup the onchain wallet.
192192 WalletSetupFailed ,
@@ -697,11 +697,12 @@ impl NodeBuilder {
697697 /// [`FilesystemStoreV2`]: lightning_persister::fs_store::v2::FilesystemStoreV2
698698 pub fn build_with_fs_store ( & self , node_entropy : NodeEntropy ) -> Result < Node , BuildError > {
699699 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
700+ let runtime = self . setup_runtime ( & logger) ?;
700701 let mut storage_dir_path: PathBuf = self . config . storage_dir_path . clone ( ) . into ( ) ;
701702 storage_dir_path. push ( "fs_store" ) ;
702703
703- let kv_store = open_or_migrate_fs_store ( storage_dir_path) ?;
704- self . build_with_store_and_logger ( node_entropy, kv_store, logger)
704+ let kv_store = runtime . block_on ( open_or_migrate_fs_store ( storage_dir_path) ) ?;
705+ self . build_with_store_runtime_and_logger ( node_entropy, kv_store, runtime , logger)
705706 }
706707
707708 /// Builds a [`Node`] instance with a [VSS] backend and according to the options
@@ -825,7 +826,7 @@ impl NodeBuilder {
825826 }
826827
827828 /// Builds a [`Node`] instance according to the options previously configured.
828- pub fn build_with_store < S : SyncAndAsyncKVStore + Send + Sync + ' static > (
829+ pub fn build_with_store < S : KVStore + Send + Sync + ' static > (
829830 & self , node_entropy : NodeEntropy , kv_store : S ,
830831 ) -> Result < Node , BuildError > {
831832 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
@@ -844,14 +845,14 @@ impl NodeBuilder {
844845 }
845846 }
846847
847- fn build_with_store_and_logger < S : SyncAndAsyncKVStore + Send + Sync + ' static > (
848+ fn build_with_store_and_logger < S : KVStore + Send + Sync + ' static > (
848849 & self , node_entropy : NodeEntropy , kv_store : S , logger : Arc < Logger > ,
849850 ) -> Result < Node , BuildError > {
850851 let runtime = self . setup_runtime ( & logger) ?;
851852 self . build_with_store_runtime_and_logger ( node_entropy, kv_store, runtime, logger)
852853 }
853854
854- fn build_with_store_runtime_and_logger < S : SyncAndAsyncKVStore + Send + Sync + ' static > (
855+ fn build_with_store_runtime_and_logger < S : KVStore + Send + Sync + ' static > (
855856 & self , node_entropy : NodeEntropy , kv_store : S , runtime : Arc < Runtime > , logger : Arc < Logger > ,
856857 ) -> Result < Node , BuildError > {
857858 let seed_bytes = node_entropy. to_seed_bytes ( ) ;
@@ -1345,7 +1346,7 @@ impl ArcedNodeBuilder {
13451346 /// Builds a [`Node`] instance according to the options previously configured.
13461347 // Note that the generics here don't actually work for Uniffi, but we don't currently expose
13471348 // this so its not needed.
1348- pub fn build_with_store < S : SyncAndAsyncKVStore + Send + Sync + ' static > (
1349+ pub fn build_with_store < S : KVStore + Send + Sync + ' static > (
13491350 & self , node_entropy : Arc < NodeEntropy > , kv_store : S ,
13501351 ) -> Result < Arc < Node > , BuildError > {
13511352 self . inner . read ( ) . expect ( "lock" ) . build_with_store ( * node_entropy, kv_store) . map ( Arc :: new)
@@ -1415,10 +1416,10 @@ fn build_with_store_internal(
14151416
14161417 // Initialize the status fields.
14171418 let node_metrics = match node_metris_res {
1418- Ok ( metrics) => Arc :: new ( RwLock :: new ( metrics) ) ,
1419+ Ok ( metrics) => Arc :: new ( PersistedNodeMetrics :: new ( metrics) ) ,
14191420 Err ( e) => {
14201421 if e. kind ( ) == std:: io:: ErrorKind :: NotFound {
1421- Arc :: new ( RwLock :: new ( NodeMetrics :: default ( ) ) )
1422+ Arc :: new ( PersistedNodeMetrics :: new ( NodeMetrics :: default ( ) ) )
14221423 } else {
14231424 log_error ! ( logger, "Failed to read node metrics from store: {}" , e) ;
14241425 return Err ( BuildError :: ReadFailed ) ;
@@ -1539,12 +1540,16 @@ fn build_with_store_internal(
15391540 let change_descriptor = Bip84 ( xprv, KeychainKind :: Internal ) ;
15401541 let mut wallet_persister =
15411542 KVStoreWalletPersister :: new ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) ;
1542- let wallet_opt = BdkWallet :: load ( )
1543- . descriptor ( KeychainKind :: External , Some ( descriptor. clone ( ) ) )
1544- . descriptor ( KeychainKind :: Internal , Some ( change_descriptor. clone ( ) ) )
1545- . extract_keys ( )
1546- . check_network ( config. network )
1547- . load_wallet ( & mut wallet_persister)
1543+ let wallet_opt = runtime
1544+ . block_on ( async {
1545+ BdkWallet :: load ( )
1546+ . descriptor ( KeychainKind :: External , Some ( descriptor. clone ( ) ) )
1547+ . descriptor ( KeychainKind :: Internal , Some ( change_descriptor. clone ( ) ) )
1548+ . extract_keys ( )
1549+ . check_network ( config. network )
1550+ . load_wallet_async ( & mut wallet_persister)
1551+ . await
1552+ } )
15481553 . map_err ( |e| match e {
15491554 bdk_wallet:: LoadWithPersistError :: InvalidChangeSet (
15501555 bdk_wallet:: LoadError :: Mismatch ( bdk_wallet:: LoadMismatch :: Network {
@@ -1568,9 +1573,13 @@ fn build_with_store_internal(
15681573 let bdk_wallet = match wallet_opt {
15691574 Some ( wallet) => wallet,
15701575 None => {
1571- let mut wallet = BdkWallet :: create ( descriptor, change_descriptor)
1572- . network ( config. network )
1573- . create_wallet ( & mut wallet_persister)
1576+ let mut wallet = runtime
1577+ . block_on ( async {
1578+ BdkWallet :: create ( descriptor, change_descriptor)
1579+ . network ( config. network )
1580+ . create_wallet_async ( & mut wallet_persister)
1581+ . await
1582+ } )
15741583 . map_err ( |e| {
15751584 log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
15761585 BuildError :: WalletSetupFailed
@@ -1619,6 +1628,7 @@ fn build_with_store_internal(
16191628 Arc :: clone ( & fee_estimator) ,
16201629 Arc :: clone ( & chain_source) ,
16211630 Arc :: clone ( & payment_store) ,
1631+ Arc :: clone ( & runtime) ,
16221632 Arc :: clone ( & config) ,
16231633 Arc :: clone ( & logger) ,
16241634 Arc :: clone ( & pending_payment_store) ,
0 commit comments