@@ -41,7 +41,7 @@ use lightning::util::config::UserConfig;
4141use lightning:: util:: hash_tables:: hash_map:: Entry ;
4242use lightning:: util:: hash_tables:: HashMap ;
4343use lightning:: util:: persist:: {
44- self , KVStore , MonitorUpdatingPersister , OUTPUT_SWEEPER_PERSISTENCE_KEY ,
44+ self , KVStore , MonitorUpdatingPersisterAsync , OUTPUT_SWEEPER_PERSISTENCE_KEY ,
4545 OUTPUT_SWEEPER_PERSISTENCE_PRIMARY_NAMESPACE , OUTPUT_SWEEPER_PERSISTENCE_SECONDARY_NAMESPACE ,
4646} ;
4747use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
@@ -139,15 +139,14 @@ type ChainMonitor = chainmonitor::ChainMonitor<
139139 Arc < BitcoindClient > ,
140140 Arc < BitcoindClient > ,
141141 Arc < FilesystemLogger > ,
142- Arc <
143- MonitorUpdatingPersister <
144- Arc < FilesystemStore > ,
145- Arc < FilesystemLogger > ,
146- Arc < KeysManager > ,
147- Arc < KeysManager > ,
148- Arc < BitcoindClient > ,
149- Arc < BitcoindClient > ,
150- > ,
142+ chainmonitor:: AsyncPersister <
143+ Arc < FilesystemStore > ,
144+ TokioSpawner ,
145+ Arc < FilesystemLogger > ,
146+ Arc < KeysManager > ,
147+ Arc < KeysManager > ,
148+ Arc < BitcoindClient > ,
149+ Arc < BitcoindClient > ,
151150 > ,
152151 Arc < KeysManager > ,
153152> ;
@@ -679,36 +678,37 @@ async fn start_ldk() {
679678
680679 // Step 5: Initialize Persistence
681680 let fs_store = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
682- let persister = Arc :: new ( MonitorUpdatingPersister :: new (
681+ let persister = MonitorUpdatingPersisterAsync :: new (
683682 Arc :: clone ( & fs_store) ,
683+ TokioSpawner ,
684684 Arc :: clone ( & logger) ,
685685 1000 ,
686686 Arc :: clone ( & keys_manager) ,
687687 Arc :: clone ( & keys_manager) ,
688688 Arc :: clone ( & bitcoind_client) ,
689689 Arc :: clone ( & bitcoind_client) ,
690- ) ) ;
690+ ) ;
691691 // Alternatively, you can use the `FilesystemStore` as a `Persist` directly, at the cost of
692692 // larger `ChannelMonitor` update writes (but no deletion or cleanup):
693693 //let persister = Arc::clone(&fs_store);
694694
695- // Step 6: Initialize the ChainMonitor
696- let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new (
695+ // Step 6: Read ChannelMonitor state from disk
696+ let mut channelmonitors = persister. read_all_channel_monitors_with_updates ( ) . await . unwrap ( ) ;
697+ // If you are using the `FilesystemStore` as a `Persist` directly, use
698+ // `lightning::util::persist::read_channel_monitors` like this:
699+ // read_channel_monitors(Arc::clone(&persister), Arc::clone(&keys_manager), Arc::clone(&keys_manager)).unwrap();
700+
701+ // Step 7: Initialize the ChainMonitor
702+ let chain_monitor: Arc < ChainMonitor > = Arc :: new ( chainmonitor:: ChainMonitor :: new_async_beta (
697703 None ,
698704 Arc :: clone ( & broadcaster) ,
699705 Arc :: clone ( & logger) ,
700706 Arc :: clone ( & fee_estimator) ,
701- Arc :: clone ( & persister) ,
707+ persister,
702708 Arc :: clone ( & keys_manager) ,
703709 keys_manager. get_peer_storage_key ( ) ,
704710 ) ) ;
705711
706- // Step 7: Read ChannelMonitor state from disk
707- let mut channelmonitors = persister. read_all_channel_monitors_with_updates ( ) . unwrap ( ) ;
708- // If you are using the `FilesystemStore` as a `Persist` directly, use
709- // `lightning::util::persist::read_channel_monitors` like this:
710- //read_channel_monitors(Arc::clone(&persister), Arc::clone(&keys_manager), Arc::clone(&keys_manager)).unwrap();
711-
712712 // Step 8: Poll for the best chain tip, which may be used by the channel manager & spv client
713713 let polled_chain_tip = init:: validate_best_block_header ( bitcoind_client. as_ref ( ) )
714714 . await
@@ -870,6 +870,8 @@ async fn start_ldk() {
870870 // Step 14: Give ChannelMonitors to ChainMonitor
871871 for ( _, ( channel_monitor, _, _, _) , _) in chain_listener_channel_monitors {
872872 let channel_id = channel_monitor. channel_id ( ) ;
873+ // Note that this may not return `Completed` for ChannelMonitors which were last written by
874+ // a version of LDK prior to 0.1.
873875 assert_eq ! (
874876 chain_monitor. load_existing_monitor( channel_id, channel_monitor) ,
875877 Ok ( ChannelMonitorUpdateStatus :: Completed )
0 commit comments